2011-01-18 1 views
6

Je suis en train d'obtenir le type d'une variable uniforme définie dans un fragment shader:Comment obtenir le type de données d'une variable uniforme

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

Le glGetActiveUniformARB (programme, index, maxLength, * longueur, * taille, * type, * nom) semble être la bonne fonction API à utiliser, mais je ne sais pas comment déterminer index à partir d'un nom de variable. glGetUniformLocationARB renvoie l'emplacement d'une variable uniforme, qui ne semble pas être identique à l'index.

Répondre

3

Eh bien, l'API de type de part du principe que si vous connaissez le nom de l'uniforme, vous savez aussi le type (ces 2 choses sont écrites à côté de l'autre dans la code) donc il ne permet pas un simple accès au type par son nom. Cela dit, vous pouvez parcourir tous les uniformes actifs avec glGetActiveUniformARB pour trouver celui qui vous intéresse. Notez également que cela ne retournera des données valides que si l'uniforme est réellement actif (c'est-à-dire que le compilateur GLSL a pensé qu'il était utile pour les calculs finaux).

(Généralement, l'utilisation prévue est d'itérer sur tous les uniformes, d'extraire le nom et le type, puis d'obtenir leur emplacement à partir du nom pour savoir comment les mettre à jour au moment de l'exécution.

2

De l'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. 
Questions connexes