diff --git a/samples/api/texture_loading/texture_loading.cpp b/samples/api/texture_loading/texture_loading.cpp index a982a8f..bc949e8 100644 --- a/samples/api/texture_loading/texture_loading.cpp +++ b/samples/api/texture_loading/texture_loading.cpp @@ -41,6 +41,7 @@ TextureLoading::~TextureLoading() vkDestroyPipelineLayout(get_device().get_handle(), pipeline_layout, nullptr); vkDestroyPipelineLayout(get_device().get_handle(), pipeline_layout_bg, nullptr); vkDestroyDescriptorSetLayout(get_device().get_handle(), descriptor_set_layout, nullptr); + vkDestroyDescriptorSetLayout(get_device().get_handle(), descriptor_set_layout_bg, nullptr); } destroy_texture(texture); @@ -483,6 +484,7 @@ void TextureLoading::build_command_buffers() VkRect2D scissor = vkb::initializers::rect2D(width, height, 0, 0); vkCmdSetScissor(draw_cmd_buffers[i], 0, 1, &scissor); + vkCmdBindDescriptorSets(draw_cmd_buffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline_layout_bg, 0, 1, &descriptor_set_bg, 0, NULL); vkCmdBindPipeline(draw_cmd_buffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipelines.background); vkCmdDraw(draw_cmd_buffers[i], 6, 1, 0, 0); @@ -557,7 +559,7 @@ void TextureLoading::setup_descriptor_pool() std::vector pool_sizes = { vkb::initializers::descriptor_pool_size(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1), - vkb::initializers::descriptor_pool_size(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1) }; + vkb::initializers::descriptor_pool_size(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 2) }; VkDescriptorPoolCreateInfo descriptor_pool_create_info = vkb::initializers::descriptor_pool_create_info( @@ -570,9 +572,27 @@ void TextureLoading::setup_descriptor_pool() void TextureLoading::setup_descriptor_set_layout_bg() { - VkPipelineLayoutCreateInfo layout_info{ - .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO }; - vkCreatePipelineLayout(get_device().get_handle(), &layout_info, nullptr, &pipeline_layout_bg); + std::vector set_layout_bindings = + { + // Binding 1 : Fragment shader image sampler + vkb::initializers::descriptor_set_layout_binding( + VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, + VK_SHADER_STAGE_FRAGMENT_BIT, + 0) }; + + VkDescriptorSetLayoutCreateInfo descriptor_layout = + vkb::initializers::descriptor_set_layout_create_info( + set_layout_bindings.data(), + static_cast(set_layout_bindings.size())); + + VK_CHECK(vkCreateDescriptorSetLayout(get_device().get_handle(), &descriptor_layout, nullptr, &descriptor_set_layout_bg)); + + VkPipelineLayoutCreateInfo pipeline_layout_create_info = + vkb::initializers::pipeline_layout_create_info( + &descriptor_set_layout_bg, + 1); + + VK_CHECK(vkCreatePipelineLayout(get_device().get_handle(), &pipeline_layout_create_info, nullptr, &pipeline_layout_bg)); } void TextureLoading::setup_descriptor_set_layout() @@ -643,6 +663,35 @@ void TextureLoading::setup_descriptor_set() vkUpdateDescriptorSets(get_device().get_handle(), static_cast(write_descriptor_sets.size()), write_descriptor_sets.data(), 0, NULL); } +void TextureLoading::setup_descriptor_set_bg() +{ + VkDescriptorSetAllocateInfo alloc_info = + vkb::initializers::descriptor_set_allocate_info( + descriptor_pool, + &descriptor_set_layout_bg, + 1); + + VK_CHECK(vkAllocateDescriptorSets(get_device().get_handle(), &alloc_info, &descriptor_set_bg)); + + + + VkDescriptorImageInfo image_descriptor; + image_descriptor.imageView = cam_text.view; + image_descriptor.sampler = cam_text.sampler; + image_descriptor.imageLayout = cam_text.image_layout; + + std::vector write_descriptor_sets = + { + vkb::initializers::write_descriptor_set( + descriptor_set_bg, + VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, + 0, + &image_descriptor) + }; + + vkUpdateDescriptorSets(get_device().get_handle(), static_cast(write_descriptor_sets.size()), write_descriptor_sets.data(), 0, NULL); +} + void TextureLoading::prepare_pipeline_bg() { VkPipelineInputAssemblyStateCreateInfo input_assembly_state = @@ -864,6 +913,7 @@ bool TextureLoading::prepare(const vkb::ApplicationOptions& options) prepare_pipeline_bg(); setup_descriptor_pool(); setup_descriptor_set(); + setup_descriptor_set_bg(); build_command_buffers(); prepared = true; return true; diff --git a/samples/api/texture_loading/texture_loading.h b/samples/api/texture_loading/texture_loading.h index f97e403..1a0c5c5 100644 --- a/samples/api/texture_loading/texture_loading.h +++ b/samples/api/texture_loading/texture_loading.h @@ -75,7 +75,10 @@ public: VkPipelineLayout pipeline_layout; VkPipelineLayout pipeline_layout_bg; VkDescriptorSet descriptor_set; + VkDescriptorSet descriptor_set_bg; + VkDescriptorSetLayout descriptor_set_layout; + VkDescriptorSetLayout descriptor_set_layout_bg; TextureLoading(); ~TextureLoading(); @@ -89,6 +92,7 @@ public: void setup_descriptor_set_layout(); void setup_descriptor_set_layout_bg(); void setup_descriptor_set(); + void setup_descriptor_set_bg(); void prepare_pipelines(); void prepare_uniform_buffers(); void update_uniform_buffers();