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 :

mixer PBO et glTexCoord2 ?


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 37
    Par défaut mixer PBO et glTexCoord2 ?
    Bonjour tout le monde,

    voila j'ai crée un programme où j'utilise le Pixel Buffer Object pour ma première texture, tandis que pour la deuxième je lis l'image dans un buffer et je la plaque sur un carré à l'aide de "glTexCoord2".
    Le problème et qu'une fois je lance la commande pour le PBO "glBindBuffer(GL_PIXEL_UNPACK_BUFFER, *pbo);" la deuxième texture ne s'affiche pas.
    Ma question est la suivante est ce qu'on peut utiliser le PBO et le glTexCoord2 dans un seul programme, si oui alors comment?
    J'espère que j'ai bien expliqué mon problème, toute suggestion sera la bienvenue et merci d'avance

  2. #2
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    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 033
    Billets dans le blog
    12
    Par défaut
    Généralement les PBO servent à transférer les données (généralement en asynchrone) de la ram vers la mémoire GPU, ou inversement.
    Est-ce bien comme ça que vous vous en servez ?

    Ensuite, comme tous les buffers, il faut l'activer : glBindBuffer( GL_PIXEL_UNPACK_BUFFER, buffer ); puis le désactiver : glBindBuffer( GL_PIXEL_UNPACK_BUFFER, 0 );. Est-ce bien ce que vous faites ?
    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
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 37
    Par défaut
    Merci dragonjoker59 pour ta réponse

    Généralement les PBO servent à transférer les données (généralement en asynchrone) de la ram vers la mémoire GPU, ou inversement.
    Est-ce bien comme ça que vous vous en servez ?
    C'est exactement ce que j'ai fait

    Ensuite, comme tous les buffers, il faut l'activer : glBindBuffer( GL_PIXEL_UNPACK_BUFFER, buffer ); puis le désactiver : glBindBuffer( GL_PIXEL_UNPACK_BUFFER, 0 );. Est-ce bien ce que vous faites ?
    Absolument, je l'ai activé puis le désactivé une fois que je plaque la première texture.

    mais le problème réside toujours y a t'il autre solutions ??

  4. #4
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    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 033
    Billets dans le blog
    12
    Par défaut
    Peut-on voir les codes d'initialisation et d'affichage de ces textures ?
    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
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 37
    Par défaut
    Voila dans le main() je fais appel à une fonction
    createVBO(&VertexBuffer, &TextureBuffer, &ColorBuffer, &pbo);
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    void createVBO(GLuint* VertexBuffer, GLuint* TextureBuffer, GLuint* ColorBuffer, GLuint* pbo)
    {
    	////Create vertex buffer object
    	glGenBuffers(1, VertexBuffer);
    	glBindBuffer(GL_ARRAY_BUFFER, *VertexBuffer);
     
    	//Initialize VBO
    	unsigned int size = nbr_Particles * 4 * sizeof(float3);
    	glBufferData(GL_ARRAY_BUFFER, size, 0, GL_DYNAMIC_DRAW);
     
    	//Create vertex buffer object
    	glGenBuffers(1, TextureBuffer);
    	glBindBuffer(GL_ARRAY_BUFFER, *TextureBuffer);
    	//Initialize VBO
    	size = nbr_Particles*4*sizeof(float2);
    	glBufferData(GL_ARRAY_BUFFER, size, TexCoord, GL_STATIC_DRAW);
     
    	//Create vertex buffer object
    	glGenBuffers(1, ColorBuffer); 
    	glBindBuffer(GL_ARRAY_BUFFER, *ColorBuffer);
    	//Initialize VBO
    	size = nbr_Particles*4*sizeof(float3);
    	glBufferData(GL_ARRAY_BUFFER, size, 0, GL_STATIC_DRAW);
     
    	//Create pixel buffer object
    	glGenBuffers(1,pbo);
    	glBindBuffer(GL_PIXEL_UNPACK_BUFFER, *pbo);
    	//Initialize PBO
    	size = ImageWidth*ImageHeight*nbr_Particles*4;
    	glBufferData(GL_PIXEL_UNPACK_BUFFER, size, NULL, GL_DYNAMIC_DRAW);
     
    	glBindBuffer(GL_ARRAY_BUFFER, 0);
     
    	//Register VBO with CUDA
    	cudaGLRegisterBufferObject(*VertexBuffer);
    	cudaGLRegisterBufferObject(*TextureBuffer);
    	cudaGLRegisterBufferObject(*ColorBuffer);
    	cudaGLRegisterBufferObject(*pbo);
    }
    et dans le display()

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    void display()
    {
     
    	glClearColor (0.0,0.0,1.0,0.0);
    	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     
    	glLoadIdentity();
    	Camera.Render();
    	glBindBuffer( GL_PIXEL_UNPACK_BUFFER, 0 );
    	Ciel->Render(); //Je plaque ma première texture : c'est un SkyBox en utilisant glTexCoord3f()
     
    	renduGPU(VertexBuffer); //Je calcule les vertex
    	cudaThreadSynchronize();
    	Texture_GPU(pbo); //Je calcule la texture
    	cudaThreadSynchronize();
     
    	glBindBuffer( GL_PIXEL_UNPACK_BUFFER, pbo);
    	glBindTexture(GL_TEXTURE_2D, image);
    	glTexImage2D( GL_TEXTURE_2D, 0, 4, ImageWidth*pas, ImageHeight*pas, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
     
     
    	glBindBuffer(GL_ARRAY_BUFFER, VertexBuffer);
    	glVertexPointer(3, GL_FLOAT, 0, BUFFER_OFFSET(0));
     
    	glBindBuffer(GL_ARRAY_BUFFER, TextureBuffer);
    	glTexCoordPointer(2, GL_FLOAT, 0, BUFFER_OFFSET(0));
     
    	glBindBuffer(GL_ARRAY_BUFFER, ColorBuffer);
    	glColorPointer(3, GL_FLOAT, 0, BUFFER_OFFSET(0));
     
    	glEnableClientState(GL_VERTEX_ARRAY);
    	glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    	glEnableClientState( GL_COLOR_ARRAY );
     
    	glDrawArrays(GL_QUADS, 0, nbr_Particles*4);
     
    	glBindBuffer( GL_PIXEL_UNPACK_BUFFER, 0 );
    	glDisableClientState( GL_COLOR_ARRAY );
    	glDisableClientState(GL_TEXTURE_COORD_ARRAY);
    	glDisableClientState(GL_VERTEX_ARRAY);
     
    	glutSwapBuffers();
    }
    Voila en gros le code

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 129
    Billets dans le blog
    149
    Par défaut
    Bonjour,

    Vraiment au cas où, mais je n'y crois pas trop : pouvez-vous rajouter des glGetError() afin de vérifier si le pilote n'indique pas une erreur.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

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

Discussions similaires

  1. Comment mixer du html et une image issue de GD
    Par mego dans le forum Modules
    Réponses: 1
    Dernier message: 24/03/2006, 13h55
  2. mixer.exe
    Par valpagne dans le forum Windows 2000/Me/98/95
    Réponses: 1
    Dernier message: 21/11/2005, 10h50
  3. Mixer deux requêtes
    Par WriteLN dans le forum Requêtes
    Réponses: 3
    Dernier message: 14/11/2005, 09h34
  4. [ImageMagick] Mixer une image Gif et PNG
    Par rigolman dans le forum Bibliothèques et frameworks
    Réponses: 14
    Dernier message: 16/10/2005, 14h58
  5. "Mixer" objet et non-objet ?
    Par zapho dans le forum UML
    Réponses: 5
    Dernier message: 19/03/2004, 14h43

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