Question

La lecture de la spécification GLSL 1.40:

  

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

     

out vec4 FragmentColor;   uint sur la luminosité;

La couleur de fragment est défini par écrit gl_FragColor ... est-ce pas? Quelqu'un pourrait effacer mes idées sur ces sorties? Puis-je écrire que « FragmentColor » de l'exemple pour déterminer la couleur du fragment? Puis-je Relire les (par exemple 'Luminosity')?

Était-ce utile?

La solution

Votre exemple a 2 sorties. Ils ont des fentes de correspondants associés après FBO liaison du programme GLSL. Vous pouvez les rediriger en utilisant glBindFragDataLocation.

Une fois que vous avez activé le shader et lié OIR, tout dépend d'un masque de tirage au sort, fixé 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 à l'accessoire de couleur 2.

Autres conseils

La gl_FragColor variable de la production mondiale est dépréciée après la version 120 GLSL. Maintenant, vous devez lui donner un nom et le 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 j'ai trouvé ce lien à: http: // www. opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=270999 )

Hope this helps! : D

Oups! Je vois que kvark a donné les informations pertinentes. Quoi qu'il en soit, peut-être vous avez quelque chose de mon texte aussi.

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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top