#include #include #include #include #include VK_NAMESPACE_BEGIN void DescriptorSets::Clear() { write_desc_sets.ClearData(); desc_image_info.ClearData(); } bool DescriptorSets::BindUBO(const uint32_t binding,const Buffer *buf) { VkWriteDescriptorSet writeDescriptorSet; writeDescriptorSet.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; writeDescriptorSet.pNext = nullptr; writeDescriptorSet.dstSet = desc_set; writeDescriptorSet.dstBinding = binding; writeDescriptorSet.dstArrayElement = 0; writeDescriptorSet.descriptorCount = 1; writeDescriptorSet.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; writeDescriptorSet.pImageInfo = nullptr; writeDescriptorSet.pBufferInfo = buf->GetBufferInfo(); writeDescriptorSet.pTexelBufferView = nullptr; write_desc_sets.Add(writeDescriptorSet); return(true); } bool DescriptorSets::BindUBODynamic(const uint32_t binding,const Buffer *buf) { VkWriteDescriptorSet writeDescriptorSet; writeDescriptorSet.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; writeDescriptorSet.pNext = nullptr; writeDescriptorSet.dstSet = desc_set; writeDescriptorSet.dstBinding = binding; writeDescriptorSet.dstArrayElement = 0; writeDescriptorSet.descriptorCount = 1; writeDescriptorSet.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC; writeDescriptorSet.pImageInfo = nullptr; writeDescriptorSet.pBufferInfo = buf->GetBufferInfo();; writeDescriptorSet.pTexelBufferView = nullptr; write_desc_sets.Add(writeDescriptorSet); return(true); } bool DescriptorSets::BindSampler(const uint32_t binding,Texture *tex,Sampler *sampler) { if(!tex||!sampler) return(false); VkDescriptorImageInfo *image_info=new VkDescriptorImageInfo; image_info->imageView =tex->GetVulkanImageView(); image_info->imageLayout =tex->GetImageLayout(); image_info->sampler =*sampler; desc_image_info.Add(image_info); VkWriteDescriptorSet writeDescriptorSet; writeDescriptorSet.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; writeDescriptorSet.pNext = nullptr; writeDescriptorSet.dstSet = desc_set; writeDescriptorSet.dstBinding = binding; writeDescriptorSet.dstArrayElement = 0; writeDescriptorSet.descriptorCount = 1; writeDescriptorSet.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; writeDescriptorSet.pImageInfo = image_info; writeDescriptorSet.pBufferInfo = nullptr; writeDescriptorSet.pTexelBufferView = nullptr; write_desc_sets.Add(writeDescriptorSet); return(true); } void DescriptorSets::Update() { vkUpdateDescriptorSets(*device,write_desc_sets.GetCount(),write_desc_sets.GetData(),0,nullptr); } VK_NAMESPACE_END