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

Posted

技术标签:

【中文标题】GLSL:找不到我的自定义函数【英文标题】:GLSL: My custom function isn't found 【发布时间】:2012-10-03 13:44:03 【问题描述】:

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

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

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】:

您要么必须将网格函数放在 main 之前,要么像在 c 中那样前向声明它。

如:

float grid(float size);

在 main 方法之前。

【讨论】:

哇。尴尬的是我没想过那样做。谢谢。

以上是关于GLSL:找不到我的自定义函数的主要内容,如果未能解决你的问题,请参考以下文章

我的自定义编辑器找不到我要查找的字段

为啥通过 PhpUnit 运行测试时找不到我的自定义 TestCase 类?

Django 找不到我的自定义模板过滤器

调用 $scope 函数的自定义指令导致 $rootScope:infdig

Wordpress 导航栏中的自定义简码

Detox 找不到已指定 testId 的自定义组件