我的着色器索引到采样器和图像,但当我从图像采样(我只得到错误,如果我在着色器采样)我得到一个错误:
绑定#0索引0中的描述符需要FLOAT组件类型,但是绑定描述符格式为VK_FORMAT_R8G8B8A8_UINT。Vulkan规格states:每个绑定描述符集中的描述符,通过vkCmdBindDescriptorSets,如果它们被静态地使用,则必须有效VkPipeline绑定到该命令使用的管道绑定点
这是真的,我有罪绑定R8G8B8A8_UINT图像索引[0],我试着采样它,但为什么它坚持它应该是FLOAT组件类型?
我在我的着色器中像这样采样图像:
layout(set = 0, binding = 0) uniform texture2D textures[20];
layout(set = 0, binding = 1) uniform sampler samplers[4];
texture(sampler2D(textures[0], samplers[0]), vec2(inPosAndCoords.zw) );
错误触发。为什么它坚持图像的组件是FLOAT?
为什么它坚持为图像的组件是FLOAT?
因为这是你的着色器要求的。图像格式的基本类型被嵌入到图像的GLSL类型中。
texture2D
是一个具有浮点格式的2D纹理。utexture2D
是一个无符号整数格式的2D纹理。