为什么GLSL警告告诉我变化是不写的,当它显然是?

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

我从来没有遇到任何问题从顶点着色器传递变量到片段着色器。但今天,我在vs中添加了一个新的“out”变量,并在fs中添加了一个相应的“in”变量。 GLSL说如下:

着色器程序:片段着色器使用不同的tbn,但之前的着色器不会写入它。

只是为了确认,这是VS的相关部分:

#version 330 core

layout(location = 0) in vec4 position;
layout(location = 1) in vec2 uv;

// plus other layout & uniform inputs here

out DATA
{
    vec2 uv;
    vec3 tangentViewDir;
    mat3 tbn;
} vs_out;

void main()
{
    vs_out.uv       = uv;
    vs_out.tangentViewDir = vec3(1.0);
    vs_out.tbn = mat3(1.0);

    gl_Position     = sys_ProjectionViewMatrix * sys_ModelMatrix * position;
}

在FS中,它被声明为:

in DATA
{
    vec2 uv;
    vec3 tangentViewDir;
    mat3 tbn;
} fs_in;

有趣的是,所有其他变化,如“紫外线”和所有变化,都有效。他们以同样的方式宣布。

同样有趣的是:尽管GLSL说变量没有被写入 - 但是当我写入变量时它仍然会识别出变化,并显示这些变化。

那只是一个虚假的警告或错误吗?即使它告诉我,否则值似乎正确传递。为什么我会收到此警告?

glsl shader varying
1个回答
0
投票

HolvBlackCat指出了我正确的方向 - 它确实是一个着色器不匹配!

我有两个着色器程序,两者都是相同的FS,但VS不同,我忘了更新第二个VS的输出以匹配第一个的输出布局,这样它们都可以使用相同的FS!

哎呀,我想现在我已经遇到了这个错误,经验教训。

谢谢你HolvBlackCat!

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