2011-05-29 32 views
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中的变量声明?

谢谢

+3

编译后和链接着色器后检查错误日志(调用glGetShaderInfoLog) - 它们可能会告诉你一些有用的信息 – 2011-05-29 20:19:35

+0

@Chris Dodd该字符串返回一个空字符串。 – jmasterx 2011-05-29 20:28:36

+0

未标记语言,因为这与C或C++无关。 – Puppy 2011-05-29 20:33:14

回答

2

我注意到每行都是用逗号分隔的带引号的字符串。在C/C++中,当创建一个单一的大字符串时,您通常只会并列引用的字符串,所以我想知道您是否正在做一些奇怪的事情,比如初始化一个字符串数组,并且没有考虑到在添加新行后它的大小发生了变化?

相关问题