2009-11-14 4 views
9

lecture de la spécification GLSL 1,40:Fragment shaders: les variables de sortie

sorties Fragment ne peuvent être flotteur, vecteurs à virgule flottante, signés ou entiers non signés ou des vecteurs de nombres entiers, ou des tableaux de tout ceux-ci. Les matrices et les structures ne peuvent pas être éditées. Fragment les sorties sont déclarées comme dans les exemples suivants :

out vec4 FragmentColor; out uint Luminosité;

La couleur du fragment est définie en écrivant gl_FragColor ... est-ce exact? Quelqu'un pourrait-il clarifier mes idées sur ces résultats? Puis-je écrire seulement 'FragmentColor' de l'exemple pour déterminer la couleur du fragment? Puis-je les relire («Luminosité» par exemple)?

Répondre

4

Votre exemple a 2 sorties. Ils ont des slots FBO correspondants associés après la liaison du programme GLSL. Vous pouvez les rediriger en utilisant glBindFragDataLocation. Une fois que vous avez activé le shader et le FBO lié, tout dépend d'un masque de dessin, défini par glDrawBuffers. Par exemple, si vous avez passé GL_COLOR_ATTACHMENT0 et GL_COLOR_ATTACHMENT2 là, cela signifierait que l'indice de sortie 0 ira à la pièce jointe 0, et l'indice de sortie 1 irait à la fixation de la couleur 2.

0

je veux donner quelques exemples:

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

La gl_FragColor variable de la production mondiale est dépréciée après GLSL version 120. Maintenant, vous devez lui donner un nom et un type par vous-même, comme dans votre exemple. En ce qui concerne plusieurs sorties, ce lien vous donne des informations sur la mise en correspondance: http://www.opengl.org/wiki/GLSL_Objects#Program_linking

(Et je trouve ce lien à: http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=270999)

Hope this helps! : D

Ooops! Je vois que kvark a donné l'information pertinente. Quoi qu'il en soit, vous avez peut-être aussi quelque chose dans mon texte.

Questions connexes