我正在尝试渲染一个简单的网格,并按照此处提供的指南测试一些 GLSL 生成的噪声。我正在使用 Vulkan 的 Push_constant 功能将所需的矩阵、分辨率和时间数据传输到着色器。
顶点着色器:
#version 460
//Inputs
layout(location = 0) in vec3 i_Position;
layout(location = 1) in vec2 i_TextureCoordinates;
//Outputs
layout(location = 0) out vec2 f_TextureCoordinates;
layout(location = 1) out vec2 f_Resolution;
layout(location = 2) out float f_Time;
//Constants
layout(push_constant) uniform constants {
mat4 M;
mat4 V;
mat4 P;
vec2 Resolution;
float Time;
} Constant;
void main() {
//Outputs
f_TextureCoordinates = i_TextureCoordinates;
//f_Resolution = Constant.Resolution;
f_Resolution = vec2(1600.0, 900.0);
f_Time = Constant.Time;
gl_Position = Constant.P * Constant.V * Constant.M * vec4(i_Position, 1.0);
}
片段着色器:
#version 460
//Inputs
layout(location = 0) in vec2 f_TextureCoordinates;
layout(location = 1) in vec2 f_Resolution;
layout(location = 2) in float f_Time;
//Outputs
layout(location = 0) out vec4 outColor;
void main() {
if(0.0 == f_Resolution.x || 0.0 == f_Resolution.y) {
outColor = vec4(0.0, 1.0, 0.0, 1.0);
}else if(1600.0 != f_Resolution.x || 900.0 != f_Resolution.y) {
outColor = vec4(1.0, 0.0, 0.0, 1.0);
}else {
outColor = vec4(0.0, 0.0, 1.0, 1.0);
}
}
我从未收到所需的输出。所以,我想知道我的数据是否已正确传输。 就是我所看到的结果。当我移动光标时,一些蓝色会转换为红色,反之亦然。
手动输入一些值也不起作用。例如,我在顶点着色器中尝试过
f_Resolution = vec2(1600.0, 900.0);
,但结果没有改变。有人可以解释一下发生了什么事吗?如果需要,我可以提供额外的代码(C++)。
编辑:我可以正确看到我手动输入的颜色,例如输出颜色 = ...