在着色器中声明某些变量会导致其停止工作?(GLSL)
我正在使用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
"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字符串将有一个语法错误消息。