Frage

Ich habe ein Projekt, das GLSL Shader verwendet.

Dieses Projekt ist nicht darauf ausgelegt, etwas zu drucken, um stdout es sei denn, etwas schief gehen oder Sie auf einige zusätzliche Debug-Ausgabe explizit aktivieren.

Wenn eine Shader-Kompilierung fehl die Scheitlänge von glGetProgramInfoLog gegeben ist> 0, und manchmal, wenn es gelingt, seine> 0, und gibt die Kompilierung Warnungen statt. Wenn Sie einen Shader haben, die perfekt die Protokolllänge kompiliert <1 ... das ist, wie es auf meiner NVidia Karte auf meiner dev Maschine funktioniert.

Für meine Sünden, ich auch einige Entwickler auf einem Laptop mit einer integrierten Intel-Grafikkarte. Der Code läuft gut, aber wenn ich ein Shader kompilieren tun das Protokoll enthält:

"Shader wurde erfolgreich ausgeführt auf Hardware kompiliert"

Welche ist sehr ärgerlich, da ich jetzt keine Möglichkeit, zu entscheiden, ob ich aus der Zeichenfolge gedruckt werden soll, abgesehen von einer Art von String-Analyse, zum Beispiel:

strstr("successfully",log)

Hoffentlich seine offensichtlich, warum das nicht wünschenswert ist. Wie, wenn überhaupt, kann ich feststellen, ob eine Nachricht wert ist, die OpenGL-API verwenden den Ausdruck?

EDIT:

Wenn ich glGetShaderiv(shaderobj,GL_COMPILE_STATUS,&err); verwenden dann kann ich Warnungen kompilieren lassen nicht nur Fehler.

War es hilfreich?

Lösung

Hier gehen Sie:

glGetShaderiv(shaderobj,GL_COMPILE_STATUS,&err);
if(!err) { /* now print out the error log */ }

Dies ist der einzige Kompilierung Status Sie erhalten; es gibt keine tragbare Art, wie ich gefunden habe, um festzustellen, ob Sie Warnungen haben. (Die Kompilierung Protokoll kann von voll sein, was auch immer die Umsetzung kümmert sich in sie zu setzen, einschließlich der Benachrichtigung des Erfolgs.)

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