Ich habe ein Projekt, das GLSL-Shader verwendet.
Dieses Projekt ist so konzipiert, dass es nichts auf stdout ausgibt, es sei denn, etwas läuft schief oder Sie schalten explizit eine zusätzliche Debug-Ausgabe ein.
Wenn eine Shader-Kompilierung fehlschlägt, wird die Log-Länge durch glGetProgramInfoLog
ist >0, und manchmal, wenn sie erfolgreich ist, ist sie >0, und gibt Kompilieren Warnungen stattdessen. Wenn Sie einen Shader haben, der perfekt kompiliert, ist die Protokolllänge <1... so funktioniert es auf meiner NVidia-Karte auf meinem Entwicklungsrechner.
Für meine Sünden, ich auch einige Entwicklung auf einem Laptop mit einem Intel integrierte Grafikkarte zu tun. Der Code läuft gut, aber immer wenn ich einen Shader kompilieren das Protokoll enthält:
"Shader wurde erfolgreich kompiliert, um auf der Hardware zu laufen"
Was sehr ärgerlich ist, da ich jetzt keine Möglichkeit habe, zu entscheiden, ob ich die Zeichenfolge ausdrucken sollte, abgesehen von einer Art von String-Analyse, z. B.:
strstr("successfully",log)
Hoffentlich ist klar, warum das nicht wünschenswert ist. Wie, wenn überhaupt, kann ich sagen, wenn eine Nachricht wert ist, mit der OpenGL-Api ausdrucken?
EDITです:
Wenn ich die glGetShaderiv(shaderobj,GL_COMPILE_STATUS,&err);
dann erhalte ich keine Kompilierwarnungen, sondern nur Fehler.