2009-11-14 11 views
9

lectura de la memoria GLSL 1,40:shaders Fragmento: variables de salida

salidas Fragmento sólo se puede flotador, vectores en coma flotante, firmados o enteros sin signo o vectores enteros, o matrices de cualquier éstos. Las matrices y las estructuras no se pueden generar. Las salidas de fragmento se declaran como en el siguientes ejemplos:

vec vec FragmentColor; out uint Luminosidad;

El color del fragmento se define escribiendo gl_FragColor ... ¿es correcto? ¿Alguien podría aclarar mis ideas sobre estos resultados? ¿Puedo escribir solo 'FragmentColor' del ejemplo para determinar el color del fragmento? ¿Puedo leerlos ('Luminosity' por ejemplo)?

Respuesta

4

Su ejemplo tiene 2 salidas. Tienen ranuras de FBO correspondientes asociadas después del enlace del programa GLSL. Puede redirigirlos usando glBindFragDataLocation.

Una vez que haya activado el sombreador y el FBO vinculado, todo dependerá de una máscara de dibujo, establecida 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.

0

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; 
} 
16

El gl_FragColor variable de la producción mundial está en desuso después de GLSL versión 120. Ahora tiene que darle un nombre y escribirlo usted mismo, como en su ejemplo. En cuanto a varias salidas, este enlace se da información sobre la asignación: http://www.opengl.org/wiki/GLSL_Objects#Program_linking

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

Espero que esto ayude! : D

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

Cuestiones relacionadas