diff options
| -rw-r--r-- | assets/shaders/texture.frag | 2 | ||||
| -rw-r--r-- | src/entities.cpp | 80 |
2 files changed, 46 insertions, 36 deletions
diff --git a/assets/shaders/texture.frag b/assets/shaders/texture.frag index e63995f..44e3dd6 100644 --- a/assets/shaders/texture.frag +++ b/assets/shaders/texture.frag @@ -1,6 +1,6 @@ # version 450 -layout(location = 0) in vec3 fragColor; +layout(location = 0) in vec4 fragColor; layout(location = 1) in vec3 fragTexCoord; layout(location = 0) out vec4 outColor; diff --git a/src/entities.cpp b/src/entities.cpp index 58420b2..8d9206b 100644 --- a/src/entities.cpp +++ b/src/entities.cpp @@ -5,8 +5,15 @@ DynArray<EntityType> globalEntityTypes{16}; VkDescriptorSetLayout vkDescriptorSetLayout_Texture = VK_NULL_HANDLE; VkPipelineLayout vkPipelineLayout_Texture = VK_NULL_HANDLE; VkSampler vkSampler_Texture = VK_NULL_HANDLE; -VkPipeline vkPipeline_Texture; -VkPipeline vkPipeline_TextureWireframe; +struct ImplementedPipelines { + union { + VkPipeline pipelines[2] = { VK_NULL_HANDLE, VK_NULL_HANDLE }; + struct { + VkPipeline Texture; + VkPipeline TextureWireframe; + }; + }; +} vkPipelines; VkPipelineLayoutCreateInfo sharedVkPipelineLayoutCreateInfo { .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, @@ -254,16 +261,16 @@ void EntityType_Init() { VkPipelineMultisampleStateCreateInfo vkPipelineMultisampleStateCreateInfo; vkPipelineMultisampleStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO; vkPipelineMultisampleStateCreateInfo.pNext = nullptr; - vkPipelineMultisampleStateCreateInfo.flags = {}; + vkPipelineMultisampleStateCreateInfo.flags = 0; vkPipelineMultisampleStateCreateInfo.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT; vkPipelineMultisampleStateCreateInfo.sampleShadingEnable = VK_FALSE; vkPipelineMultisampleStateCreateInfo.minSampleShading = 0.0f; vkPipelineMultisampleStateCreateInfo.pSampleMask = nullptr; - vkPipelineMultisampleStateCreateInfo.alphaToCoverageEnable = {}; - vkPipelineMultisampleStateCreateInfo.alphaToOneEnable = {}; + vkPipelineMultisampleStateCreateInfo.alphaToCoverageEnable = VK_FALSE; + vkPipelineMultisampleStateCreateInfo.alphaToOneEnable = VK_FALSE; // TODO Transparency - VkPipelineColorBlendAttachmentState vkPipelineColorBlendAttachmentState[0]; + VkPipelineColorBlendAttachmentState vkPipelineColorBlendAttachmentState[1]; vkPipelineColorBlendAttachmentState[0].blendEnable = VK_FALSE; vkPipelineColorBlendAttachmentState[0].srcColorBlendFactor = VK_BLEND_FACTOR_SRC_ALPHA; vkPipelineColorBlendAttachmentState[0].dstColorBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA; @@ -313,7 +320,7 @@ void EntityType_Init() { AssetHandle vertShaderAssetHandle = AM_Register("assets/shaders/vert.vert.spv"); AssetHandle textureFragShaderAssetHandle = AM_Register("assets/shaders/texture.frag.spv"); const Asset *vertShaderAsset = AM_Get(vertShaderAssetHandle); - const Asset *fragShaderAsset = AM_Get(vertShaderAssetHandle); + const Asset *fragShaderAsset = AM_Get(textureFragShaderAssetHandle); VkShaderModuleCreateInfo vkShaderModuleCreateInfo[2]; vkShaderModuleCreateInfo[0].codeSize = vertShaderAsset->size; vkShaderModuleCreateInfo[0].pCode = reinterpret_cast<const uint32_t *>(vertShaderAsset->ptr); @@ -332,7 +339,7 @@ void EntityType_Init() { vkPipelineShaderStageCreateInfo[i].pName = "main"; vkPipelineShaderStageCreateInfo[i].pSpecializationInfo = nullptr; - vkCreateShaderModule(vkDevice, &vkShaderModuleCreateInfo[0], vkAllocator, &shaderModules[i]); + vkCreateShaderModule(vkDevice, &vkShaderModuleCreateInfo[i], vkAllocator, &shaderModules[i]); } vkPipelineShaderStageCreateInfo[0].module = shaderModules[0]; @@ -340,33 +347,32 @@ void EntityType_Init() { vkPipelineShaderStageCreateInfo[0].stage = VK_SHADER_STAGE_VERTEX_BIT; vkPipelineShaderStageCreateInfo[1].stage = VK_SHADER_STAGE_FRAGMENT_BIT; - VkGraphicsPipelineCreateInfo vkGraphicsPipelineCreateInfoFill; - vkGraphicsPipelineCreateInfoFill.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO; - vkGraphicsPipelineCreateInfoFill.pNext = nullptr; - vkGraphicsPipelineCreateInfoFill.flags = {}; - vkGraphicsPipelineCreateInfoFill.stageCount = 2; - vkGraphicsPipelineCreateInfoFill.pStages = vkPipelineShaderStageCreateInfo; - vkGraphicsPipelineCreateInfoFill.pVertexInputState = &vkPipelineVertexInputStateCreateInfo; - vkGraphicsPipelineCreateInfoFill.pInputAssemblyState = &vkPipelineInputAssemblyStateCreateInfo; - vkGraphicsPipelineCreateInfoFill.pTessellationState = nullptr; - vkGraphicsPipelineCreateInfoFill.pViewportState = &vkPipelineViewportStateCreateInfo; - vkGraphicsPipelineCreateInfoFill.pRasterizationState = &vkPipelineRasterizationStateCreateInfoLine; - vkGraphicsPipelineCreateInfoFill.pMultisampleState = &vkPipelineMultisampleStateCreateInfo; - vkGraphicsPipelineCreateInfoFill.pDepthStencilState = &vkPipelineDepthStencilStateCreateInfo; - vkGraphicsPipelineCreateInfoFill.pColorBlendState = &vkPipelineColorBlendStateCreateInfo; - vkGraphicsPipelineCreateInfoFill.pDynamicState = &vkPipelineDynamicStateCreateInfo; - vkGraphicsPipelineCreateInfoFill.layout = vkPipelineLayout_Texture; - vkGraphicsPipelineCreateInfoFill.renderPass = vkRenderPass; - vkGraphicsPipelineCreateInfoFill.subpass = 0; - vkGraphicsPipelineCreateInfoFill.basePipelineHandle = VK_NULL_HANDLE; - vkGraphicsPipelineCreateInfoFill.basePipelineIndex = {}; - - VkGraphicsPipelineCreateInfo vkGraphicsPipelineCreateInfoLine{vkGraphicsPipelineCreateInfoFill}; - vkGraphicsPipelineCreateInfoLine.pRasterizationState = &vkPipelineRasterizationStateCreateInfoLine; - - VkGraphicsPipelineCreateInfo createPipelineInfos[2] = { vkGraphicsPipelineCreateInfoFill, vkGraphicsPipelineCreateInfoLine }; - VkPipeline pipelines[2] = { vkPipeline_Texture, vkPipeline_TextureWireframe }; - vkCreateGraphicsPipelines(vkDevice, VK_NULL_HANDLE, 2, createPipelineInfos, vkAllocator, pipelines); + VkGraphicsPipelineCreateInfo vkGraphicsPipelineCreateInfo[2]; + for (long i = 0; i < 2; ++i) { + vkGraphicsPipelineCreateInfo[i].sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO; + vkGraphicsPipelineCreateInfo[i].pNext = nullptr; + vkGraphicsPipelineCreateInfo[i].flags = {}; + vkGraphicsPipelineCreateInfo[i].stageCount = 2; + vkGraphicsPipelineCreateInfo[i].pStages = vkPipelineShaderStageCreateInfo; + vkGraphicsPipelineCreateInfo[i].pVertexInputState = &vkPipelineVertexInputStateCreateInfo; + vkGraphicsPipelineCreateInfo[i].pInputAssemblyState = &vkPipelineInputAssemblyStateCreateInfo; + vkGraphicsPipelineCreateInfo[i].pTessellationState = nullptr; + vkGraphicsPipelineCreateInfo[i].pViewportState = &vkPipelineViewportStateCreateInfo; + vkGraphicsPipelineCreateInfo[i].pMultisampleState = &vkPipelineMultisampleStateCreateInfo; + vkGraphicsPipelineCreateInfo[i].pDepthStencilState = &vkPipelineDepthStencilStateCreateInfo; + vkGraphicsPipelineCreateInfo[i].pColorBlendState = &vkPipelineColorBlendStateCreateInfo; + vkGraphicsPipelineCreateInfo[i].pDynamicState = &vkPipelineDynamicStateCreateInfo; + vkGraphicsPipelineCreateInfo[i].layout = vkPipelineLayout_Texture; + vkGraphicsPipelineCreateInfo[i].renderPass = vkRenderPass; + vkGraphicsPipelineCreateInfo[i].subpass = 0; + vkGraphicsPipelineCreateInfo[i].basePipelineHandle = VK_NULL_HANDLE; + vkGraphicsPipelineCreateInfo[i].basePipelineIndex = {}; + } + + vkGraphicsPipelineCreateInfo[0].pRasterizationState = &vkPipelineRasterizationStateCreateInfoFill; + vkGraphicsPipelineCreateInfo[1].pRasterizationState = &vkPipelineRasterizationStateCreateInfoLine; + + vkCreateGraphicsPipelines(vkDevice, VK_NULL_HANDLE, 2, vkGraphicsPipelineCreateInfo, vkAllocator, vkPipelines.pipelines); for (long i = 0; i < 2; ++i) { vkDestroyShaderModule(vkDevice, shaderModules[i], vkAllocator); @@ -886,6 +892,10 @@ void EntityType_Teardown() { } if (vkSampler_Texture != VK_NULL_HANDLE) vkDestroySampler(vkDevice, vkSampler_Texture, vkAllocator); + for (long i = 0; i < 2; ++i) { + if (vkPipelines.pipelines[i] != VK_NULL_HANDLE) + vkDestroyPipeline(vkDevice, vkPipelines.pipelines[i], vkAllocator); + } if (vkPipelineLayout_Texture != VK_NULL_HANDLE) vkDestroyPipelineLayout(vkDevice, vkPipelineLayout_Texture, vkAllocator); if (vkDescriptorSetLayout_Texture != VK_NULL_HANDLE) |
