Shader ne peut pas être compilé
Je suis la suite du livre "OpenGL Programming Guide 8e Édition". Je tiens juste à exécuter le premier programme présenté dans le livre sur mon Mac.
C'est Mavericks + Xcode 4.6.1 + Intel HD graphics 4000. Le problème est donc, le shader ne peut pas être compilé.
Shader codes:
#version 410 core
layout(location = 0) in vec4 vPosition;
void
main()
{
gl_Position = vPosition;
}
Et le message d'erreur est:
Shader compilation failed: ERROR: 0:1: '' : version '410' is not supported
ERROR: 0:1: '' : syntax error #version
ERROR: 0:3: 'layout' : syntax error syntax error
J'ai essayé la version 420/400/330, aucun d'entre eux travaille.
Par ailleurs, le programme utilise les dernières glew 1.10(http://glew.sourceforge.net), et j'ai trouvé que je dois mettre "glewExperimental = GL_TRUE;" avant d'appeler glewInit. Sinon "glGenVertexArray" est un pointeur NULL. Donc, je suis peut-être vous demandez-vous à glew ne prend pas en charge Mavericks?
Une note supplémentaire parce que j'ai oublié de mentionner, MacOS uniquement a la
legacy
et la 3_2Core
profil que vous pouvez sélectionner. Mais pour 3_2Core
il rendements les plus élevés de profil, le système/gpu supporte et qui est compatible avec les 3_2Core
.Merci, mais comment "sélectionnez le profil de base pour le rendu"?
Ajouté
glut
tag à votre question de votre commentaire. Comme je n'ai pas utiliser glut sur macos, je peux deviner que glutInitDisplayMode(GLUT_3_2_CORE_PROFILE)
serait le bon de commande. Probablement que vous utilisez déjà glutInitDisplayMode
avec d'autres options, alors vous devez ajouter GLUT_3_2_CORE_PROFILE
à l'aide de OU, de sorte qu'il serait probablement ressembler à quelque chose comme ceci glutInitDisplayMode(GLUT_3_2_CORE_PROFILE | GLUT_RGBA | GLUT_DOUBLE);
Je vais créer une réponse en dehors de ça plus tard. J'ai juste écrit comme commentaire, car il n'était plus nécessaire de deviner par l'expérience alors de savoir si cela fonctionne vraiment 😉
OriginalL'auteur Mark Zhang | 2014-01-05
Vous devez vous connecter pour publier un commentaire.
MacOS utilise de l'Héritage de Profil en tant que par défaut pour tous les créé contexte OpenGL. À cet effet, par défaut, seuls OpenGL jusqu'à 2.1 et GLSL à 1.20 est pris en charge.
Pour utiliser OpenGL 3.2+ vous avez besoin pour passer à l' Profil de Base. La désignation il y a un peu de confusion, car il stats à seulement 3.2 profil de Base, mais en fait c'3.2 ou version ultérieure (toutes OpenGL profil qui est pris en charge par le système/pilote est compatible avec les 3.2)
Pour glut (dépend de la version de la sursaturation si ça marche), la commande sur MacOS est:
Où
| ...
serait les autres options que vous souhaitez passer àglutInitDisplayMode
.Sur
glew
, normalement vous n'avez pas besoinglew
sur MacOS en raison de la façon dont la couche OpenGL est mis en œuvre dans MacOS. Vous êtes limité aux fonctionnalités OpenGL MacOS offre/expose. Donc, soit les fonctionnalités sont disponibles via les en-têtes de MacOS ou pas. Il y a en-tête serait#include <OpenGL/gl3.h>
où le nom est missleading, cela ne signifie pas seulement OpenGL 3, c'est le même comme avec le contexte.Je vous recommande d'utiliser GLFW il est d'une grande croix de la plateforme de la bibliothèque similaire à
GLUT
mais comme je pense que le meilleur à utiliser.Il vous faudra changer de contexte comme ceci:
t.niese est correct. Cela a réglé mon problème comme un charme. Je suis l'aide de SDL 2 pour la gestion de la fenêtre. J'ai inclus le code requis pour la SDL 2 ci-dessous.
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
Salut les gars, pour une raison que je ne suis pas en mesure d'obtenir
glutInitDisplayMode( GLUT_3_2_CORE_PROFILE );
de travail. Pourriez-vous s'il vous plaît dites-moi ce que je fais mal. Voici mon code. gist.github.com/dhirajbodicherla/11238004Lorsqu'une fenêtre est créée le mode d'affichage actuel est utilisé pour ses paramètres, comme vous l'appelez
glutInitDisplayMode( GLUT_3_2_CORE_PROFILE );
aprèsglutCreateWindow
cette modifications n'ont aucun effet sur le contexte OpenGL de cette fenêtre. Si vous avez besoin de placer avant laglutCreateWindow
. Comme vous avez déjàglutInitDisplayMode
en ligne 85 (dans lecreateGlutWindow
fonction), vous pouvez l'ajouter simplement là, de sorte que vous ne pas écraser ces paramètres:glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH | GLUT_3_2_CORE_PROFILE );
Salut @t.niese merci beaucoup pour la réponse. Mais chaque fois que j'ajoute GLUT_3_2_CORE_PROFILE, xcode, dit identificateur non déclaré. Combien dois-je déclarer sa valeur?
OriginalL'auteur t.niese
Il se peut que votre chauffeur ne prend pas en charge le GLSL version que vous avez besoin. J'ai eu ce problème sur un ordinateur portable avec processeur Intel HD carte sur la nouvelle installation de Ubuntu il y a une année.
Utilisation glGetString pour déterminer quelle version est disponible pour vous:
http://www.opengl.org/sdk/docs/man/xhtml/glGetString.xml.
Par exemple,
Ici vous pouvez trouver sur glewExperimental:
http://www.opengl.org/wiki/Extension_Loading_Library
par défaut, mac os utilise le Héritage Profil prenant en charge OpenGL jusqu'à 2.1 et GLSL 1.20. Vous devez dire à MacOS pour utiliser le Profil de Base, la façon de le faire dépend de la façon dont vous créez votre contexte de rendu.
Cool. J'utilise GLUT qui est fourni avec Xcode. Je suppose que c'est openglut? Dans le livre de l'exemple de programme, il y a 2 lignes qui sont supprimés par moi(car ces 2 fonctions ne sont pas définies dans MacOSX de la bibliothèque glut): "glutInitContextVersion(4, 3)" & "glutInitContextProfile". J'ai effleuré la "surabondance.h", mais n'ai pas trouvé de fonctions similaires alors maintenant, je n'ai aucune idée de comment faire cela...
Je voudrais tout d'abord conseille de passer à GLFW:GlutMainLoop() a de graves défaillances architecturales.
Aussi donner ce tuto génial d'essayer: lien. N'oubliez pas de vérifier que vous êtes d'accord à leur contrat de licence: lien!
OriginalL'auteur user3127029