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 d'initialisation avec les textures array [OpenGL 3.x]


Sujet :

OpenGL

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 91
    Points : 65
    Points
    65
    Par défaut Problème d'initialisation avec les textures array
    Bonjour,

    j'ai quelques soucis lors de l'initialisation de ma texture array (du moins je suppose), car quand j'essaye d'utiliser l'une des textures de cet array, j'obtiens une texture noire.
    Voici le code d'initialisation :
    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
    bool Texture::charger(std::string fichier)
    {
    	sf::Image image;
    	if (!image.loadFromFile("Textures/Terre.png"))
    	{
    		std::cout << "[ERREUR] Initialisation texture\n";
    		return false;
    	}
     
    	sf::Image image2;
    	if (!image2.loadFromFile("Textures/Herbe.png"))
    	{
    		std::cout << "[ERREUR] Initialisation texture\n";
    		return false;
    	}
     
    	if (glIsTexture(m_identifiant) == GL_TRUE)
    		glDeleteTextures(1, &m_identifiant);
    	glGenTextures(1, &m_identifiant);
     
    	glBindTexture(GL_TEXTURE_2D_ARRAY, m_identifiant);
    	glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, image.getSize().x, image.getSize().y, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
    	glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, image.getSize().x, image.getSize().y, 1, GL_RGBA, GL_UNSIGNED_BYTE, image.getPixelsPtr());
    	glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 1, image2.getSize().x, image2.getSize().y, 1, GL_RGBA, GL_UNSIGNED_BYTE, image2.getPixelsPtr());
     
    	glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    	glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    	glBindTexture(GL_TEXTURE_2D_ARRAY, 0);
     
    	return true;
    }
    Voici le fragment shader
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #version 330 compatibility
    #extension GL_EXT_texture_array : enable
     
    in vec2 coordonneesTexture;
     
    uniform sampler2DArray textures;
     
    out vec4 out_couleurs;
     
    void main()
    {
    	out_couleurs = texture2DArray(textures, vec3(coordonneesTexture, 0));
    }
    Je ne vois vraiment pas où se trouve l'erreur, sachant que j'ai essayé de faire comme ici.
    Voyez-vous où pourrait se situer mon erreur ?
    Merci d'avance.

  2. #2
    Membre actif Avatar de monwarez
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 144
    Points : 293
    Points
    293
    Par défaut
    Bonjour, j'ai regardé le lien que vous avez donné et je me posais la question : pourquoi vous ne faites pas toutes les étapes données ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    glBindTexture(GL_TEXTURE_2D_ARRAY,m_identifiant);
    // jusque là je suis d'accord , mais après il faut utiliser glTexStorage3D() qui est suggéré par le lien
    // Allocate Storage
    glTexStorage3D(GL_TEXTURE_2D_ARRAY, mipLevelCount, GL_RGBA8, width, height, layerCount); // adapter les paramètres avec vos variables
    // et pour la suite ça ne devrait pas changer
    En espérant que celà fonctionne , je n'ais pas actuellement le temps de le tester. Pour le fragment shader je ne peux vous dire s'il est bon (à priori il devrait l'être).
    Si ça fonctionne merci de le préciser (ça pourra me servir plus tard)

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 91
    Points : 65
    Points
    65
    Par défaut
    Ah oui, j'avais fait ça car sur certains sites où j'avais cherché y avait ça.
    J'ai donc remplacé la ligne par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glTexStorage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, image.getSize().x, image.getSize().y, 2);
    Malheureusement ça ne change rien.

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Avez-vous fait un essai avec gDEBugger, ou même VOGL ? Le premier permettra de voir si les tampons sont bien remplis et s'il y a une erreur OpenGL.
    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.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 91
    Points : 65
    Points
    65
    Par défaut
    gDEBugger ne donne effectivement des erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Reason : OpenGL Error
    Breaked-on : glTexSubImage3D(GL_TEXTURE_2D_ARRAY , 0 , 0 , 0 , 0 , 128 , 128 , 1 , GL_RGBA , GL_UNSIGNED_BYTE , 0x05433888)
    Error-Code : GL_INVALID_OPERATION
    Error-Description : The specified operation is not allowed in the current state. The offending function is ignored, having no side effect other than to set the error flag.
     
    Reason : OpenGL Error
    Breaked-on : glTexSubImage3D(GL_TEXTURE_2D_ARRAY , 0 , 0 , 0 , 1 , 128 , 128 , 1 , GL_RGBA , GL_UNSIGNED_BYTE , 0x054438A0)
    Error-Code : GL_INVALID_VALUE
    Error-Description : A numeric argument is out of range. The offending function is ignored, having no side effect other than to set the error flag.
    Au moins on sait que c'est ces deux lignes, mais par contre je vois pas précisement où est le soucis.

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Comme toujours, les indications sont dans la documentation : http://opengl.developpez.com/docs/ma...ltexsubimage3d
    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.

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 91
    Points : 65
    Points
    65
    Par défaut
    Le problème venait du fait qu'il fallait appeler la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, image.getSize().x, image.getSize().y, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
    Et non celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glTexStorage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, image.getSize().x, image.getSize().y, 2);
    Merci beaucoup

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

Discussions similaires

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

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