2012-10-12 115 views
6

Así que tengo este sombreador de fragmentos, que funcionaba de maravilla hasta que reformé parte de la lógica en una función separada. Quiero poder invocarlo varias veces para superponer diferentes versiones del efecto una encima de la otra.GLSL: Mi función personalizada no se encuentra

Sin embargo, tan pronto como se creé esta función personalizada, el shader comienza a lanzar el error:

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

Cuál es extraño, ya que parece ser la compilación como la función. Si quito el return de grid() consigo este error también:

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

Entonces, ¿qué me estoy perdiendo aquí acerca de declarar funciones?

shader completa aquí:

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

Respuesta

16

que o bien tienen que poner la función de red antes de la principal o hacia adelante declare como lo haría en c.

Tales como:

float grid(float size); 

antes de que el método principal.

+0

Wow. Avergonzado, no pensé en intentar eso. Gracias. –

+0

De nada. – rgngl

Cuestiones relacionadas