2017-07-10 6 views
0

Je voudrais reproduire des tutoriels (rendu de sprite), qui utilisent la version OpenGL> = 3.3.Comment utiliser un profil OpenGL différent?

Shaders de géométrie par exemple ont été introduits en 3.2, et je reçois cette erreur:

error: ‘GL_GEOMETRY_SHADER’ was not declared in this scope 

Je mis à jour mon chauffeur mesa au plus tard; Je ne comprends pas vraiment, comment je peux choisir une version plus récente d'OpenGL lors de la compilation/liaison en C++:

➜ glxinfo | « Version » grep

server glx version string: 1.4 
client glx version string: 1.4 
GLX version: 1.4 
    Version: 17.1.4 
    Max core profile version: 4.5 
    Max compat profile version: 3.0 
    Max GLES1 profile version: 1.1 
    Max GLES[23] profile version: 3.1 
OpenGL core profile version string: 4.5 (Core Profile) Mesa 17.1.4 
OpenGL core profile shading language version string: 4.50 
OpenGL version string: 3.0 Mesa 17.1.4 
OpenGL shading language version string: 1.30 
OpenGL ES profile version string: OpenGL ES 3.1 Mesa 17.1.4 
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.10 

Je ne peux pas interpréter vraiment, mais il dit qu'il ya une sorte de profil de base en utilisant la version 4.5. Comment utiliser ce profil?

J'initialize le contexte de GL dans mon code comme ceci:

if(!glfwInit()) e_glfw_init(); 
m_window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_TITLE.c_str(), nullptr, nullptr); 
if(m_window == nullptr) e_window_context(); 
glfwMakeContextCurrent(m_window); 
glewExperimental = true; 
if(glewInit() != GLEW_OK) e_glew_init(); 
+4

Comment avez-vous initialiser votre contexte? – BDL

+3

Quels sont les en-têtes/bibliothèques de chargement OpenGL que vous utilisez? –

+0

@NicolBolas Je compris ces en-têtes: 'GL/glew.h' ' GLFW/glfw3.h' 'GLM/glm.hpp' ' GL/glu.h' 'GLM/gtc/type_ptr .hpp' –

Répondre

0

Selon le glfw documentation, vous pouvez spécifier la version OpenGL et profil en utilisant la fonction glfwWindowHint:

if(!glfwInit()) e_glfw_init(); 

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); 
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 5); 
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 

m_window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_TITLE.c_str(), 
          nullptr, nullptr); 
+0

Eh bien, je ne veux pas changer la version OpenGL de la fenêtre, je veux obtenir les fonctionnalités de la nouvelle OpenGL lors de la compilation de mon code. (en principe inclure un en-tête plus récent et lier une nouvelle bibliothèque/objet partagé précompilé) –

+3

Il n'existe pas de bibliothèque ou de fichier d'en-tête "plus récent". Toutes les méthodes et extensions sont chargées à partir de cette bibliothèque (c'est ce que 'glewInit' fait). 'GL_GEOMETRY_SHADER' devrait être défini dans le fichier d'en-tête' glew.h' actuel. – BDL

+0

Merci, je vais essayer de trouver la définition! –