【问题标题】:Declaring certain variables in shader causes it to stop working? (GLSL)在着色器中声明某些变量会导致它停止工作? (GLSL)
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    • 2016-05-08
    • 2022-09-05
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    相关资源
    最近更新 更多