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

Auteur Sujet: Problème avec SFML OpenGL et glew  (Lu 4273 fois)

0 Membres et 1 Invité sur ce sujet

DexArio

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Problème avec SFML OpenGL et glew
« le: Mars 22, 2015, 12:38:24 pm »
Bonjour,

Je suis entrain d'apprendre OpenGL en suivant ce tutoriel: http://openclassrooms.com/courses/developpez-vos-applications-3d-avec-opengl-3-3 sauf que celui ci utilise, en plus de OpenGL, la SDL. Cependant, préférant largement la SFML à la SDL, j'ai voulu dévier un peu du tuto et utiliser la SFML au lieu de la SDL. J'ai donc créé un nouveau projet et tout linké (J'utilise donc: SFML, GLEW, Freeglut). Cependant, glew ne semble pas fonctionner, quand j'appelle une fonction de glew (comme glIsShader ou glVertexAttribPointer, par exemple), le programme crash avec l'erreur suivante:

Unhandled exception at 0x751ECB49 in SFMLGL.exe: 0xC0000005: Access violation executing location 0x00000000.

J'ai donc cherché pendant plusieurs heures et j'ai remarqué que les fonctions qui font crash sont celles qui sont sous la forme (je le vois quand je fais clic droit -> go to definition)

#define glIsShader GLEW_GET_FUN(__glewIsShader)

Ce sont vraiment ces "types" de fonctions qui font crash. Au début de mon programme, j'appelle glEnable(GL_DEPTH_TEST) et ça ne crash pas. Quand je fais clic droit -> go to definition sur cette dernière fonction, je remarque qu'elle n'est pas sous la forme GLEW_GET_FUNC() mais
GLAPI void GLAPIENTRY glEnable (GLenum cap);

Sur internet, j'ai trouvé ce topic: http://stackoverflow.com/questions/15165863/glgenframebuffers-access-violation-when-using-glfw-glew

Ils disent que glew a des problèmes avec un "core OpenGL profile" je ne sais pas ce qu'est un core OpenGL profile mais je pense que c'est peut-être à cause de cela ou alors peut-être que il faut faire quelque chose de spécial pour pouvoir utiliser SFML OpenGL et glew.

Je ne sais pas si ça vient de SFML mais je viens ici car je ne sais vraiment plus quoi faire, merci.
« Modifié: Mars 22, 2015, 01:20:37 pm par DexArio »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème avec SFML OpenGL et glew
« Réponse #1 le: Mars 22, 2015, 06:30:10 pm »
Ou alors t'as oublié d'appeler glewInit.
Laurent Gomila - SFML developer

DexArio

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : Problème avec SFML OpenGL et glew
« Réponse #2 le: Mars 22, 2015, 07:01:20 pm »
Ah oui, mince. Désolé si c'est un peu stupide mais je suis nouveau à OpenGL/Glew.. et je m’emmêle les pinceaux. J'ai donc initialisé Glew mais le problème persiste toujours. Voici mon code (le début):

        sf::ContextSettings settings;
        settings.majorVersion = 3;
        settings.minorVersion = 1;

        sf::RenderWindow window(sf::VideoMode(800, 600), "OpenGL", sf::Style::Default, settings);

        glewExperimental = GL_TRUE;
        GLenum initGlew = glewInit();
        //If the initialization failed
        if (initGlew != GLEW_OK)
        {
                std::cout << "Failed to initialize GLEW, error: " << glewGetErrorString(initGlew) << std::endl;
                return false;
        }

        glEnable(GL_DEPTH_TEST);
 

Normalement, Glew est bien initialisé car ça ne passe pas dans le if(initGlew !=GLEW_OK)

J'ignore à quoi sert glewExperimental mais j'ai vu sur internet qu'il fallait parfois le mettre. De toute façon, avec ou sans, l'erreur persiste.

Merci encore.
« Modifié: Mars 22, 2015, 07:03:10 pm par DexArio »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème avec SFML OpenGL et glew
« Réponse #3 le: Mars 22, 2015, 07:12:12 pm »
Vérifie que tout ce que tu utilises est supporté par ta carte graphique, à commencer par le contexte OpenGL 3.1.
Laurent Gomila - SFML developer

DexArio

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : Problème avec SFML OpenGL et glew
« Réponse #4 le: Mars 22, 2015, 07:25:32 pm »
Oui, ma carte graphique supporte OpenGL 3.1 car, au début, je suivais le tuto avec la SDL et OpenGL 3.1 marchait. Cependant, quand je fais (dans mon projet SFML OpenGL)

       
std::cout << glGetString(GL_VERSION) << std::endl;
 

ça écrit: 1.1.0

Et dans mon projet SDL OpenGL la même ligne écrit: 4.4.0 NVIDIA 345.20

J'utilise aussi les mêmes API que celles utilisées pour le projet original SDL OpenGL (Glew, GLM, Freeglut).

J'ai une carte graphique Nvidia GeForce GTX 660ti, qui est assez récente.
« Modifié: Mars 22, 2015, 07:28:24 pm par DexArio »

DexArio

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : Problème avec SFML OpenGL et glew
« Réponse #5 le: Mars 22, 2015, 08:52:30 pm »
J'ai cherché et fait plusieurs appels de la fonction glGetString() dans mes deux projets (dans le projet SDL OpenGL qui marche et dans le projet SFML OpenGL qui ne marche pas et est le centre de cette discussion) et voici les résultats:

SDL OpenGL:
-glGetString(GL_VERSION) -> 4.4.0 NVIDIA 345.20
-glGetString(GL_EXTENSIONS) -> [Énormément]
-glGetString(GL_RENDERER) -> GeForce GTX 660ti/PCIe/SSE2
-glGetString(GL_VENDOR) -> NVIDIA Corporation

SFML OpenGL:
-glGetString(GL_VERSION) -> 1.1.0
-glGetString(GL_EXTENSIONS) -> GL_WIN_swap_hint GL_EXT_bgra GL_EXT_paletted_texture
-glGetString(GL_RENDERER) -> GDI Generic
-glGetString(GL_VENDOR) -> Microsoft Corporation

Les résultats sont très curieux et me laissent penser que le programme utilise la section graphique de mon processeur. Ce dernier est un Intel Core i7 3770k. Après, je ne suis pas sûr car je ne connais pas grand chose à OpenGL.

N'hésitez pas à me dire si vous voulez que je poste mon code en entier (il est petit) ou que je poste la configuration du linker.
« Modifié: Mars 22, 2015, 08:58:38 pm par DexArio »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Problème avec SFML OpenGL et glew
« Réponse #6 le: Mars 22, 2015, 10:13:37 pm »
En effet. Par contre je n'ai aucune idée de pourquoi, ni de comment faire autrement.
Laurent Gomila - SFML developer