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 :

Render to buffer puis texture attachement


Sujet :

OpenGL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 45
    Par défaut Render to buffer puis texture attachement
    Bonjour à tous, j'ai actuellement une étape de rendu en plusieurs passes dans un FBO avec texture attachment :

    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
     
    //initialisation :
    glGenFramebuffers(1, &m_fbo);
    glBindFramebuffer(GL_FRAMEBUFFER, m_fbo);
    glGenTextures(1, &m_finalTexture);
    glBindTexture(GL_TEXTURE_2D, m_finalTexture);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, m_uWidth, m_uHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_finalTexture, 0);
    [...]
     
    //render
    for(...)
         draw();
     
    drawFinalPass();
    Afin d'accroitre les performances, je souhaiterais effectuer les différentes passes de rendu dans un RenderBufferObject, et n'attacher une texture que pour la dernière passe, afin d'obtenir mon image finale :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    //initialisation :
    glGenFramebuffers(1, &m_fbo);
    glBindFramebuffer(GL_FRAMEBUFFER, m_fbo);
    glGenTextures(1, &m_finalTexture);
    glBindTexture(GL_TEXTURE_2D, m_finalTexture);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, m_uWidth, m_uHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
     
    glGenRenderbuffers(1, &m_rbo);
    glBindRenderbuffer(GL_RENDERBUFFER, m_rbo);
    glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA, m_uWidth, m_uHeight);
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, m_rbo);
     
    //attach RBO and detach texture
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0);
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, m_rbo);
    [...]
     
    //render
    for(...)
         draw();
     
    //attach texture :
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_finalTexture, 0);
     
    drawFinalPass();
    Mon problème étant qu'à la fin du rendu, ma texture est vide . Voyez vous quelque chose que j'aurais pu oublier ? N'hésitez pas à me demander des précisions supplémentaires. Par avance merci pour vos conseils et suggestions.

  2. #2
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 036
    Billets dans le blog
    12
    Par défaut
    [QWERTY]
    Salut!

    Quel est l'effet recherche?
    Parce que le je ne comprends pas trop.
    Tu effectues tes divers rendus dans ton RBO, donc ta texture ne recoit aucun de ces rendus.
    A un moment, il faut que tu transferes le contenu de ton RBO dans ta texture, pour qu'elle ait quelque chose, non?
    Et la tu te rends compte qu'a part avec glReadPixels ce n'est pas possible, du fait de la nature d'un RBO (cf. https://www.opengl.org/wiki/Renderbuffer_Object)
    Donc oui, que souhaites-tu faire?
    [/QWERTY]
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 45
    Par défaut
    Salut, et merci pour ta réponse. Le transfert du contenu de mon RBO dans ma texture est effectué par la dernière étape de rendu, puisque juste avant l'appel à drawFinalPass() je bind la texture au FBO. L'idée était d'accélérer le rendu en rendant mes différentes passes dans un RBO, puisque je n'ai pas besoin de sampler le résultat, et seulement lors de la dernière passe d'effectuer le rendu final dans une texture. J'ai finalement réussi à obtenir le résultat final dans ma texture, cependant les performances sont strictement identiques par rapport à la version initiale rendant toutes les passes dans une texture.

  4. #4
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 036
    Billets dans le blog
    12
    Par défaut
    [QWERTY]
    Le fait de binder ta texture a ton FBO n'effectue aucun transfert du RBO vers la texture (ou j'ai loupe un passage?).
    Je ne suis pas etonne que tu n'aies pas de reel gain, a faire cela.
    Par contre, comment es-tu parvenu a ton resultat?
    [/QWERTY]
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 45
    Par défaut
    Non, le simple fait de binder ma texture au FBO ne transfert pas le contenu du RBO dans ma texture, cependant le draw de la dernière passe le fait, j'ai dans mon FBO le résultat de mes passes précédentes, j'y attache ma texture, et j'effectue la dernière étape du rendu (le blend est activé, GL_ONE GL_ONE).

Discussions similaires

  1. Render Buffer vs Texture
    Par spiner900 dans le forum OpenGL
    Réponses: 2
    Dernier message: 21/03/2014, 10h35
  2. [C#][DX9] Render to texture
    Par funkydata dans le forum DirectX
    Réponses: 12
    Dernier message: 23/06/2006, 20h11
  3. render to texture
    Par damienlann dans le forum OpenGL
    Réponses: 46
    Dernier message: 22/06/2006, 17h44
  4. Render to texture
    Par primuus dans le forum DirectX
    Réponses: 1
    Dernier message: 19/04/2006, 04h38
  5. Render to texture???
    Par sebh dans le forum OpenGL
    Réponses: 2
    Dernier message: 17/01/2004, 10h50

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