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?

War es hilfreich?

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)

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