Frage

Lesen der GLSL 1.40 -Spezifikation:

Fragmentausgänge können nur schwimmende, schwimmende Punktvektoren, signierte oder nicht signierte Ganzzahlen oder ganzzahlige Vektoren oder Arrays von diesen sein. Matrizen und Strukturen können nicht ausgegeben werden. Fragmentausgänge werden wie in den folgenden Beispielen deklariert:

out vec4 fragmentcolor; Aus Uint Luminosity;

Die Fragmentfarbe ist definiertes Schreiben von GL_FRAGColor ... ist es richtig? Jemand könnte meine Vorstellungen über diese Ausgaben klären? Darf ich nur 'FragmentColor' des Beispiels schreiben, um die Fragmentfarbe zu bestimmen? Darf ich sie zurücklesen (zum Beispiel "Luminosität")?

War es hilfreich?

Lösung

Ihr Beispiel hat 2 Ausgänge. Sie haben entsprechende FBO -Slots nach dem GLSL -Programmverbinden zugeordnet. Sie können sie verwenden glBindFragDataLocation.

Sobald Sie den Shader und den gebundenen FBO aktiviert haben, hängt alles von einer Ziehmaske ab, die von festgelegt wurde glDrawBuffers. Zum Beispiel, wenn Sie bestanden haben GL_COLOR_ATTACHMENT0 und GL_COLOR_ATTACHMENT2 Dort würde dies bedeuten, dass der Ausgabeindex 0 zum Anhang 0 und zum Ausgabindex 1 zum Farbanhang 2 wird.

Andere Tipps

Die globale Ausgangsvariable GL_FRAGCOLOR ist nach GLSL Version 120 veraltet. Jetzt müssen Sie ihm einen Namen und eingeben, wie in Ihrem Beispiel. In Bezug auf mehrere Ausgänge erhalten Sie in diesem Link Informationen über die Zuordnung: http://www.opengl.org/wiki/glsl_objects#program_linking

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

Hoffe das hilft! :D

Hoops! Ich sehe, dass Kvark die relevanten Informationen gegeben hat. Wie auch immer, vielleicht haben Sie auch etwas aus meinem Text heraus.

Ich möchte einige Beispiele geben:

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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top