小编klj*_*klj的帖子

是否有办法将 VkDescriptorImageInfo 设置为 null 或者有某种方式跳过使用 VkWriteDescriptorSet 而不会出现 vulkan 抱怨

我将使用的一些网格并不总是具有 DiffuseMap 或 SpecularMap。当我尝试加载没有漫反射和镜面反射贴图的内容时,程序崩溃,因为 DiffuseMap.ImageView/SpecularMap.ImageView 中没有任何内容,因为它没有指向任何内容。如果我尝试将 imageview/sample 设置为 VK_NULL_HANDLE,程序会给出此信息并在 vkUpdateDescriptorSets 处崩溃:

Validation Layer: Invalid VkImageView Object 0x0. The Vulkan spec states: If descriptorType is VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, the imageView and imageLayout members of each element of pImageInfo must be a valid VkImageView and VkImageLayout, respectively (https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VUID-VkWriteDescriptorSet-descriptorType-00326)
Run Code Online (Sandbox Code Playgroud)

然后,如果我尝试将绑定设置为 null,我会得到以下结果:

Validation Layer: vkUpdateDescriptorSets: required parameter pDescriptorWrites[2].dstSet specified as VK_NULL_HANDLE
Run Code Online (Sandbox Code Playgroud)

验证层:无法对尚未分配的 VkDescriptorSet 0x0[] 调用 vkUpdateDescriptorSets()。

这就是基本代码现在的样子。这是定义描述符集的区域,以便更容易地查看正在发生的情况:

void Mesh::CreateDescriptorSets(VulkanRenderer& Renderer)
{
    BaseMesh::CreateDescriptorSets(Renderer, *GetDescriptorSetLayout(Renderer));

VkDescriptorImageInfo DiffuseMap = {};
DiffuseMap.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
DiffuseMap.imageView = …
Run Code Online (Sandbox Code Playgroud)

c++ game-engine vulkan

6
推荐指数
1
解决办法
2527
查看次数

标签 统计

c++ ×1

game-engine ×1

vulkan ×1