在着色器中声明某些变量会导致其停止工作?(GLSL)

在着色器中声明某些变量会导致其停止工作?(GLSL),glsl,Glsl,我正在使用GLSL 我这里有一个简单的片段着色器: "uniform sampler2D backBuffer;", "uniform float r;", "uniform float g;", "uniform float b;", "uniform float ratio;", "void main() {", " vec4 color;", " float avg, dr, dg, db, multiplier;", " color = texture2D(bac

我正在使用GLSL

我这里有一个简单的片段着色器:

 "uniform sampler2D backBuffer;",
 "uniform float r;",
 "uniform float g;",
 "uniform float b;",
 "uniform float ratio;",
 "void main() {",
 "  vec4 color;",
 "  float avg, dr, dg, db, multiplier;",
 "  color = texture2D(backBuffer, vec2(gl_TexCoord[0].x * 1,gl_TexCoord[0].y * 1));",
 "  avg = (color.r + color.g + color.b) / 3.0;",
 "  dr = avg * r;",
 "  dg = avg * g;",
 "  db = avg * b;",
 "  color.r =  color.r * (gl_TexCoord[0].x * gl_TexCoord[0].y);",
"   color.g =  color.g * (gl_TexCoord[0].x * gl_TexCoord[0].y);",
"   color.b =  color.b * (gl_TexCoord[0].x * gl_TexCoord[0].y);",
 "  gl_FragColor = color;",
 "}"
现在它工作得很好

但是,出于一些非常奇怪的原因,添加更多变量(如vec2或float)会使其对我的场景没有影响:

 "uniform sampler2D backBuffer;",
 "uniform float r;",
 "uniform float g;",
 "uniform float b;",
 "uniform float ratio;",
 "void main() {",
 "  vec4 color;",
 "  float avg, dr, dg, db, multiplier;",
 "  vec2 divisors;",
 "  color = texture2D(backBuffer, vec2(gl_TexCoord[0].x * 1,gl_TexCoord[0].y * 1));",
 "  avg = (color.r + color.g + color.b) / 3.0;",
 "  dr = avg * r;",
 "  dg = avg * g;",
 "  db = avg * b;",
 "  color.r =  color.r * (gl_TexCoord[0].x * gl_TexCoord[0].y);",
"   color.g =  color.g * (gl_TexCoord[0].x * gl_TexCoord[0].y);",
"   color.b =  color.b * (gl_TexCoord[0].x * gl_TexCoord[0].y);",
 "  gl_FragColor = color;",
 "}"
在这个例子中,我添加了一个称为除数的vec2,这就是我所做的,着色器不再对像素做任何事情

为什么会这样?关于GLSL中的变量声明,有什么我不了解的吗


谢谢

我注意到每一行都是用逗号分隔的带引号的字符串。在C/C++中,在创建单个大字符串时,通常只将带引号的字符串并置,因此我想知道您是否在做一些奇怪的事情,比如初始化字符串数组,而不考虑在添加新行后其大小已更改?

检查错误日志(调用glGetShaderInfoLog)在编译和链接着色器之后--它们可能会告诉您一些事情useful@Chris多德字符串返回空字符串。未标注语言,因为这与C或C++无关。@ Christian Rau Nope,NVIDIA 9400 MIF如果所描述的解决方案是正确的,那么InFooCtring字符串将有一个语法错误消息。