2012-10-12 12 views
6

Quindi ho questo framment shader, che funzionava benissimo finché non ho rifatto la logica di una funzione separata. Voglio essere in grado di chiamarlo più volte per sovrapporre diverse versioni dell'effetto l'uno sopra l'altro.GLSL: La mia funzione personalizzata non è stata trovata

Tuttavia, non appena ho creato questa funzione personalizzata, lo shader inizia gettando l'errore:

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

Che è strano, perché sembra essere compilarlo come la funzione. Se rimuovo il return da grid() ottengo questo errore troppo:

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

Allora, cosa mi manca qui sulle funzioni dichiarando?

completa dello shader qui:

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

risposta

16

Si sia bisogno di mettere la funzione di griglia prima che il principale o in avanti dichiareremo come si farebbe in c.

Come:

float grid(float size); 

prima del metodo principale.

+0

Wow. Imbarazzato non ho pensato di provarlo. Grazie. –

+0

Prego. – rgngl

Problemi correlati