2012-10-12 13 views
6

Vì vậy, tôi có trình đổ bóng phân đoạn này, nó hoạt động tốt cho đến khi tôi tái cấu trúc một số logic thành một hàm riêng biệt. Tôi muốn có thể gọi nó nhiều lần để xếp các phiên bản khác nhau của hiệu ứng lên trên nhau.GLSL: Hàm tùy chỉnh của tôi không được tìm thấy

Tuy nhiên, ngay sau khi tôi tạo ra chức năng tùy chỉnh này, đổ bóng bắt đầu ném các lỗi:

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

Đó là lạ, bởi vì nó dường như được biên dịch nó như chức năng. Nếu tôi loại bỏ các return từ grid() tôi nhận được lỗi này quá:

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

Vì vậy, những gì tôi thiếu ở đây về tuyên bố chức năng?

Full shader ở đây:

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

Trả lời

16

Bạn có thể phải đặt chức năng lưới trước khi chính hoặc phía trước khai báo nó như bạn làm trong c.

Chẳng hạn như:

float grid(float size); 

trước khi phương pháp chính.

+0

Wow. Xấu hổ tôi không nghĩ đến việc thử điều đó. Cảm ơn. –

+0

Bạn được chào đón. – rgngl