2011-01-18 1 views
6

tôi đang cố gắng để có được kiểu của một biến thống nhất quy định tại một Shader đoạn:Làm thế nào để có được những kiểu dữ liệu của một biến thống nhất

uniform vec3 color; 
uniform float zoom; 
uniform int max; 
void main() { 
    ... 
} 

Các glGetActiveUniformARB (chương trình, chỉ số, maxLength, * chiều dài, * size, * type, * name) có vẻ là hàm API thích hợp để sử dụng nhưng tôi không biết cách xác định chỉ số chỉ số từ tên biến. glGetUniformLocationARB trả lại vị trí của biến thống nhất, có vẻ như không giống với chỉ số .

Trả lời

3

Vâng, API loại-of giả định rằng nếu bạn biết tên của đồng phục, bạn cũng biết loại (những 2 điều được viết bên cạnh nhau trong mã) để nó không cho phép truy cập đơn giản vào loại theo tên.

Điều đó nói rằng, bạn có thể lặp qua tất cả các đồng phục hoạt động với glGetActiveUniformARB để tìm một thứ bạn quan tâm. Cũng lưu ý rằng điều này sẽ chỉ trả về dữ liệu hợp lệ nếu đồng phục thực sự hoạt động (tức là trình biên dịch GLSL nghĩ rằng nó hữu ích cho các tính toán cuối cùng).

(Thông thường, mức sử dụng dự kiến ​​sẽ lặp qua tất cả đồng phục, trích xuất tên và loại, sau đó lấy vị trí của chúng từ tên để biết cách cập nhật chúng tại thời gian chạy. Không phải cách khác).

2

Từ glGetActiveUniform man page:

The number of active uniform variables can be obtained by calling glGetProgram 
with the value GL_ACTIVE_UNIFORMS. A value of 0 for index selects the first 
active uniform variable. Permissible values for index range from 0 to the 
number of active uniform variables minus 1.