GLSL fragment-shader-syntax Fehler
folgende einfache fragment-shader-code schlägt fehl, und mir bleibt eine sinnlose Meldung in der log:
ERROR: 0:1: 'gl_Color' : syntax error syntax error
void main()
{
vec4 myOutputColor(gl_Color);
gl_FragColor = myOutputColor;
}
während der folgenden Werke:
void main()
{
glFragColor = gl_Color;
}
Dieser verwirrt sich mein Geist, wie in Lighthouse3D tutorial gl_Color sagte, ein vec4. Warum kann ich nicht zuordnen, es zu einem anderen vec4?
- Ist die Fehlermeldung wirklich authentisch? Ist es normal/erwartet, für Sie verpassen die Spalte/Zeile Anzahl, und auch das "syntax-Fehler" text zweimal?
- ja, die Fehlermeldung ist authentisch (habe ich weggelassen, die ein Unterstrich in den Beispielen, daher auch der edit). Ich weiß nicht wirklich, was ist normal/erwartet mit GLSL info protokolliert werden; in den meisten Fällen die Position des Fehlers nicht angezeigt, nur die problematischen Variablen / Funktions-Namen. (Die Umgebung ist OS X, xcode, OpenGL 2.0-mit einem ATI-Treiber v1.5)
- bumpbump* Hey slacker! Hat es funktioniert? 😉
- sicher Tat. Ich zögerte, deren Antwort werde ich akzeptieren, weil beide gut funktionieren, aber ich landete mit Ihnen für die Kürze / die menschliche Lesbarkeit.
- Die zweite Antwort ist genau so richtig wirklich, aber es gibt keine Notwendigkeit zu verwenden die vec4 () - Konstruktor, da beide vom gleichen Typ sind. Wenn Sie hatte, sagen wir, dass a (r,g,b,w) Tupel können Sie schreiben: vec4 myOutputColor = vec4(r, g, b, w);
- Sie müssen eine explizite Typ-Konvertierungen – kein casting in GLSL. Nur int, float implizite Konvertierungen sind erlaubt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen normale Zuweisung. Wie diese:
Edit:
Die zweite Antwort ist genau so richtig wirklich, aber es gibt keine Notwendigkeit zu verwenden die vec4 () - Konstruktor, da beide vom gleichen Typ sind. Wenn Sie hatte, sagen wir, dass a (r,g,b,w) Tupel können Sie schreiben:
oder
etc
Aparrently sollten Sie verwenden leicht unterschiedliche syntax,
(siehe OpenGL Shading Language-Spezifikation )
diese im Gegensatz zu Ihrem Beispiel kompiliert einwandfrei auf meinem ATM (Windows, Nvidia-Karte)