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 :
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 ); }
L'execution de ce code me donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
"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![]()
Partager