2012-10-12 8 views
6

Also ich habe diese Fragment-Shader, die gut funktionierte, bis ich einige Logik Out in eine separate Funktion. Ich möchte es mehrmals aufrufen können, um verschiedene Versionen des Effekts übereinander zu legen.GLSL: Meine benutzerdefinierte Funktion wurde nicht gefunden

aber sobald ich diese benutzerdefinierte Funktion erstellt, beginnt der Shader, um die Fehler zu werfen:

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

Welche wierd, weil es scheint es, als Funktion kompiliert werden. Wenn ich die return von grid() entfernen bekomme ich diesen Fehler zu:

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

Was fehle ich hier über Funktionen zu erklären?

Shader hier:

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

Antwort

16

entweder Sie haben die Gitterfunktion vor dem Haupt setzen oder nach vorne erklären Sie es wie in c.

wie:

float grid(float size); 

vor dem Hauptverfahren.

+0

Wow. Beschämt dachte ich nicht daran, das zu versuchen. Vielen Dank. –

+0

Gern geschehen. – rgngl

Verwandte Themen