2009-11-14 10 views
9

die GLSL 1.40 Spezifikation Lesen:Fragment-Shader: Ausgangsvariablen

Fragment Ausgänge nur Schwimmer sein kann, Gleitkomma-Vektoren, signierte oder nicht signierte ganze Zahlen oder Integer-Vektoren, oder Arrays von beliebigen davon. Matrizen und Strukturen können nicht ausgegeben werden. Fragment Ausgänge werden wie in den folgenden Beispielen erklärt:

aus vec4 FragmentColor; out uint Leuchtkraft;

Die Fragmentfarbe ist definiert, gl_FragColor schreiben ... ist es richtig? Jemand könnte meine Vorstellungen über diese Ergebnisse klären? Darf ich nur 'FragmentColor' des Beispiels schreiben, um die Fragmentfarbe zu bestimmen? Darf ich sie zurücklesen (zum Beispiel "Leuchtkraft")?

Antwort

4

Ihr Beispiel hat zwei Ausgänge. Sie haben entsprechende FBO-Slots nach GLSL-Programmverknüpfung zugeordnet. Sie können sie mit glBindFragDataLocation umleiten.

Sobald Sie den Shader und gebundenen FBO aktiviert haben, hängt alles von einer Zeichnungsmaske ab, die durch glDrawBuffers festgelegt wird. Zum Beispiel übergeben, wenn Sie GL_COLOR_ATTACHMENT0 und GL_COLOR_ATTACHMENT2 gibt, die diesen Ausgangsindex bedeuten würde 0 auf die Befestigung gehen 0 und Ausgabe Index 1 auf den Farb Befestigung gehen würde 2.

0

Ich möchte einige Beispiele nennen:

void add(in float a, in float b, out float c) 
{ 
    //you can not use c here. only set value 
    //changing values of a and b does not change anything. 
    c = a + b; 
} 

void getColor(out float r, out float g, out float b) 
{ 
    //you can not use r, g, b here. only set value 
    r = gl_FragColor.r; 
    g = gl_FragColor.g; 
    b = gl_FragColor.b; 
} 

void amplify(inout vec4 pixelColor, in value) 
{ 
    //inout is like a reference 
    pixelColor = pixelColor * value; 
} 
16

Die globale Ausgangsgröße gl_FragColor nach GLSL ist veraltet Version 120. Jetzt müssen Sie es einen Namen geben und selbst eingeben, wie in Ihrem Beispiel. In Bezug auf mehrere Ausgänge, Link gibt Ihnen Informationen über das Mapping: http://www.opengl.org/wiki/GLSL_Objects#Program_linking

(Und ich fand diesen Link an: http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=270999)

hoffe, das hilft! : D

Hoppla! Ich sehe, dass kvark die relevanten Informationen gab. Wie auch immer, vielleicht hast du auch etwas aus meinem Text.

Verwandte Themen