Vulkan 中如何通过 GLSL 分离采样图像和采样器?

问题描述 投票:0回答:1

我刚刚写完纹理和采样器对象的代码,但现在我对如何在 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
值?

glsl vulkan
1个回答
0
投票

GLSL 类型

sampler*
(其中
*
是纹理类型,例如
1D
Cube
等)表示
VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
形式的描述符。

GL_KHR_vulkan_glsl 扩展中所指定,GLSL 类型

sampler
(无
*
)表示
VK_DESCRIPTOR_TYPE_SAMPLER
形式的描述符。对于
VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE
形式的描述符,适当的 GLSL 类型是
texture*
(其中
*
又是纹理的类型)。

要将采样图像与采样器结合起来,您可以使用构造函数语法从两者创建一个

sampler*
对象:
texture(sampler2D(t, s), ...);

© www.soinside.com 2019 - 2024. All rights reserved.