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:
Ensuite,
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);
Le status du FBO est ici complet.
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);
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:
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.
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
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 !
Partager