GLSL:我的自定义函数找不到

10

我的片段着色器一直很好用,但我把一些逻辑重构到一个单独的函数中后出现了问题。我希望能够多次调用该函数,在彼此之上叠加不同版本的效果。

然而,一旦我创建了这个自定义函数,着色器就开始抛出错误:

ERROR: 0:33: 'grid' : no matching overloaded function found 

这很奇怪,因为看起来它将其编译为函数。如果我从grid()中删除return,我也会遇到这个错误:

ERROR: 0:36: '' : function does not return a value: grid

那么我在声明函数方面漏掉了什么?

完整的着色器代码如下:

uniform float brightness;
uniform float shiftX;
uniform float shiftY;

uniform vec4 color;
varying vec3 vPos;

void main() {
  gl_FragColor = vec4( grid(200.0), 0.0, 0.0, 1.0 );
}

float grid(float size) {
  float x = pow(abs(0.5 - mod(vPos.x + shiftX, 200.0) / 200.0), 4.0);
  float y = pow(abs(0.5 - mod(vPos.y + shiftY, 200.0) / 200.0), 4.0);
  return (x+y) * 5.0 * pow(brightness, 2.0);
}
1个回答

20
你必须要把 grid 函数放在 main 函数之前,或者像在 C 语言中那样进行前向声明。
如下所示:
float grid(float size);

在主方法之前。


哇,我真的没想到要尝试那个。谢谢。 - Alex Wayne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接