glsl - 为什么 GLSL 警告告诉我没有写入变化,而它显然是?
问题描述
将变量从顶点着色器传递到片段着色器时,我从来没有遇到过任何问题。但是今天,我在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;
有趣的是,所有其他变体,如“uv”和所有,都有效。它们的声明方式相同。
也很有趣:即使 GLSL 说变量没有被写入——当我写入它时它仍然会识别出这些变化,并显示这些变化。
那么这只是一个错误的警告或错误吗?即使它告诉我不是这样,该值似乎也被正确传递了。为什么我会收到此警告?
解决方案
HolvBlackCat 为我指明了正确的方向——这确实是着色器不匹配!
我有 2 个着色器程序,两者中的 FS 相同,但 VS 不同,我忘记更新第二个 VS 的输出以匹配第一个 VS 的输出布局,以便它们都使用相同的 FS!
哎呀,我想现在我遇到了这个错误,吸取了教训。
谢谢你HolvBlackCat!
推荐阅读
- c++ - 模板专业化、专业化类问题
- laravel - Laravel 漂亮地编写模型信息
- r - R 无法识别软件包已安装
- maven - Micronaut exec-maven-plugin 无法将值存储到数组中:ArrayStoreException
- r - 如何连接具有不同列名的多个数据框?
- macos - -bash 导出:不是有效的标识符
- sql - SQL Server 中的查询表达式中的语法错误(缺少运算符)
- android - FAILURE: Build failed with an exception 仅在我的颤振应用程序中添加 admob_flutter
- powerbi - 从报告组中为特定报告生成嵌入令牌
- r - R中的正则表达式来检测三个单词的组合和这些单词的变体