Merci pour le texture array ;)...
Et avec GLSL 1.40, tu as les uniform blocks maintenant =). Tu fais un truc du genre dans ton shader :
Et tu peux régler toutes les matrices avec un seul appel ;).Code:
1
2
3
4
5
6 uniform Transform { mat4 WorldView; mat4 WorldViewProjection; mat3 NormalMatrix; }
Petit truc aussi que j'ai découvert tout à l'heure et qui évitera bien des maux de crâne avec GLSL 1.30 et suivant. Comme vous le savez, on utilise maintenat in et out, associés à des qualifieurs comme smooth, flat, noperspective... à la place de varying. Exemple :
Vertex Shader :
Code:
1
2
3
4
5
6
7
8
9
10 #version 130 // OBLIGATOIRE, SINON COMPILE EN V. 1.10 ... smooth out vec3 Position; // Equivalent de varying vec3 Position void main () { // On transforme l'attribut VertexPosition dans l'espace view space, qu'on stocke dans Position et qui va être interpolé puis envoyé au FS }
Et donc, logiquement, cette variable de sortie du Vertex Shader devient une variable d'entrée du fragment shader :
Fragment shader :
Mais... ceci ne fonctionne pas ! En fait, depuis GLSL 1.30, il y a des qualifieurs de précisions qui définissent le niveau de précision des réels et des entiers. Pour régler la précision, on utilise soit highp, mediump ou lowp, comme ceci :Code:smooth in vec3 Position;
Pour régler de manière globale, on fait ceci :Code:highp vec3 monVecteur;
Ainsi, pour faire en sorte que tous les entiers soit en haute précision, il suffit d'écrire :Code:precision highp/mediump/lowp float/int
La petite astuce, c'est que, de base, dans le vertex shader, ceci est défini :Code:precision highp int;
Mais le truc c'est que dans le fragment shader, et uniquement pour les float, aucun qualifieur n'est défini (mediump pour les entiers je crois). Et donc ça ne compile pas car la variable de sortie du vertex shader est spécifiée avec un qualifieur highp de base, et dans le fragment shader, puisqu'aucun spécifieur n'est spécifiée, les deux variables ne correspondent pas et cela plante.Code:
1
2 precision highp float; precision mediump int; (ou highp chais plus)
Il suffit donc d'ajouter precision highp float; au début du fragment shader pour que ça fonctionne ^^.