【发布时间】:2011-06-01 22:46:30
【问题描述】:
我正在使用 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 中的变量声明有什么我不明白的地方吗?
谢谢
【问题讨论】:
-
在编译和链接着色器后检查错误日志(调用 glGetShaderInfoLog)——它们可能会告诉你一些有用的信息
-
@Chris Dodd 该字符串返回一个空字符串。
-
取消标记语言,因为这与 C 或 C++ 无关。
-
@Christian Rau Nope, NVidia 9400m
-
如果描述的解决方案是正确的,那么信息日志字符串中就会有语法错误消息。
标签: glsl