Bonjour à tous, de nouveau.
Ce post prolonge une idée (pas la principale) de ce post : http://www.developpez.net/forums/d74...ecran-texture/
Je veux appliquer une convolution à diverses textures 2D (en fait, des lettres du TextRenderer de Jogl).
J'ai ainsi repris un fragment shader glsl utilisant un noyau ainsi qu'un tableau d'offsets pour appliquer la convolution.
Mon problème est que les uniforms width et height n'existent pas par défaut.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 // le noyau uniform float kernel[9]; // les décalages uniform vec2 offset[9]; uniform sampler2D colorMap; uniform float width; uniform float height; void main(void) { int i = 0; vec4 sum = vec4(0.0); for( i=0; i<kernel.length(); i++ ){ vec2 shift = vec2(offset[i].s / width, offset[i].t / height); vec4 tmp = texture2D(colorMap, gl_TexCoord[0].st + shift); sum += tmp * kernel[i]; } gl_FragColor = sum; }
Je ne peux passer au shader que le kernel et les offsets. Je ne veux pas (car ne le peux pas) passer la largeur de la texture, ni sa hauteur.
J'ai ainsi deux questions :
1. Y a-t-il un moyen pour savoir la taille du fragment complet en cours de traitement ? J'ai besoin de savoir quels sont les valeurs des pixels à côté du pixel en cours de traitement.
S'il n'y a pas moyen de savoir la taille (vu que les primitives rendent ça compliqué), comment faire pour récupérer les données des pixels voisins ?
2. J'ai la variable uniform sampler2D qui contient bien les données de la texture actuellement en traitement. Cependant, je ne l'ai définie nulle part.
Puis-je récupérer les données de taille de la texture dans sampler2D ?
Comment se fait-il que l'objet sampler2D contienne la texture en cours de traitement alors que je n'ai pas envoyé de données uniforme autre que kernel et offset ?
Dans http://www.opengl.org/sdk/libs/OpenS...l_quickref.pdf, il n'y a pas de telle variable build-in de ce type. A quoi dois-je m'attendre si il y a des variables inconnues ?
Partager