请教一个 GLSL 的问题

331 天前
 PTLin
#version 450
layout(location = 0) in vec2 v_Uv;

layout(location = 0) out vec4 o_Target;

layout(set = 1, binding = 0) uniform CustomMaterial {
    vec4 Color;
};

layout(set = 1, binding = 1) uniform texture2D CustomMaterial_texture;
layout(set = 1, binding = 2) uniform sampler CustomMaterial_sampler;


void main() {
    o_Target = Color * texture(sampler2D(CustomMaterial_texture,CustomMaterial_sampler), v_Uv);
}
#version 450

layout(location = 0) in vec3 Vertex_Position;
layout(location = 1) in vec3 Vertex_Normal;
layout(location = 2) in vec2 Vertex_Uv;

layout(location = 0) out vec2 v_Uv;

layout(set = 0, binding = 0) uniform CameraViewProj {
    mat4 ViewProj;
    mat4 View;
    mat4 InverseView;
    mat4 Projection;
    vec3 WorldPosition;
    float width;
    float height;
};

layout(set = 2, binding = 0) uniform Mesh {
    mat4 Model;
    mat4 InverseTransposeModel;
    uint flags;
};

void main() {
    v_Uv = Vertex_Uv;
    gl_Position = ViewProj * Model * vec4(Vertex_Position, 1.0);
}

我想问一下这两个着色器里面 uniform 的 layout 里的 set 修饰符是什么意思,我知道后面的 binding 是 uniform 缓冲对象的绑定点,那顶点和片段着色器 uniform 前面的 set 代表什么呢,我翻阅 khronos 的文档也没查到这个修饰符。

1275 次点击
所在节点    程序员
8 条回复
Anarchy
331 天前
不懂这个,不过直接 google 搜 layout(set = 0, binding = 0)是有结果的,好像都指向 vulkan 。
misdake
331 天前
这个是给 vulkan 用的 glsl 吧,set 是 descriptor set ,可以往这个方向搜
nightwitch
331 天前
Vulkan glsl 和 opengl glsl 的语法有些细微区别
PTLin
331 天前
@misdake 明白了,确实是 vulkan 的 DescriptorSet ,我看 wgsl 也有和这个类似的 group 属性我还以为这个是通用的什么语法。
besto
331 天前
PTLin
331 天前
@besto 我看的就是这个文档,只不过看的是 4.50 的。。。
PTLin
331 天前
@besto 因为文件上那句#version 450 我就直接找的 4.50 的文档看的 就是你这个链接把 4.60 换成 4.50 里的 59 页
PTLin
329 天前
终于破案了,这段 glsl 在代码里最后会被转换成 wgsl ,里面的 set 对应的是 wgsl 里的 group ,也就是 webgpu 里的 bind group 的概念。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/951312

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX