GLSL:找不到我的自定义功能

时间:2012-10-12 17:26:07

标签: glsl webgl three.js

所以我有这个片段着色器,它工作得很好,直到我将一些逻辑重构成一个单独的函数。我希望能够多次调用它来将不同版本的效果叠加在一起。

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

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

哪个很奇怪,因为它似乎正在将其编译为函数。如果我从return删除grid(),我也会收到此错误:

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 个答案:

答案 0 :(得分:18)

您必须在主要或前向声明之前将网格函数放在c。

如:

float grid(float size);
主要方法之前