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?

Avez-vous sélectionné le profil de base pour le rendu? Je n'utilise pas glew, je ne l'utilise glfw pour créer le contexte de rendu et de fenêtre, et les en-têtes standard. Sur MacOS, je n'ai pas vraiment besoin de glew parce que macos a toutes les fonctions et les constantes du système/pilote prend en charge.
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