Capturing Data From Graphics Hardware
Unfortunatelly, this page is available only in Portuguese.
Para capturar os valores diretamente da saída dos processadores de vértices é utilizada a extensão
NV_Transform_Feedback. Para os de fragmentos, a extensão
EXT_Framebuffer_Object.
A extensão NV_Transform_Feedback foi introduzida pela NVIDIA na sua família de placas GeForce8. Esta extensão fornece um novo modo de execução à OpenGL, chamado
transform feedback, que salva os atributos dos vértices das primitivas processadas pelo programa. Os valores destes atributos são escritos na memória da placa, no transform
feedbackbuffer. É possível capturar a saída de processadores de vértices, de geometria e de funções fixas de processamento de vértices. Esta captura ocorre antes do processo de clipping.
Query objects são utilizados para indicar para a aplicação quando os resultados da captura já estão disponíveis e quantas primitivas foram processadas e escritas no buffer. Para ler os dados do buffer é utilizada a função
glMapBuffer, que atribui estes valores à um vetor de
GLfloats. A extensão também provê métodos para descartar o que foi rasterizado no modo transform feedback, de forma que, é possível capturar os atributos dos vértices sem renderizar a cena.
A utilização desta função pode ser dividida em duas etapas principais: (i) operações realizadas ao iniciar o programa OpenGL e (ii) operações realizadas a cada renderização da cena. A Figura 1 e a Figura 2 apresentam a expansão detalhada destas duas etapas, mostrando as operações de cada uma delas e as respectivas funções OpenGL.
Esta extensão permite definir outros destinos de renderização que não os buffers providos à OpenGL pelo sistema de janelas. Estes novos destinos são chamados framebuffer-attachable images. Estas
framebuffer-attachable images são anexadas ao framebuffer OpenGL como se fossem um buffer padrão (color, depth e stencil). Quando uma
framebuffer-attachable images é anexada ao framebuffer, ela é usada como fonte e destino das operações de fragmentos, assim, é possível fazer renderização offline.
Texturas são utilizadas como
framebuffer-attachable images e o uso é similar ao uso tradicional de texturas. Como é possível ter mais de uma
framebuffer-attachable images, esta extensão também introduziu a noção de
framebuffer objects, que é um
GLObject que contém, entre outras informações, o conjunto de imagens do framebuffer.
Assim como para a extensão NV_Transform_Feedback, a utilização desta função pode ser dividida nas etapas: (i) operações realizadas ao iniciar o programa OpenGL e (ii) operações realizadas a cada renderização da cena. A expansão detalhada destas duas etapas e respectivas funções OpenGL é apresentada nas Figura 3 e 4.
