2012-10-12 8 views
6

私は別の機能にいくつかのロジックをリファクタリングするまで素晴らしい仕事をしていたこのフラグメントシェイダーを持っています。お互いの上に異なるバージョンのエフェクトをレイヤーに重ね​​て複数回呼び出すことができるようにしたいと思います。 GLSL:私のカスタム関数が見つかりません

はしかし、すぐに私はこのカスタム関数を作成したとして、シェーダはエラーをスローを開始:それは機能として、それをコンパイルしているように見えるので、奇妙で、ある

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

答えて

16

あなたはどちらかのメインの前にグリッド機能を入れたり、前方にあなたがC言語で同じようにそれを宣言する必要があります。

ような:mainメソッド前

float grid(float size); 

+0

うわー。恥ずかしい私はそれを試みるとは思わなかった。ありがとう。 –

+0

ようこそ。 – rgngl

関連する問題