我刚刚完成了纹理和采样器对象的代码编写,但现在我对如何在 GLSL 中实现分离的描述符感到困惑。
访问描述符集 0 中的组合图像采样器,绑定 0 将使用以下命令完成:
layout(set = 0, binding = 0) uniform sampler2D texSampler;
sampler2D
然后,片段着色器将使用以下函数对图像进行采样texture
:
layout(location = 0) in vec2 fragTexCoord;
layout(location = 0) out vec4 outColor;
void main() {
outColor = texture(texSampler, fragTexCoord);
}
据我了解,一个描述符集(或绑定)是为采样器创建的VK_DESCRIPTOR_TYPE_SAMPLER
,另一个是为类型为 的采样图像创建的VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE
。但是,我不知道将使用什么语法来访问单独的描述符。
layout(set = 0, binding = 0) uniform /* idk what type it is */ sampler
layout(set = 0, binding = 1) uniform /* idk */ sampledImage
// alternatively...
layout(set = 0, binding = 0) uniform /* idk */ sampler
layout(set = 1, binding = 0) uniform /* idk */ sampledImage
采样器和图像是否按照创建描述符集时指定的方式存储在不同的集/绑定中?
如果sampler2D
用于具有描述符类型的组合图像采样器VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
,那么每个分离类型使用的语法是什么?
VK_DESCRIPTOR_TYPE_SAMPLER
、、、、、和?VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE
_ VK_DESCRIPTOR_TYPE_STORAGE_IMAGE
_VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER
如何调用这些分离的对象main
来设置outColor
值?