Bonjour,

Je suis depuis un moment ce qui se passe dans ce board, mais n'ai jamasi vraiment posté. Pour mon premier, j'aurais besoin d'un conseil.

Je cherche à utiliser les Renderbuffers pour générer un depth buffer et m'en servir comme masque sur fragments par la suite.

Après la génération de mon FBO, je génère donc mon Renderbuffer de cette façon:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
GLuint depth;
glGenRenderbuffersEXT(1, &depth);
//initialize depth renderbuffer
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depth);
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, W, H);
Ensuite,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
//bind fbo
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
//attach one texture
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,GL_COLOR_ATTACHMENT0_EXT,GL_TEXTURE_RECTANGLE_ARB, Tex.id, 0);
//attach depth
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, depth);
Le status du FBO est ici complet.

Ensuite, je cherche à initialiser mon depth buffer à une certaine valeur, à activer le test de depth, désactiver l'écriture dans le depth buffer, ce que je fais par:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
glClearDepth(1.0);	    // Set clearing value for depth
glEnable(GL_DEPTH_TEST);	// Enable depth testing
glDepthFunc(GL_LESS);	// Choose depth comparison function
glDepthMask(GL_FALSE);		// Disable depth buffer writing
glClear(GL_DEPTH_BUFFER_BIT);	// Clear depth buffer
Les valeurs retournées par mon fragment program varient en augmentant de 0 à 1, je veux donc ne plus rien calculer sur les fragments donc le z est passé au dessus de 1.

Mon problème est qu'ici, aucun fragment n'est calculé.
En changeant la fonction de test de GL_LESS à GL_GREATER, les fragments sont tous calculés. Je pense donc que les valeurs dans le depth buffer ne sont pas les bonnes, mais je ne sais pas pourquoi.
Par ailleurs, si je change la valeur que je veux mettre dans mon masque et que j'essaye de la demander (par gLGetFloatv() par exemple), j'obtiens toujours 1...

Est-ce qu'il manque quelque chose pour initialiser correctement ces valeurs ? Par ailleurs, y a-t-il un moyen de tester les valeurs dudit depth buffer ?

Merci d'avance !