OpenGL 4.1(?) sous Mavericks
J'ai juste mis à jour mon MacBook Pro à Mavericks (mac os 10.9), y compris Xcode.
Selon Apple "OpenGL Capacités de Table", cette version a l'appui
pour OpenGL 4.1, mais un appel à glGetString(GL_VERSION) renvoie "1.2" et mon GLSL
3.30 shader, qui commence par "#version 330" refuse de se charger, en disant que
la version n'est pas prise en charge.
Dois-je faire quelque chose pour Mavericks pour permettre 4.1 prise en charge?
- Êtes-vous de demander un contexte Noyau?
- 1.2?! Êtes-vous sûr de ne pas dire 2.1?
- Je rencontre le même problème lors de l'exécution de l'exemple de code de OpenGL SuperBible Cinquième Édition écrit par Richard Wright, il utilise glut pour créer le contexte, après recherche sur le web, les gens disent glut n'est pas en cours de développement, est le problème causé par la SURABONDANCE?
- Il est FreeGLUT, qui est maintenu... le problème avec l'aide de sur OS X, c'est qu'il passe par X11. X11 est fourni sur OS X grâce à une compatibilité serveur X appelé XQuartz, vous ne pouvez pas obtenir un 3.2+ OpenGL contexte à l'aide de la XQuartz serveur, car il ne permet pas de mettre en œuvre la nécessaire extension GLX à la demande d'un profil de base. Ce qui signifie que tout cadre qui utilise 3.2 sur OS X doit passer par les Api natives comme CGL (plein écran et C) ou NSOpenGL (plein écran/Fenêtré et Objective-C). GLFW3 et de nombreux autres cadres de ce faire, FreeGLUT ne fonctionne toujours pas.
- merci pour votre réponse.
Vous devez vous connecter pour publier un commentaire.
Lorsque vous demandez votre format de pixel à l'aide de l'un des bas-niveau de l'Api sur OS X, vous devez ajouter les lignes suivantes à votre liste d'attributs dans l'ordre pour utiliser un profil de base:
CGL:
NSOpenGL:
Maintenant, alors que la constante en particulier est nommé ...
3_2Core
, ce qu'elle signifie réellement demander un contexte qui supprime toutes les fonctionnalités obsolètes, et prend en charge au moins OpenGL 3.2 (a du profil de base, en d'autres termes). Vous pouvez obtenir un 4.1 ou 3.3 contexte à l'aide de cette même constante; en toute honnêteté, y compris un numéro de version actuel en constante était probablement un mauvais choix.Si vous ne spécifiez pas cette option lorsque vous demandez votre format de pixel, OS X vous donnera
kCGLOGLPVersion_Legacy
ouNSOpenGLProfileVersionLegacy
respectivement. Et cela vous limite à OpenGL 2.1 fonctionnalités.Si vous utilisez un niveau supérieur, cadre, alors vous aurez besoin de consulter votre référence de l'API. Toutefois, sachez que sur OS X, vous devez avoir un de base profil de contexte pour accéder à quelque chose de plus récent que OpenGL 2.1.
glGetString(GL_VERSION)
retourne4.1 ATI-1.38.3
pour moi, mais encore, il refuse de compiler#version 130
shaders. Il semble accepter#version 330
shaders, mais je ne sais pas encore comment mettre à jour mon code du shader à 330...je suppose que je vais avoir une question totalement distincte?glGetString
wrapper.Utiliser la librairie OpenGL GLFW la dernière version 3.0.4...
juste après l'initialisation de glfw init
après l'initialisation de glfwInit() inclure ces 4 lignes de code. ces quatre ligne de code va vous permettre d'utiliser la version la plus haute charge de l'OS. sur mac son opengl 4.1
puis de créer votre fenêtre.
assurez-vous qu'il a été créé.
puis rendez-vous de la fenêtre actuelle à l'aide de la suite.
après vous rendre votre cureent fenêtre de tous les thats gauche à faire est de vous créer une boucle principale.
assurez-vous que vous includ glfwPollEvents(); dans la boucle, ce qui rend possible l'utilisation de la fermer bouton pour quitter la fenêtre. si vous avez de la difficulté à compiler la bibliothèque dans xcode juste moi un message ici et je vous enverrai une copie de la bibliothèque.
J'ai lutté longtemps sur ce, et a finalement réussi sur l'utilisation d'un glsl version prise en charge par la carte graphique.
Il y a plusieurs points principaux:
par exemple, comme l'a souligné @kanthonye, si vous utilisez glfw, et utiliser la version d'opengl 3.2, ces lignes sont nécessaires:
<OpenGL/OpenGL.h>
et<OpenGL/gl3.h>
et puis il a travaillé.http://support.apple.com/kb/HT5942
le titre du site est "les ordinateurs Mac: OpenCL et OpenGL dans OS X Mavericks -
Apprendre l'OpenGL et OpenCL versions qui sont pris en charge par votre ordinateur sous OS X Mavericks."
Si vous êtes à l'aide de LWJGL (de la version 2.90), il y a une légère chasse aux sorcières dans la javadoc de l'en-tête de ContextAttribs:
Si vous utilisez SDL comme votre haut niveau d'API il y a un certain nombre de choses que vous devez faire pour obtenir 4.1 prise en charge.
Tout d'abord assurez-vous d'avoir SDL2 2.0.1 (ou plus tard, je suppose). Par exemple à l'aide d'infusion:
Deuxièmement, vous avez besoin de dire précisément ce SDL à la demande d'un profil de base comme
Enfin un clin d'œil à la façon d'un profil de base est demandée sur le mac en a réellement besoin, vous pouvez demander de 3.2 pour obtenir 4.1 (!). Je pense que cela a été corrigé dans la SDL2 référentiel, mais pas encore sorti.