Tom's Guide > Forum > Programmation > GDI: Acceder au back buffer

GDI: Acceder au back buffer

Forum Programmation : GDI: Acceder au back buffer

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

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



Voila, merci de m'aider!

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

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%...

------------------------------ Débat robotique et intelligence artificielle - Jusqu'où seriez-vous prêt à aller avec un(e) androïde ?
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.

------------------------------ 6800A007B81300CD10B00131C989CF26880541
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...

------------------------------ Débat robotique et intelligence artificielle - Jusqu'où seriez-vous prêt à aller avec un(e) androïde ?
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

------------------------------ 6800A007B81300CD10B00131C989CF26880541
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...

Répondre à molotov2

Donc en faisant tout ton bordel en GDI SEULEMENT quand tu reçois le WM_PAINT, ça devrait régler le problème.

------------------------------ Débat robotique et intelligence artificielle - Jusqu'où seriez-vous prêt à aller avec un(e) androïde ?
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).

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

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
------------------------------ 6800A007B81300CD10B00131C989CF26880541
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... ;)

------------------------------ Débat robotique et intelligence artificielle - Jusqu'où seriez-vous prêt à aller avec un(e) androïde ?
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.

------------------------------ 6800A007B81300CD10B00131C989CF26880541
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 :(

Répondre à molotov2

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).

------------------------------ 6800A007B81300CD10B00131C989CF26880541
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!

Répondre à molotov2
Tom's Guide > Forum > Programmation > GDI: Acceder au back buffer
Aller à :

Il y a 2508 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens