2009-05-19 16 views
3

die folgenden einfachen Fragment-Shader-Code fehlschlägt, mich mit einer uninformativ Meldung im Protokoll zu verlassen: ERROR: 0:1: 'gl_Color' : syntax error syntax errorGLSL Fragment-Shader Syntaxfehler

void main() 
{ 
    vec4 myOutputColor(gl_Color); 
    gl_FragColor = myOutputColor; 
} 

während die eine folgende Arbeiten:

void main() 
{ 
    glFragColor = gl_Color; 
} 

Diese Boggles meine Meinung, wie in Lighthouse3D's tutorial gl_Color soll ein vec4 sein. Warum kann ich es nicht einem anderen vec4 zuweisen?

+0

Ist die Fehlermeldung wirklich authentisch? Ist es normal/erwartet, dass die Spalten-/Zeilennummer fehlt und zweimal den Text "Syntaxfehler" enthält? – unwind

+0

Ja, die Fehlermeldung ist authentisch (ich habe in den Beispielen einen Unterstrich weggelassen, daher die Änderung). Ich weiß nicht wirklich, was normal/erwartet mit GLSL-Info-Logs ist; In den meisten Fällen wurde der Fehlerort nicht angezeigt, sondern nur der Name der problematischen Variablen/Funktion. (Die Umgebung ist OS X, xcode, OpenGL 2.0 mit einem ATI-Treiber v1.5) – zyndor

+0

* bump * bump * Hey Faulpelz! Hat es funktioniert? ;) – ralphtheninja

Antwort

7

Versuchen Sie die normale Zuweisung. 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 Sie schreiben konnte:

vec4 myOutputColor = vec4(r, g, b, w); 

oder

// assuming myRgbColor is a vec3 
vec4 myOutputColor = vec4(myRgbColor, w); 

etc

4

Aparrently sollten Sie etwas andere Syntax verwenden

(siehe OpenGL Shading Language Specification)

vec4 myOutputColor = vec4(gl_Color); 
gl_FragColor = myOutputColor; 

dies im Gegensatz zu Ihrer Probe kompiliert gut auf meiner Maschine (Windows, Nvidia-Karte)