2012-03-22 4 views
5

Tôi có một Shader đoạn với các thuộc tính sau:glGetUniformLocation trở -1 OpenGL ES (iPhone)

varying highp vec2 coordinate; 
precision mediump float; 

uniform sampler2D videoframe; 
uniform sampler2D videosprite; 
uniform vec4 mask; 
uniform float threshold; 

Tôi nhận được vị trí của họ và sau đó cài đặt chúng:

_frame = glGetUniformLocation(_program, "videoframe"); 
_sprite = glGetUniformLocation(_program, "videosprite"); 
_mask = glGetUniformLocation(_program, "mask"); 
_threshold = glGetUniformLocation(_program, "threshold"); 

NSLog(@"%i %i %i %i", _frame, _sprite, _mask, _threshold); 

Tuy nhiên, nhật ký tiết lộ: 0 2 1 -1

Từ tài liệu, tôi thấy rằng -1 (đồng phục ngưỡng) có nghĩa là không thành công. Tại sao nó lại thất bại? Cảm ơn

Trả lời

10

Trình biên dịch GLSL có thể (và thường sẽ) tối ưu hóa mọi bộ đồng phục và thuộc tính không được sử dụng trong trình đổ bóng. Bạn chỉ có thể truy vấn vị trí của đồng phục hoạt động, là những cái được sử dụng trong ít nhất một nhánh của trình đổ bóng của bạn.

Vì vậy, tôi đoán biến số threshold không được sử dụng ở bất kỳ đâu trong mã trình đổ bóng của bạn. Nhưng trong trường hợp này, bạn không cần giá trị của nó, và thiết lập một giá trị thống nhất cho vị trí -1 sẽ không làm gì cả. Vì vậy, bạn thực sự không phải lo lắng về điều này.

+0

Wow ... mặc dù tôi biết điều này, cảm ơn lời nhắc nhở. Đó là vấn đề ... – 0xSina