0
我正在使用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(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;",
"}"
现在它工作得很好。
然而,对于一些很奇怪的原因,添加更多的变量,如VEC 2或浮动使之对我的场景没有影响:
"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;",
"}"
在这其中我添加了一个VEC 2称为除数,这是我所做的一切,着色器不再对像素做任何事情。
这是为什么?有什么我不了解GLSL中的变量声明?
谢谢
编译后和链接着色器后检查错误日志(调用glGetShaderInfoLog) - 它们可能会告诉你一些有用的信息 – 2011-05-29 20:19:35
@Chris Dodd该字符串返回一个空字符串。 – jmasterx 2011-05-29 20:28:36
未标记语言,因为这与C或C++无关。 – Puppy 2011-05-29 20:33:14