10

このフラグメント シェーダーは、一部のロジックを別の関数にリファクタリングするまでうまく機能していました。複数回呼び出して、さまざまなバージョンのエフェクトを重ね合わせられるようにしたいと考えています。

ただし、このカスタム関数を作成するとすぐに、シェーダーはエラーをスローし始めます。

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);
}
4

1 に答える 1

20

メインの前にグリッド関数を配置するか、c の場合と同様に前方宣言する必要があります。

そのような:

float grid(float size);

メインメソッドの前。

于 2012-10-12T17:29:51.743 に答える