Se connecter / S'enregistrer
Votre question

GDI: Acceder au back buffer

Tags :
  • Opengl
  • Programmation
Dernière réponse : dans Programmation
9 Mars 2008 15:20:41

Hello,

Je suis actuellement sur un projet OpenGL et j'aimerais afficher du texte a la fin de chaque frame au dessus de mon dessin OpenGL, pour ca j'utilise le GDI c'est plus simple pour moi (CreateFont(), DrawText(),...).

Le probleme c'est que je dois donc dessiner le texte ds le back buffer juste comme le dessin openGL ms je sais pas comment acceder au black buffer :??: 

  1. glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
  2. glLoadIdentity();
  3.  
  4. // Code de dessin OpenGL...
  5.  
  6. DrawText( hDC, "123", 3, &rcRect, 0 ); // Dessine ds le Front buffer, devrait etre dans le back buffer
  7.  
  8. SwapBuffers( hDC ); //A la fin, on affiche le tout


Voila, merci de m'aider!

Autres pages sur : gdi acceder back buffer

9 Mars 2008 17:18:44

Aux dernières nouvelles, avec le GDI tu peux pas toucher au backbuffer, vu qu'il supporte pas les pixelformats en double buffering. La seule solution consiste donc à passer en singlebuffer.

Maintenant je dis pas que je suis sûr de mon coup à 100%...
a b L Programmation
9 Mars 2008 20:55:55

Il faut faire ce que tu veux faire en OpenGL, regarde le redbook ou un tuto de NeHe.
9 Mars 2008 21:34:59

Oui enfin dans ce cas là, faut faire tout le rendu des polices à la main... Lui souhaitait justement utiliser ça pour se simplifier la vie. Y'a un bon tuto avec tout le code nécessaire pour les polices sur le site de NeHe, mais bon, vla la galère...

Sinon en le dessinant sur le front, ça clignote non ? Ou alors ça marche pas du tout ? Faudrait p'tet aussi essayer de faire tout ton truc en GDI au moment où tu reçois un WM_PAINT, pas sûr, mais c'est à tenter...
10 Mars 2008 11:53:55

OK Merci tous d'avoir ete aussi rapide, je vais tenter le coup avec glu tool kit je crois.

Sinon en effet le resultat est que ca clignote pour le moment...
10 Mars 2008 19:12:37

Donc en faisant tout ton bordel en GDI SEULEMENT quand tu reçois le WM_PAINT, ça devrait régler le problème.
a b L Programmation
10 Mars 2008 20:31:23

ça ne devrait pas régler le problème, WM_PAINT est juste un message. Pour tout afficher il faudrait verrouiller soit en le bloquant, soit par double-buffering. On en revient donc au même problème. Tu peux juste réduire le clignotement (généralement dû à l'effacement du widget).
10 Mars 2008 21:25:44

Moi c'est ce que mes profs m'ont raconté hein :o 
a b L Programmation
10 Mars 2008 22:48:46

Si les profs t'ont dit que WM_PAINT empêche le clignotement, c'est qu'ils n'ont pas compris d'où il vient ou qu'ils n'ont pas compris à quoi servent les messages windows (ou les deux :)  )
11 Mars 2008 00:18:39

C'est pas que ça empêche le clignotement, juste que ça permet de dessiner au bon moment. D'ailleurs après une petite recherche, c'est dingue le nombre de mecs qui font leur bordel en GDI sur le WM_PAINT... ;) 
a b L Programmation
11 Mars 2008 20:11:34

Au bon moment par rapport aux autres évènements windows oui (clavier souris autres), mais pas par rapport à l'affichage.
20 Mars 2008 14:29:21

Hm je travail avec Code::Blocks et je peux pas inclure glut, j'ai fait le tour des forum et j'ai vu bcp de cas pr ce probleme mais il n'existe pas de solution...

Bon alors je vais etre symple: Comment on fait pr afficher du texte par dessus du dessin OpenGL sans clignotement (si y a moyen)

Pcq on peut meme pas creer de context OpenGL ds un mem buffeur, relou!

J'ai aussi essayer en faisant un GetPixel a la fin de chaque frame ms je pert du FPS a crever...

J'ai l'impression ke je me suis une fois de plus heurte a un probleme sans solution :( 
a b L Programmation
20 Mars 2008 20:25:58

ton impression est exacte puisque microsoft indique qu'on ne peut pas utiliser le doubl-buffering. Or celui-ci est le seul moyen efficace pour éviter le clignotement. Donc, le mieux c'est de faire ta police de caractère (ou la charger à partir de celle de l'os)et de les gérer finalement comme des images (voir le tuto de NeHe).
26 Mars 2008 12:18:25

Ouaip c'est justement ce aue j'ai fait ^^ J'avais utiliser se systeme pour un programme avec DirectDraw donc j'ai fait un copier coller du code. Par contre pour ce qui est de l'afficher j'ai fait un glDrawPixel apres avoir calculer moi-meme les pixels de l'image donc c'est un rien plus lent. Ca ce remarue pas ms a mon avis faudra pas que j'affiche du texte a toutes les sauces!

Probleme resolu!
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS