2017-05-14 1 views
0

Récemment, j'ai créé mon propre jeu avec OpenGL et LWJGL 2 (Java). Après cela, j'ai voulu améliorer mes compétences en programmation et j'ai commencé à apprendre à utiliser OpenGL avec C++.La version OpenGL n'est pas égale à la version de shader supportée

Avec LWJGL je pourrais utiliser #version 330 mais avec C++ et SDL2 je ne peux utiliser #version 110, mais glGetString(GL_VERSION) retours 3.0 Mesa 12.0.6.

ma fenêtre, j'initialiser comme ceci:

SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); 
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3); 

SDL_Init(SDL_INIT_EVERYTHING); 

SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); 
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); 
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); 
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); 
SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32); 
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); 
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); 


m_window = SDL_CreateWindow(title.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_OPENGL|SDL_WINDOW_RESIZABLE); 
m_glContext = SDL_GL_CreateContext(m_window); 


GLenum status = glewInit(); 

if(status != GLEW_OK){ 
    std::cerr << "Glew failed!" << std::endl; 
} 

Où est ma question?

+0

Essayez paramètre 'SDL_GL_SetAttribute()' 'après les appels SDL_Init()' ... –

+0

Qu'est-ce que ' glxinfo | grep "version de la langue d'ombrage" 'dois-je dire? – keltar

Répondre

0

Vous devez demander un profil de base OpenGL.

Par défaut, vous obtiendrez un profil de compatibilité OpenGL. Avec un profil de compatibilité, vous serez limité à la version 3.0 si vous utilisez Mesa, ou 2.1 si vous utilisez MacOS. Avec un profil de base, vous serez en mesure d'accéder à des versions plus récentes.

Ceci n'est pas nécessaire si vous utilisez les pilotes AMD ou nVidia sous Linux ou Windows.

Dans SDL, vous pouvez demander un fichier de base en ajoutant cette ligne avant de créer une fenêtre:

SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); 
+0

Cela a fonctionné en partie. Maintenant, je peux mettre 'SDL_GL_CONTEXT_MAJOR_VERSION' et' SDL_GL_CONTEXT_MINOR_VERSION' à 3,3 sans crash, mais quand j'utilise '#version 330' dans les shaders, il renvoie l'erreur, qui dit que les versions GLSL supportées sont 1.10, 1.20, 1.30, 1.00 es, 3,00 es –