From 3d6ca447a7104c499e92fc954affdaf4bf011388 Mon Sep 17 00:00:00 2001 From: Frederico Linhares Date: Fri, 16 Sep 2022 12:03:04 -0300 Subject: feat Create View --- src/vk/graphics_pipeline_3d_layout.cpp | 69 ++++++++++++++++++++++++++-------- 1 file changed, 53 insertions(+), 16 deletions(-) (limited to 'src/vk/graphics_pipeline_3d_layout.cpp') diff --git a/src/vk/graphics_pipeline_3d_layout.cpp b/src/vk/graphics_pipeline_3d_layout.cpp index 62c894c..4374ab9 100644 --- a/src/vk/graphics_pipeline_3d_layout.cpp +++ b/src/vk/graphics_pipeline_3d_layout.cpp @@ -22,8 +22,9 @@ namespace { + void -load_descriptor_set_layout_world_view(void *obj) +load_descriptor_set_world(void *obj) { auto self = static_cast(obj); @@ -49,23 +50,59 @@ load_descriptor_set_layout_world_view(void *obj) if(vkCreateDescriptorSetLayout( cg_core.vk_device_with_swapchain->device, &layout_info, nullptr, - &self->descriptor_set_world_view) != VK_SUCCESS) + &self->descriptor_set_world) != VK_SUCCESS) throw CommandError{ "Failed to create Vulkan descriptor set layout for world view."}; } void -unload_descriptor_set_layout_world_view(void *obj) +unload_descriptor_set_world(void *obj) { auto self = static_cast(obj); vkDestroyDescriptorSetLayout( - cg_core.vk_device_with_swapchain->device, - self->descriptor_set_world_view, nullptr); + cg_core.vk_device_with_swapchain->device, self->descriptor_set_world, + nullptr); +} + +void +load_descriptor_set_view(void *obj) +{ + auto self = static_cast(obj); + + std::array set_layouts{}; + set_layouts[0].binding = 0; + set_layouts[0].descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; + set_layouts[0].descriptorCount = 1; + set_layouts[0].stageFlags = VK_SHADER_STAGE_VERTEX_BIT; + set_layouts[0].pImmutableSamplers = nullptr; + + VkDescriptorSetLayoutCreateInfo layout_info{}; + layout_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO; + layout_info.pNext = nullptr; + layout_info.flags = 0; + layout_info.bindingCount = set_layouts.size(); + layout_info.pBindings = set_layouts.data(); + + if(vkCreateDescriptorSetLayout( + cg_core.vk_device_with_swapchain->device, &layout_info, nullptr, + &self->descriptor_set_view) != VK_SUCCESS) + throw CommandError{ + "Failed to create Vulkan descriptor set layout for world view."}; +} + +void +unload_descriptor_set_view(void *obj) +{ + auto self = static_cast(obj); + + vkDestroyDescriptorSetLayout( + cg_core.vk_device_with_swapchain->device, self->descriptor_set_view, + nullptr); } void -load_descriptor_set_layout_model_instance(void *obj) +load_descriptor_set_model_instance(void *obj) { auto self = static_cast(obj); @@ -99,7 +136,7 @@ load_descriptor_set_layout_model_instance(void *obj) } void -unload_descriptor_set_layout_model_instance(void *obj) +unload_descriptor_set_model_instance(void *obj) { auto self = static_cast(obj); @@ -109,12 +146,13 @@ unload_descriptor_set_layout_model_instance(void *obj) } void -load_pipeline_layout(void *obj) +load_pipeline(void *obj) { auto self = static_cast(obj); - std::array set_layouts{ - self->descriptor_set_world_view, + std::array set_layouts{ + self->descriptor_set_world, + self->descriptor_set_view, self->descriptor_set_model_instance}; VkPipelineLayoutCreateInfo pipeline_layout_info{}; @@ -131,7 +169,7 @@ load_pipeline_layout(void *obj) } void -unload_pipeline_layout(void *obj) +unload_pipeline(void *obj) { auto self = static_cast(obj); @@ -226,11 +264,10 @@ unload_render_pass(void *obj) } const CommandChain loader{ - {&load_descriptor_set_layout_world_view, - &unload_descriptor_set_layout_world_view}, - {&load_descriptor_set_layout_model_instance, - &unload_descriptor_set_layout_model_instance}, - {&load_pipeline_layout, &unload_pipeline_layout}, + {&load_descriptor_set_world, &unload_descriptor_set_world}, + {&load_descriptor_set_view, &unload_descriptor_set_view}, + {&load_descriptor_set_model_instance, &unload_descriptor_set_model_instance}, + {&load_pipeline, &unload_pipeline}, {&load_render_pass, &unload_render_pass} }; -- cgit v1.2.3