IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

"Reprogrammer" SwapBuffers


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 35
    Par défaut "Reprogrammer" SwapBuffers
    Salut,

    Je suis débutant avec OpenGL/VC++ 7. J'aimerais sauvegarder le contenu du back buffer et le restaurer dans le front buffer sans utiliser SwapBuffers car il me semble que SwapBuffers qui ne fait pas un vrai "swap" des buffers invalide le back buffer auquel je veux avoir accès.

    Please help me!

    Thank!

  2. #2
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    non non pas de reprogrammation du swapBuffer possible... celui ci est effectué au niveau des drivers et donc... pas possible...
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  3. #3
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 35
    Par défaut
    non non pas de reprogrammation du swapBuffer possible... celui ci est effectué au niveau des drivers et donc... pas possible...
    En fait je ne parlais pas de vraiment le reprogrammer mais plutôt un programme avec les primitives OpenGL qui ferai ce que fait SwapBuffers
    j'ai commencé quelque chose je ne sais pas si j'ai fait des erreurs mais je n'obtient rien à l'écran.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    GLint vp[4] = {0, 0, 0, 0};
     
    glGetIntegerv(GL_VIEWPORT, vp);
     
    GLsizei w = (*((GLsizei*)(vp + 2))), h = *(((GLsizei*)(vp + 2)) + 1);
     
    unsigned* tmpbuffer = new unsigned[32 * w * h];
     
    glReadBuffer(GL_BACK);
     
    glReadPixels(vp[0], vp[1], w, h, GL_RGBA, GL_UNSIGNED_INT, tmpbuffer);
     
    glDrawBuffer(GL_FRONT);
     
    glDrawPixels(w, h, GL_RGBA, GL_UNSIGNED_INT, tmpbuffer);

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 108
    Par défaut
    C'est normal puisque le swapbuffer inverse les buffers puis AFFICHE le buffer.

    Pourquoi tu veux modifier le front et le back buffer manuellement ?

  5. #5
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 35
    Par défaut
    C'est normal puisque le swapbuffer inverse les buffers puis AFFICHE le buffer.

    Pourquoi tu veux modifier le front et le back buffer manuellement ?
    En fait je veux avoir pouvoir acceder au dernier back buffer "swapé" or il me semble que après SwapBuffers le contenu du back buffer est indéfini. donc je veux le faire manuellement pour que je puisse sauvegarder le back buffer.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 108
    Par défaut
    Tu devrais regarder du coté de la fonction glReadPixel. Je pense qu'elle devrais convenir à tes besoins.

  7. #7
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 35
    Par défaut
    Quelqu'un n'aurait pas 1 bout de code car j'ai essayé plusieurs compbinaison des paramêtres de glReadPixels et gldrawpixels et je n'ai toujours rien!

    Merci d'avance

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 108
    Par défaut
    Regarde l'article 13 et la lesson 44 sur le site de nehe. Il y a des exemples d'utilisation.

  9. #9
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 35
    Par défaut
    J'avais oublié glFlush. c'est la raison pour laquelle je n'avais rien à l'écran. En plus ne pas altérer le back buffer g du utiliser glCopyPixels

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    GLint vp[4] = {0, 0, 0, 0};
     
    glGetIntegerv(GL_VIEWPORT, vp);
     
    glDrawBuffer(GL_FRONT);
     
    glCopyPixels(vp[0], vp[1], vp[2], vp[3], GL_COLOR);
     
    glDrawBuffer(GL_BACK);
    glFlush();
    Merci quand même à olivic et et tous ceux qui m'ont aidé!

  10. #10
    Membre confirmé Avatar de Groove
    Inscrit en
    Décembre 2002
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 97
    Par défaut
    Il y a une nouvelle solution bien plus alléchante avec l'extensions GL_EXT_framebuffer_object

    Par contre il faut des drivers bien récent => 75.90 de nVidia et ATI je ne suis pas sur que ce soit géner pour le moment.

    Cette extension permet de considérer le framebuffer comme une texture. Donc pour toi tu créés 2 objets de textures et tu sélectionnes la bonne a chaque rendu. Le nombre de textures n'est pas limité à deux doit tu doit pouvoir géner l'affaire comme il te conviendra.

    La spec de l'extension :
    http://oss.sgi.com/projects/ogl-sample/registry/EXT/framebuffer_object.txt

  11. #11
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    ouais il faut des drivers biens recents mais surtout une carte graphique bien recente

    sinon c'est vrai que c'est bien pratique et surtout si ca peut remplacer ces #&@$¤* de pBuffers, ce serait vraiment la fête 8)
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo