2012-10-12 4 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에서와 같이 선언해야합니다.

등 : 메인있어서 전에

float grid(float size); 

.

+0

와우. 당황한 나는 그것을 시도하는 것을 생각하지 않았다. 감사. –

+0

반갑습니다. – rgngl

관련 문제