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 :

Probléme avec les texture array


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

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

    Informations forums :
    Inscription : Février 2015
    Messages : 9
    Par défaut Probléme avec les texture array
    Salut,
    J'ai un petit probléme avec Les Texture Array.
    Dans le code qui suit je veut utilisé les Texture Array c-à-d remplacer la GL_TEXTURE_2D par GL_TEXTURE_2D_ARRAY.
    voila le code :
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    //---------------------------------------------------------------------------------------
    #include <windows.h>
    #include <GL/glew.h>
    #include <GL/gl.h>
    #include <GL/glu.h>
     
    #include <stdio.h>
    #include <string>
    #include <set>
    #include <iostream>
     
    class RenderTarget
    {
    private:
        GLuint _frameBuffer;
        GLuint _renderBuffer;
        GLuint _texture;
     
        int _size;
    public:
        virtual ~RenderTarget() {
            glDeleteTextures(1, &_texture);
            glDeleteRenderbuffers(1, &_renderBuffer);
            glDeleteFramebuffers(1, &_frameBuffer);
        }
     
        const int Size() {
            return _size;
        }
     
        void Bind() {
            glViewport(0, 0, _size, _size);
            glBindFramebuffer(GL_FRAMEBUFFER, _frameBuffer);
        }
     
        void Unbind() {
            glBindFramebuffer(GL_FRAMEBUFFER, 0);
        }
     
        GLuint Texture() {
            return _texture;
        }
        GLuint FBO() {
            return _frameBuffer;
        }
     
        RenderTarget(const int size, GLuint wrap = GL_CLAMP_TO_EDGE, GLuint filterParam = GL_LINEAR, GLuint internalFormat = GL_RGBA32F, GLuint type = GL_FLOAT) :
            _size(size)
        {
     
            glGenTextures(1, &_texture);
            glBindTexture(GL_TEXTURE_2D, _texture);
            glTexImage2D(GL_TEXTURE_2D, 0, internalFormat, _size, _size, 0, GL_RGBA, type, NULL);
            static const GLfloat border[] = {2, 2, 2, 2};
            glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, border);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrap);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrap);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filterParam);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filterParam);
     
     
            glGenFramebuffers(1, &_frameBuffer);
            glBindFramebuffer(GL_FRAMEBUFFER, _frameBuffer);
            glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, _texture, 0);
     
            glGenRenderbuffers(1, &_renderBuffer);
            glBindRenderbuffer(GL_RENDERBUFFER, _renderBuffer);
            glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, _size, _size);
            glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, _renderBuffer);
     
            printf(" FBO dans1 -- %d \n",_frameBuffer);
     
            glBindTexture(GL_TEXTURE_2D, 0);
            glBindRenderbuffer(GL_RENDERBUFFER, 0);
            glBindFramebuffer(GL_FRAMEBUFFER, 0);
        }
    };
     
    //---------------------------------------------------------------------------------------
    J'ai fait ces modification suivante:
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    //---------------------------------------------------------------------------------------
    #include <windows.h>
    #include <GL/glew.h>
    #include <GL/gl.h>
    #include <GL/glu.h>
     
    #include <stdio.h>
    #include <string>
    #include <set>
    #include <iostream>
     
    class RenderTarget
    {
    private:
    	GLuint _frameBuffer;
    	GLuint _renderBuffer;
    	GLuint _texture;
     
    	int _size;
    public:
    	virtual ~RenderTarget() {
    		glDeleteTextures(1, &_texture);
    		glDeleteRenderbuffers(1, &_renderBuffer);
    		glDeleteFramebuffers(1, &_frameBuffer);
    	}
     
    	const int Size() {
    		return _size;
    	}
     
    	void Bind() {
    		glViewport(0, 0, _size, _size);
    		glBindFramebuffer(GL_FRAMEBUFFER, _frameBuffer);
    	}
     
    	void Unbind() {
    		glBindFramebuffer(GL_FRAMEBUFFER, 0);
    	}
     
    	GLuint Texture() {
    		return _texture;
    	}
    	GLuint FBO() {
    		return _frameBuffer;
    	}
     
    	RenderTarget(const int size, GLuint wrap = GL_CLAMP_TO_EDGE, GLuint filterParam = GL_LINEAR, GLuint internalFormat = GL_RGBA32F, GLuint type = GL_FLOAT) :
    		_size(size)
    	{
    glGenTextures(1, &_texture);
    		glBindTexture(GL_TEXTURE_2D_ARRAY, _texture);
     
    		glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, internalFormat, _size, _size, 1, 0, GL_RGBA, type, NULL);
     
    		static const GLfloat border[] = {2, 2, 2,2};
    		glTexParameterfv(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_BORDER_COLOR, borde);
    		glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, wrap);
    		glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_T, wrap);
    		glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, filterParam);
    		glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, filterParam);
     
    		glGenFramebuffers(1, &_frameBuffer);
    		glBindFramebuffer(GL_FRAMEBUFFER, _frameBuffer);
     
    		glFramebufferTextureLayer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, _texture, 0, 0);
     
     
    		glGenRenderbuffers(1, &_renderBuffer);
    		glBindRenderbuffer(GL_RENDERBUFFER, _renderBuffer);
    		glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, _size, _size);
    		glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, _renderBuffer);
     
     
     
    		//////////////////////////////////////////////////////////////
     
     
    	}
    		glBindTexture(GL_TEXTURE_2D_ARRAY, 0);
    		glBindRenderbuffer(GL_RENDERBUFFER, 0);
    		glBindFramebuffer(GL_FRAMEBUFFER, 0);
     
    	}
    };
    //---------------------------------------------------------------------------------------
    mes une image blanche s'affiche

    Qui peut me donner une solution ?

  2. #2
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 034
    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 034
    Billets dans le blog
    12
    Par défaut
    As-tu mis des appels à glGetError, pour vérifier que tes actions se passent bien?
    As-tu vérifié via glCheckFramebufferStatus que ton frame buffer est bien complet, avant de tenter de l'utiliser?
    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 régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

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

    Informations forums :
    Inscription : Février 2015
    Messages : 9
    Par défaut
    Citation Envoyé par dragonjoker59 Voir le message
    As-tu mis des appels à glGetError, pour vérifier que tes actions se passent bien?
    As-tu vérifié via glCheckFramebufferStatus que ton frame buffer est bien complet, avant de tenter de l'utiliser?
    Bonjour, et merci pour votre réponse .
    oui oui j'ai bien utiliser glCheckFramebufferStatus pour vérification .
    voila le code :

    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
    GLenum FBOstatus;
    	// check FBO status
    	FBOstatus = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER);
     
    	printf("--------------- FBO== %d \n",GL_FRAMEBUFFER_COMPLETE_EXT);
    	if(FBOstatus != GL_FRAMEBUFFER_COMPLETE_EXT)
    	{
    		printf("GL_FRAMEBUFFER_COMPLETE_EXT failed, CANNOT use FBO\n");
    		switch(FBOstatus) {
            case GL_FRAMEBUFFER_COMPLETE_EXT:
                break;
            case GL_FRAMEBUFFER_UNSUPPORTED_EXT:
                printf("Unsupported framebuffer format\n");
                break;
            case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT:
                printf("Framebuffer incomplete, missing attachment\n");
                break;
    		case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT:
                printf("Framebuffer incomplete, incomplete attachment\n");
                break;
            case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT:
                printf("Framebuffer incomplete, attached images must have same dimensions\n");
                break;
            case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT:
                printf("Framebuffer incomplete, attached images must have same format\n");
                break;
            case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT:
                printf("Framebuffer incomplete, missing draw buffer\n");
                break;
            case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT:
                printf("Framebuffer incomplete, missing read buffer\n");
                break;
     
        }
    oui oui le frame buffer est bien complet , il n-y-a aucune erreur .

  4. #4
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 034
    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 034
    Billets dans le blog
    12
    Par défaut
    Et pour glGetError, aucun soucis de ce côté là?
    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 régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

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

    Informations forums :
    Inscription : Février 2015
    Messages : 9
    Par défaut
    Citation Envoyé par dragonjoker59 Voir le message
    Et pour glGetError, aucun soucis de ce côté là?
    Bonjour, et merci pour votre réponse .
    glGetError return 0 c-à-d aucune erreur .

  6. #6
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 034
    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 034
    Billets dans le blog
    12
    Par défaut
    Euh ... Vos appels à glGetError, vous les avez faits après chaque appel de fonction OpenGL?
    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).

Discussions similaires

  1. [OpenGL 3.x] Problème d'initialisation avec les textures array
    Par Nikogram dans le forum OpenGL
    Réponses: 6
    Dernier message: 11/05/2014, 13h50
  2. Problème avec les textures
    Par Harmonic dans le forum SFML
    Réponses: 4
    Dernier message: 02/04/2013, 09h27
  3. Problème avec les textures projectives
    Par sylvain_bos dans le forum Ogre
    Réponses: 0
    Dernier message: 03/01/2011, 17h49
  4. Problème avec les textures
    Par Letinono dans le forum CUDA
    Réponses: 1
    Dernier message: 07/07/2009, 16h06
  5. problème avec les cell array
    Par fattouna dans le forum MATLAB
    Réponses: 1
    Dernier message: 02/07/2009, 21h56

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