Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: OpenGL textures ne marchent que si une sf::texture est instanciée.  (Lu 2074 fois)

0 Membres et 1 Invité sur ce sujet

Sarcarx

  • Invité
Bonjour,

Je  sais que ma question se pose plus sur OpenGL que SFML mais vous pourrez peut-être m'aider.
Je migre mon programme depuis SFML vers freeglut, j'ai donc du modifier les textures. pour les charger de façon différente. Seulement avec ces nouvelles textures, les shaders affichent des erreurs
ModelID not found ...
MatrixID not found ...
ViewID not found ...
LightID not found ...
MaterialAmbientID not found ...
MaterialSpecularID not found ...
vertexUVID not found ...
  ## ERROR: 1281: invalid value
 

mais en rajoutant la ligne :
        new sf::Texture();
        glutMainLoop();
 

Tout marche (même si la texture instanciée ne comporte aucune image, les textures openGL fonctionnent). J'avoue que ça ressemble à de la magie pour moi je suis allé voir l'instanciation d'une texture et il n'y a aucune fonction qui me semble régler mon problème.

Quand j'utilise la texture je fais cela :
        GLuint LightID = glGetUniformLocation(this->shaderProgram, "LightPosition_worldspace");
        if(LightID ==-1)
                cout << "LightID not found ..." << endl;
        GLuint MaterialAmbientID = glGetUniformLocation(this->shaderProgram, "MaterialAmbient");
        if(MaterialAmbientID ==-1)
                cout << "MaterialAmbientID not found ..." << endl;
        GLuint MaterialSpecularID = glGetUniformLocation(this->shaderProgram, "MaterialSpecular");
        if(MaterialSpecularID ==-1)
                cout << "MaterialSpecularID not found ..." << endl;

        glm::vec3 lightPos = glm::vec3(0,150,150);
        glUniform3f(LightID, lightPos.x, lightPos.y, lightPos.z);
        glUniform3f(MaterialAmbientID, MaterialAmbient.x, MaterialAmbient.y, MaterialAmbient.z);
        glUniform3f(MaterialSpecularID, MaterialSpecular.x, MaterialSpecular.y, MaterialSpecular.z);


        // Get a handle for our "myTextureSampler" uniform
                GLuint TextureID  = glGetUniformLocation(shaderProgram, "myTextureSampler");
                if(!TextureID)
                        cout << "TextureID not found ..." << endl;
                glActiveTexture(GL_TEXTURE0);

                        glBindTexture (GL_TEXTURE_2D, texture);

                glUniform1i(TextureID, 0);

        // 2nd attribute buffer : UVs
                GLuint vertexUVID = glGetAttribLocation(shaderProgram, "color");
                if(vertexUVID==-1)
                        cout << "vertexUVID not found ..." << endl;
                glEnableVertexAttribArray(vertexUVID);
                glBindBuffer(GL_ARRAY_BUFFER, color_array_buffer);
                glVertexAttribPointer(vertexUVID, 2, GL_FLOAT, GL_FALSE, 0, 0);  


 

Si quelqu'un pouvait apporter de l'eau à mon moulin j'en serais très reconnaissant.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : OpenGL textures ne marchent que si une sf::texture est instanciée.
« Réponse #1 le: Août 25, 2014, 11:23:18 am »
Citer
Je migre mon programme depuis SFML vers freeglut
Donc tu n'utilises plus SFML dans ton programme, c'est bien ça ? Donc je vois mal ce que ce sf::Texture vient faire là. C'est soit un problème d'OpenGL, soit un problème avec FreeGLUT. Donc il y a sûrement des forums plus adaptés à ta question ;)
Laurent Gomila - SFML developer

Sarcarx

  • Invité
Citer
Je migre mon programme depuis SFML vers freeglut
Donc tu n'utilises plus SFML dans ton programme, c'est bien ça ? Donc je vois mal ce que ce sf::Texture vient faire là. C'est soit un problème d'OpenGL, soit un problème avec FreeGLUT. Donc il y a sûrement des forums plus adaptés à ta question ;)
Ben le fait d'appeler la texture résoud le problème donc je me demandais si SFML n'utilisais pas une fonction magique à ce moment là. Tant pis je vais demander autre part aussi.  :-\

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : OpenGL textures ne marchent que si une sf::texture est instanciée.
« Réponse #3 le: Août 25, 2014, 11:37:19 am »
Non, c'est juste que ça va t'activer un contexte OpenGL. Donc peut-être qu'il faut appeler une fonction explicite pour que FreeGLUT active le contexte OpenGL qu'il a créé. Mais encore une fois, si c'est un problème avec FreeGLUT tu aurais de meilleures réponses sur leur forum.
Laurent Gomila - SFML developer

Sarcarx

  • Invité
Non, c'est juste que ça va t'activer un contexte OpenGL. Donc peut-être qu'il faut appeler une fonction explicite pour que FreeGLUT active le contexte OpenGL qu'il a créé. Mais encore une fois, si c'est un problème avec FreeGLUT tu aurais de meilleures réponses sur leur forum.

ok j'ai trouvé  :P, en fait il s'agissait de ma méthode disableShaders, qui appelait notamment :

sf::Texture::bind(NULL);
 
et pour une certaine raison ça faisait buggé tout mes shaders  :'(
j'aurais du faire plus attention pendant ma migration.


Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : OpenGL textures ne marchent que si une sf::texture est instanciée.
« Réponse #5 le: Août 25, 2014, 11:48:05 am »
Je ne comprends toujours pas ce que vient faire ce genre d'appel dans un programme qui utilise FreeGLUT. Tu utilises encore SFML pour certaines choses ?
Laurent Gomila - SFML developer

Sarcarx

  • Invité
Je ne comprends toujours pas ce que vient faire ce genre d'appel dans un programme qui utilise FreeGLUT. Tu utilises encore SFML pour certaines choses ?

hum non je ne crois pas j'ai commenté tous les appels à SFML, je vais continuer la migration si je trouve autre chose je le rajouterai ici.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : OpenGL textures ne marchent que si une sf::texture est instanciée.
« Réponse #7 le: Août 25, 2014, 11:55:18 am »
Dans ce cas si tu n'utilises plus SFML alors vire le des options de ton projet, ça te fera des erreurs de compilation ou d'édition de liens si tu as des appels qui traînent.
Laurent Gomila - SFML developer