Pregunta

lectura de la memoria GLSL 1,40:

  

Fragmento salidas sólo pueden ser flotante,   vectores en coma flotante, firmados o   números enteros o vectores entero sin signo,   o matrices de cualquier éstos. y matrices   estructuras no pueden emitirse. Fragmento   salidas se declaran como en el   ejemplos siguientes:

     

a cabo vec4 FragmentColor;   fuera Luminosidad uint;

El color se define fragmento de escritura gl_FragColor ... ¿es correcto? Alguien podría aclarar mis ideas acerca de estas salidas? Puedo escribir sólo 'FragmentColor' del ejemplo para determinar el color del fragmento? Me puede leer copias de ellos ( 'Luminosidad', por ejemplo)?

¿Fue útil?

Solución

Su ejemplo tiene 2 salidas. Tienen ranuras correspondientes FBO asociados después de vincular el programa GLSL. Puede redirigir utilizando glBindFragDataLocation.

Una vez que se ha activado el shader y OBF encuadernado, todo depende de una máscara sorteo, fijado por glDrawBuffers. Por ejemplo, si usted pasó GL_COLOR_ATTACHMENT0 y GL_COLOR_ATTACHMENT2 allí, eso significaría que el índice de salida 0 irán a la fijación 0, y el índice de producción 1 irían a la fijación del color 2.

Otros consejos

La salida gl_FragColor variable global está en desuso después de la versión GLSL 120. Ahora usted tiene que darle un nombre y tipo por sí mismo, como en el ejemplo. Con respecto a varias salidas, este enlace se da información sobre la asignación: http://www.opengl.org/wiki/GLSL_Objects# Program_linking

(Y encontré que enlazan a: http: // www. opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=270999 )

Espero que esto ayude! : D

Lamentablemente! Veo que kvark dio la información relevante. De todos modos, tal vez usted tiene algo de mi texto también.

quiero dar algunos ejemplos:

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;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top