[GLSL 1.2] probleme attribute et glGetAttribLocation
Bonjour !
Je programme actuellement en utilisant opengl 2.1 (GLSL 1.2), mais j'essaye progressivement de faire du "forward compatible" en m'affranchissant des variables deprecated comme 'gl_Vertex' ou 'gl_ModelViewMatrix'.
Pour commencer, j'aimerais fournir a mon vertex shader les matrices de projection et de modelisation (modelview) pour ne plus utiliser la pile de matrice opengl.
Si j'ai bien compris, je dois passer la matrice de projection en tant qu'uniform, car elle ne change pas pendant le rendu, et la matrice de modelisation en tant que "attribute" car elle change pour chaque sommet.
J'ai donc commence a m'essayer aux variables 'attribute' avec ce petit shader :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
// la matrice de projection :
uniform mat4 projection_matrix;
attribute vec4 offset;
varying vec4 color;
void main()
{
color = gl_Color;
gl_Position = projection_matrix*gl_ModelViewMatrix*( gl_Vertex + offset );
} |
Pas de souci pour l'uniform, mais je n'arrive pas a passer mon "vec4 offset", donc j'ai essaye de debugger en affichant le nom de la variable :
Code:
1 2 3 4 5 6 7 8
|
GLint o = glGetAttribLocation(*shader, "offset");
GLsizei l,s;
char name[20];
GLenum e;
glGetActiveAttrib(*shader, o , 4 , &l, &s, &e, name );
cout<<name<<endl; |
L'execution de ce code me donne :
"gl_"
alors que je m'attendrais a avoir le nom du vec4 : "offset".
Est-ce que j'ai fait quelque chose de travers ? Est-ce que le probleme pourrait venir d'ailleurs ? J'utilise un VBO pour passer mes couleurs et mes coordonnes de somme, est-il possible qu'il y ait interference ?
Merci pour votre attention et vos reponses ;)