2012-03-27 12 views
9

Dai pochi esempi che ho visto in rete, gl_FragData [0] è considerato un buffer di colore. Ho cercato di trovare il significato di ogni indice in gl_FragData e sono imbattuto in questo passaggio da OpenGL libro linguaggio di shading (libro arancione)gl_FragData [0] è sempre un buffer dei colori?

gl_FragData è un array che può essere assegnato i valori che sono scritti in una o più fuori campo buffer . La dimensione di questo array è dipendente dall'implementazione di e può essere interrogata con glGet con la costante simbolica GL_MAX_DRAW_BUFFERS. I buffer fuori schermo che sono modificati come risultato della scrittura di valori in gl_FragData all'interno di uno shader di frammento vengono specificati con glDrawBuffers. Il valore scritto in gl_FragData [0] aggiorna il primo buffer nell'elenco specificato in la chiamata a glDrawBuffers, il valore scritto in gl_FragData [1] aggiorna il secondo buffer nell'elenco e così via.

Non è specificato che il valore 0 di gl_FragData è sempre un buffer di colori. Se c'è una tale specifica, dove posso trovarla? In caso contrario, qual è una pratica normale quando si scrive a gl_FragData?

risposta

9

Non deve essere un buffer di colore per-se. Ma se non è un buffer di colore, allora è niente.

L'array di uscita gl_FragData fa riferimento ai valori impostati da glDrawBuffers. E quando si utilizza un FBO, i valori che si passano a questa funzione possono essere solo GL_COLOR_ATTACHMENTn o GL_NONE. Che, come dicono i nomi, sono buffer di colore.

Quindi è un buffer di colore oppure è GL_NONE.

Per implementazioni GL ES che non offrono glDrawBuffers (cioè che non attuare NV_draw_buffers), esso è definito come indice zero se è stato impostato GL_COLOR_ATTACHMENT0.

E 'sciocco di ES 2.0 per consentire la possibilità di più allegati senza in realtà fornire un modo per rendere a più di uno di loro ...

+0

suppongo glDrawBuffers non è disponibile in OpenGL ES. In tal caso l'FBO la chiama implicitamente ad un certo punto? – Jayesh

+0

'glDrawBuffers' (non confondere con' glDrawBuffer', scelta dei nomi molto intelligente ...) fa parte di ARB_draw_buffers, che è il core OpenGL 2.0. Poiché OpenGL ES 2.0 è definito relativamente a OpenGL 2.0, dovrebbe includere tale funzione. – Damon

+0

@Damon: tecnicamente, ['glDrawBuffer'] (http://www.opengl.org/wiki/GLAPI/glDrawBuffer) è definito in termini di' glDrawBuffers'; è solo una forma più restrittiva (imposta l'indice 0 nel buffer di give e tutti gli altri in 'GL_NONE'). Ma nessuno dei due è in GL ES 2.0. –

Problemi correlati