Shader nicht kompiliert werden

Bin ich mir Folgendes Buch "OpenGL Programming Guide 8th Edition". Ich möchte nur das erste Programm eingeführt, das Buch auf meinem Mac.

Es ist Mavericks + Xcode 4.6.1 + Intel HD-graphics 4000. Also das problem ist, das die shader nicht kompiliert werden.

Shader-codes:

#version 410 core

layout(location = 0) in vec4 vPosition;

void
main()
{
    gl_Position = vPosition;
}

Und die Fehlermeldung ist:

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

Habe ich versucht version 420/400/330, keiner von Ihnen arbeitet.

Durch die Art und Weise, das Programm verwendet die neuesten glew 1.10(http://glew.sourceforge.net), und ich fand, dass ich eingestellt habe "glewExperimental = GL_TRUE;" vor dem Aufruf glewInit. Ansonsten "glGenVertexArray" ist ein NULL-Zeiger. So Frage ich mich, vielleicht glew nicht unterstützt Mavericks?

  • Haben Sie sich für das core-Profil für Ihr rendering? Ich glaube nicht, verwenden glew, ich benutze nur glfw zum erstellen der rendering-Kontext und Fenster, und die standard-Header. Unter MacOS habe ich nicht wirklich brauchen, glew, weil macos hat alle Funktionen und Konstanten, die das system/Treiber unterstützt.
  • Ein weiterer Hinweis, weil ich vergaß zu erwähnen, MacOS hat nur die legacy und die 3_2Core Profil, das Sie auswählen können. Aber für 3_2Core es gibt höchsten ein Profil der system - /gpu-unterstützt, das ist rückwärts kompatibel zu 3_2Core.
  • Danke, aber wie "wählen Sie die core-Profil für Ihr rendering"?
  • Das hängt davon ab, was Sie verwenden, um erstellen Sie Ihre rendering-Kontext. (GLUT, Native MacOS-Funktionen, glwf, QT, ...)
  • Ich Wette, Sie können entfernen layout(location = 0) und #version 410 core und es wird funktionieren.
  • Es funktioniert nicht, das habe ich versucht. Der shader-compiler beschwert sich, dass die "in" ist unbekannt.
  • was passiert, wenn Sie es ändern, um attribute
  • Hinzugefügt glut tag, um Ihre Frage aus Ihrem Kommentar. Wie ich nicht glut auf macos kann ich nur vermuten, dass glutInitDisplayMode(GLUT_3_2_CORE_PROFILE) wäre der richtige Befehl. Wahrscheinlich haben Sie bereits verwenden glutInitDisplayMode mit anderen Optionen, dann müssen Sie GLUT_3_2_CORE_PROFILE mit ODER so, es würde wahrscheinlich so Aussehen glutInitDisplayMode(GLUT_3_2_CORE_PROFILE | GLUT_RGBA | GLUT_DOUBLE);
  • varying und attribute sind veraltet, also beim lernen von modernen OpenGL (3.2+) Sie sollten nicht mehr verwendet werden.
  • Ja, das ist wahr, ich wollte, um sicherzustellen, dass die shader kompiliert irgendwie
  • Ja, es funktioniert! Dies ist zwar nicht dokumentiert, in glutInitDisplayMode ' s manual. Danke, t.niese!
  • Hm... wie ändere ich t.niese, Kommentare zu beantworten?
  • Ich erstelle eine Antwort aus der es später. Ich schrieb es als Kommentar, denn es war mehr raten durch Erfahrung dann wissen, ob es wirklich funktioniert 😉

InformationsquelleAutor Mark Zhang | 2014-01-05
Schreibe einen Kommentar