push_constant 无法在 Windows/NVIDIA 上与 Vulkan 正常工作?

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

我正在尝试渲染一个简单的网格,并按照此处提供的指南测试一些 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);
    }
}

我从未收到所需的输出。所以,我想知道我的数据是否已正确传输。 This就是我所看到的结果。当我移动光标时,一些蓝色会转换为红色,反之亦然。

手动输入一些值也不起作用。例如,我在顶点着色器中尝试过

f_Resolution = vec2(1600.0, 900.0);
,但结果没有改变。有人可以解释一下发生了什么事吗?如果需要,我可以提供额外的代码(C++)。

编辑:我可以正确看到我手动输入的颜色,例如输出颜色 = ...

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