代码之家  ›  专栏  ›  技术社区  ›  ModernEraCaveman

如何使用GLSL在Vulkan中使用分离采样图像和采样器?

  •  0
  • ModernEraCaveman  · 技术社区  · 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
    

    采样器和图像是否按照创建描述符集时的指定存储在不同的集/绑定中?

    如果 样品2D 用于描述符类型的组合图像采样器 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 价值

    1 回复  |  直到 1 年前
        1
  •  1
  •   Nicol Bolas    1 年前

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

    GL_KHR_vulkan_glsl extension ,GLSL类型 sampler (没有 * )表示窗体的描述符 VK_DESCRIPTOR_TYPE_SAMPLER .对于表单的描述符 VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE ,适当的GLSL类型为 texture* (其中 * 再次是纹理的类型)。

    要将采样图像与采样器组合,请创建 取样器* 对象使用构造函数语法: texture(sampler2D(t, s), ...);