2011-01-18 31 views
6

Estoy tratando de obtener el tipo de una variable uniforme definido en un fragment shader:¿Cómo obtener el tipo de datos de una variable uniforme

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

El glGetActiveUniformARB (programa, índice, maxLength, * longitud, * tamaño, * tipo, * nombre) parece ser la función API correcta para usar, pero no sé cómo determinar índice de un nombre de variable. glGetUniformLocationARB devuelve la ubicación de una variable uniforme, que parece no ser la misma que índice.

Respuesta

3

Bueno, la API tipo de supone que si se conoce el nombre del uniforme, también se conoce el tipo (esas 2 cosas están escritas junto a la otra en el código) por lo que no permite un acceso simple al tipo por nombre.

Dicho esto, puede iterar sobre todos los uniformes activos con glGetActiveUniformARB para encontrar el que le interese. Tenga en cuenta también que esto solo arrojará datos válidos si el uniforme está realmente activo (es decir, el compilador GLSL pensó que era útil para los cálculos finales).

(Típicamente, el uso esperado es iterar sobre todos los uniformes, extraer el nombre y tipo, y luego obtener su ubicación del nombre para saber cómo actualizarlos en tiempo de ejecución. No al revés).

2

Desde el 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. 
Cuestiones relacionadas