2011-10-26 11 views
21

J'ai commencé à écrire des programmes, en C (pour l'instant) en utilisant GLFW et OpenGL. La question que je me pose est la suivante: comment savoir quelle version d'OpenGL mon programme utilisera? Mon ordinateur portable dit que ma carte vidéo a OpenGL 3.3. Si vous tapez "glxinfo | grep -i opengl" retourne:Comment savoir quelle version d'OpenGL j'utilise?

OpenGL vendor string: NVIDIA Corporation 
OpenGL renderer string: GeForce 9600M GT/PCI/SSE2 
OpenGL version string: 3.3.0 NVIDIA 285.05.09 
OpenGL shading language version string: 3.30 NVIDIA via Cg compiler 
OpenGL extensions: 

est donc OpenGL 3.3 étant automatiquement utilisé?

+1

Alors avez-vous trouvé la solution vous-même et avez-vous oublié votre question ou avez-vous encore quelques clichés? Dans le premier cas, abandonner simplement une question est une très mauvaise pratique et dans ce dernier cas, n'hésitez pas à poser d'autres questions sur les réponses existantes ou même à poster votre propre réponse si elle diffère des réponses déjà existantes. –

+1

Si vous voulez vérifier la version * GLEW * sur * Linux * du terminal, vous pouvez installer 'glew-utils' et lancer' visualinfo | grep "version OpenGL" '. –

Répondre

16

il suffit d'appeler glGetString(GL_VERSION) (une fois le contexte est initialisé, bien sûr) et mettre le résultat (qui est en fait le même que glxinfo le fait, je suppose):

printf("%s\n", glGetString(GL_VERSION)); 

Votre programme utilisera automatiquement le plus élevé version possible de votre matériel et le support du pilote, qui dans votre cas semble être 3.3. Mais pour créer un contexte de profil de base pour OpenGL 3+ (dont la fonctionnalité obsolète a été complètement supprimée), vous devez prendre des mesures spéciales. Mais depuis la version 2.7 GLFW a des moyens pour ce faire, en utilisant la fonction glfwOpenWindowHint. Mais si vous ne voulez pas explicitement interdire les fonctionnalités obsolètes, vous pouvez simplement utiliser le contexte qui vous est donné par les fonctions de création de contexte par défaut de GLFW, qui prendra en charge la version la plus élevée possible pour votre matériel et vos pilotes. Mais gardez aussi à l'esprit que pour utiliser une fonctionnalité OpenGL supérieure à la version 1.1, vous devez récupérer les pointeurs de fonction correspondants ou utiliser une bibliothèque qui gère cela pour vous, comme GLEW.

+0

"Mais si je me souviens bien, vous avez besoin d'une fonction spéciale pour créer un contexte OpenGL pour les versions supérieures à 2.1." Pas vrai. Vous n'avez pas besoin d'utiliser WGL/GLX_ARB_create_context_attribs pour dépasser GL 2.1. L'API de création de contexte standard vous donnera un contexte rétrocompatible avec 2.1. Donc, si la compatibilité 3.3 est supportée, c'est ce que vous obtiendrez. –

+0

@NicolBolas Ok, mis à jour la réponse. Je n'ai pas encore d'expérience pratique 3+, merci pour la clarification. –

+0

@ Christian - également spécifiquement une limitation de Windows. MSFT embarque seulement une implémentation opengl 1.1 donc même si votre pilote de carte graphique supporte quelque chose de plus récent, vous devez utiliser GLEW ou charger manuellement les dlls et appeler les fonctions par adresses –

Questions connexes