summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--assets/shaders/texture.frag2
-rw-r--r--src/entities.cpp80
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)