GLSL Fragment-Shader Syntaxfehler
Frage
der folgende einfache Fragment Shader-Code fehlschlägt, mich mit einer uninformativ Meldung im Protokoll zu verlassen:
ERROR: 0:1: 'gl_Color' : syntax error syntax error
void main()
{
vec4 myOutputColor(gl_Color);
gl_FragColor = myOutputColor;
}
, während die folgenden funktioniert:
void main()
{
glFragColor = gl_Color;
}
Das ist unschlüssig, wie in Lighthouse3D Tutorial gl_Color ist sagte ein vec4 zu sein. Warum kann ich es nicht zuordnen zu einem anderen vec4?
Lösung
Versuchen Sie normale Zuordnung. Wie folgt aus:
void main()
{
vec4 myOutputColor = gl_Color;
gl_FragColor = myOutputColor;
}
Edit:
Die zweite Antwort ist ebenso richtig wirklich, aber es gibt keine Notwendigkeit, das vec4 () Konstruktor zu verwenden, da beide vom gleichen Typ sind. Wenn Sie lässt hatte sagen eine (r, g, b, w) tuple könnten Sie schreiben:
vec4 myOutputColor = vec4(r, g, b, w);
oder
// assuming myRgbColor is a vec3
vec4 myOutputColor = vec4(myRgbColor, w);
etc
Andere Tipps
Aparrently sollten Sie etwas andere Syntax verwenden
(siehe OpenGL Shading Language Specification )
vec4 myOutputColor = vec4(gl_Color);
gl_FragColor = myOutputColor;
diese im Gegensatz zu Ihrer Probe stellt auf meinem mashine (Windows, Nvidia-Karte)