2012-10-12 16 views
6

Więc mam ten shader fragmentu, który działał świetnie, dopóki nie odesłałem logiki do osobnej funkcji. Chcę móc wywoływać je wiele razy, aby nadawać różne wersje efektu jeden na drugim.GLSL: Moja niestandardowa funkcja nie została znaleziona

Jednak jak tylko stworzył tę funkcję niestandardową, shader zaczyna rzucać się błąd:

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

Co jest dziwne, bo wydaje się być kompilowania go jako funkcji. Jeśli usunąć return z grid() otrzymuję ten błąd też:

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

Więc co mi brakuje tu o deklarowania funkcji?

pełną obsługą Shader tutaj:

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

Odpowiedz

16

Albo umieścić funkcję siatki przed głównym lub do przodu zadeklarować go tak samo, jak w c.

Przykładowo:

float grid(float size); 

przed głównym sposobem.

+0

Wow. Zawstydzony, nie myślałem o próbowaniu tego. Dzięki. –

+0

Nie ma za co. – rgngl

Powiązane problemy