Domanda

La lettura della specifica GLSL 1.40:

  

uscite frammento può essere solo galleggiante,   vettori in virgola mobile, firmato o   interi o vettori intero senza segno,   o array di qualunque esse. matrici e   strutture non possono essere emessi. Frammento   uscite sono dichiarati nel   seguenti esempi:

     

fuori vec4 FragmentColor;   out uint Luminosità;

Il colore frammento è definita la scrittura gl_FragColor ... è giusto? Qualcuno potrebbe chiarire le mie idee su queste uscite? Posso scrivere solo 'FragmentColor' l'esempio per determinare il colore frammento? Posso leggere indietro ( 'Luminosità' per esempio)?

È stato utile?

Soluzione

Il vostro esempio dispone di 2 uscite. Hanno slot FBO corrispondenti associati dopo il programma GLSL linking. È possibile reindirizzare utilizzando glBindFragDataLocation.

Una volta attivato lo shader e FBO legato, tutto dipende da una maschera di pareggio, fissato dalla glDrawBuffers. Ad esempio, se hai superato GL_COLOR_ATTACHMENT0 e GL_COLOR_ATTACHMENT2 lì, ciò significherebbe che indice della produzione 0 andranno l'allegato 0, e indice di uscita 1 sarebbe andato al fissaggio del colore 2.

Altri suggerimenti

Il gl_FragColor variabile di uscita globale è deprecato dopo GLSL versione 120. Ora dovete dargli un nome e il tipo da soli, come nel tuo esempio. Per quanto riguarda più uscite, questo link fornisce informazioni sulla mappatura: http://www.opengl.org/wiki/GLSL_Objects# Program_linking

(E ho scoperto che puntano a: http: // www. opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=270999 )

Spero che questo aiuti! : D

Ops! Vedo che kvark ha dato le informazioni pertinenti. In ogni caso, forse hai qualcosa di mio testo troppo.

voglio dare alcuni esempi:

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;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top