GDI: Acceder au back buffer
Forum Programmation : GDI: Acceder au back buffer
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
Code :
|
Voila, merci de m'aider!
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%...
Donnez votre avis sur la question !
Répondre à Kenelm
Il faut faire ce que tu veux faire en OpenGL, regarde le redbook ou un tuto de NeHe.
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
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...
Donnez votre avis sur la question !
Répondre à Kenelm
Si on prend la police prédéfinie GLUT (faut inclure glut du coup), c'est pas bien compliqué
J'ai trouvé un tuto pour ça : http://www.york.ac.uk/services/cse [...] L/L23.html
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
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...
Donc en faisant tout ton bordel en GDI SEULEMENT quand tu reçois le WM_PAINT, ça devrait régler le problème.
Donnez votre avis sur la question !
Répondre à Kenelm
ç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).
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
Moi c'est ce que mes profs m'ont raconté hein
Donnez votre avis sur la question !
Répondre à Kenelm
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
)
Message édité par CRicky le 10-03-2008 à 22:49:15
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
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...
Donnez votre avis sur la question !
Répondre à Kenelm
Au bon moment par rapport aux autres évènements windows oui (clavier souris autres), mais pas par rapport à l'affichage.
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
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
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).
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
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!
Il y a 2508 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

CRicky