Frage

Ich versuche, ein GLSL Beispiel , aber ich kann es nicht.

Der Fehler ist in der Linie glGetShaderiv(vShader, GL_COMPILE_STATUS, &status); wo das Programm beendet. vShader ist die Datei vPhong.glsl .

Der Fehler zurückgegeben:

0(18) : error C0000: syntax error, unexpected $undefined at token "<undefined>"
0(18) : error C0501: type name expected at token "<undefined>"

Ich habe ‚‘ installiert und GLEW und Glut und ihre lib-Dateien verwiesen. Ich habe mein Programm glewInit'ed.

Das Programm ist in der Lage, die .glsl-Dateien zu finden.

Die seltsame Sache ist, dass ich im Stande bin, ein vorkompilierte GLSL-Demo und auch a href kompiliert und ausgeführt <=" http://www.cs.unm.edu/~angel/BOOK / INTERACTIVE_COMPUTER_GRAPHICS / FIFTH_EDITION / PROGRAMME / WINDOWS_BINARIES / GLSL /“rel = "nofollow noreferrer"> das Projekt auf meinem PC. Die „Initialisierungen“ in dem Nicht-Arbeitsprogramm und dies ist die gleiche.

Ich habe versucht, die defekte Quelle in das erfolgreiche Projekt zu kopieren, um zu sehen, ob es etwas in den Projekteinstellungen war der Fehler verursacht, aber leider nicht der Fall war. So ist der Fehler in der C ++ Code zu sein scheint, nicht das Projekt.


PROGRESS:

Auf meinem Windows 7-Maschine bekam i "Zugriffsverletzung", wenn durch Visual Studio ausgeführt wird. Das Programm gerade aufgehört zu arbeiten, wenn ich es lief „allein“. Auf einer Windows XP-Maschine bekam ich eine abgefangene Ausnahme.

erhielt ich keine Fehler oder Warnungen (abgesehen von einer Warnung, dass fopen unsicher ist), wenn ich das Programm zusammengestellt.

Visual Studio markiert die Linie vShader = glCreateShader(GL_VERTEX_SHADER); als Quelle des Fehlers.

Hinzufügen glewInit(); die obigen Fehler behoben.

War es hilfreich?

Lösung

Es gab zwei Fehler in der Programm :

Erstens:

glLinkProgram(program);
glGetShaderiv(program, GL_LINK_STATUS, &status);

Die letzte Zeile glGetProgramiv(program, GL_LINK_STATUS, &status); hätte sein sollen.

Auch die fopen, die in den Shader-Dateien lesen sollten mit rb als Argument statt nur r verwendet wurden.

Setzt glGetShaderiv mit glGetProgramiv und das Hinzufügen von glewInit() Fest einer meiner ursprünglichen Fehler.

Ändern des Arguments fopen den Shader-Fehler behoben.

Andere Tipps

Diese Fehler kommen aus dem GLSL-Compiler, nicht die C ++ Compiler. In Zeile 18 in einem gewissen Shader, haben Sie etwas, das den GLSL-Compiler ist verwirrend; wahrscheinlich zufällig Müll oder nicht druckbare Zeichen. Eine einfache Möglichkeit, dies zu tun ist, angeben lange eine Länge (oder keine Länge überhaupt) für Ihre Shader-Quelle, und hat keinen NUL-Terminator am Ende der Zeichenfolge

Ich bin mir nicht sicher, wie Sie, dass Code kompiliert. Es wird mit GL-API, die nicht direkt in der Windows SDK ist. Alle die Shader-APIs sind in dieser Kategorie.

Für den Zugriff auf sie auf Fenster, Sie in der Regel die Erweiterung Mechanismus bereitstellen, durch WGL verwenden müssen, oder eine Erweiterung Wrapper verwenden.

[Bearbeiten hinzufügen]

So ... mit glew init aus dem Weg! Shader Kompilierung ein Buildprotokoll, wenn zu bauen Fehler (aus diesem Tutorial ):

GLint blen = 0; 
GLsizei slen = 0;

glGetShaderiv(ShaderObject, GL_INFO_LOG_LENGTH , &blen);       

if (blen > 1)
{
 GLchar* compiler_log = (GLchar*)malloc(blen);

 glGetInfoLogARB(ShaderObject, blen, &slen, compiler_log);
 cout << "compiler_log:\n", compiler_log);
 free (compiler_log);
}

Die Fehlermeldung bedeutet in der Regel gibt es eine Art von Fehlern in der Shader-Programm-Datei selbst. Nach meiner Erfahrung ist es so etwas wie ein unerwartetes Zeichen am Anfang oder Ende der Datei gewesen. Versuchen Sie Kopieren und Einfügen der Text von dieser URL in Notepad oder gedit und dann speichern Sie die Datei.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top