Uma Arquitetura de Suporte a Interações 3D ... - DCA - Unicamp
Uma Arquitetura de Suporte a Interações 3D ... - DCA - Unicamp
Uma Arquitetura de Suporte a Interações 3D ... - DCA - Unicamp
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
5.4 Fluxo <strong>de</strong> processamento 117<br />
forem realizadas. Tal função <strong>de</strong>ve conter a chamada do comando <strong>de</strong> ren<strong>de</strong>rização das primitivas<br />
construídas com os buffers <strong>de</strong> vértices da geometria original in<strong>de</strong>xada.<br />
A função <strong>de</strong> chamada <strong>de</strong> retorno não <strong>de</strong>ve chamar nenhuma função <strong>de</strong> modificação do estado<br />
<strong>de</strong> ren<strong>de</strong>rização relacionado ao preenchimento das primitivas, como modificação do estado<br />
GL_POLYGON_MODE do OpenGL ou D<strong>3D</strong>FILLMODE do Direct<strong>3D</strong>, pois isso po<strong>de</strong> interferir<br />
na execução dos sha<strong>de</strong>rs internos chamados pela arquitetura. Também não é permitido modifi-<br />
car os sha<strong>de</strong>rs <strong>de</strong>ntro <strong>de</strong>sta função, mas é possível atribuir valores aos registradores constantes<br />
e texturas utilizadas pelo sha<strong>de</strong>r <strong>de</strong> modificação <strong>de</strong> atributos <strong>de</strong> vértices do estágio 1.<br />
Essa função <strong>de</strong> chamada <strong>de</strong> retorno po<strong>de</strong> ser informada à arquitetura através do comando<br />
SetUpdateCallback() que recebe como parâmetro o ponteiro da função.<br />
• Função <strong>de</strong> chamada <strong>de</strong> retorno a ser utilizada pela arquitetura quando os estágios 3, 4 e 5 forem<br />
executados. Assim como na função <strong>de</strong> chamada <strong>de</strong> retorno dos estágios 1 e 2, tal função <strong>de</strong>ve<br />
conter a chamada do comando <strong>de</strong> ren<strong>de</strong>rização das primitivas construídas com os buffers <strong>de</strong><br />
vértices da geometria original. Essas funções po<strong>de</strong>m modificar quaisquer estados <strong>de</strong> ren<strong>de</strong>riza-<br />
ção, com exceção da modificação dos sha<strong>de</strong>rs que estão sendo utilizados, pois isto é <strong>de</strong>finido<br />
internamente pela arquitetura.<br />
Duas funções <strong>de</strong> chamada <strong>de</strong> retorno po<strong>de</strong>m ser utilizadas: uma para ren<strong>de</strong>rizar geometria<br />
in<strong>de</strong>xada e outra para ren<strong>de</strong>rizar geometria não in<strong>de</strong>xada. Essas funções po<strong>de</strong>m ser informadas<br />
à arquitetura através <strong>de</strong> um comando SetRen<strong>de</strong>rCallback() que recebe como parâmetros<br />
os ponteiros das funções.<br />
A <strong>de</strong>finição das primitivas construídas com os atributos <strong>de</strong> vértices e a <strong>de</strong>cisão sobre o uso <strong>de</strong><br />
geometria in<strong>de</strong>xada são obtidas diretamente através do uso das funções <strong>de</strong> ren<strong>de</strong>rização da API nas<br />
funções <strong>de</strong> chamada <strong>de</strong> retorno. Outros dados <strong>de</strong> entrada utilizados na ren<strong>de</strong>rização dos atributos, tais<br />
como os registradores constantes contendo os parâmetros das funções <strong>de</strong> <strong>de</strong>formação, e conjuntos<br />
<strong>de</strong> texturas contendo dados para modificação dos atributos <strong>de</strong> fragmentos, têm seu uso <strong>de</strong>finido pela<br />
própria aplicação <strong>de</strong>ntro dos sha<strong>de</strong>rs <strong>de</strong> <strong>de</strong>formação <strong>de</strong> vértices ou fragmentos.<br />
5.4.3 Interface <strong>de</strong> saída (GPU-CPU)<br />
Após o estágio <strong>de</strong> modificação <strong>de</strong> atributos <strong>de</strong> fragmentos, os atributos <strong>de</strong> fragmentos são codifi-<br />
cados no formato <strong>de</strong> cor <strong>de</strong> um ou mais buffers <strong>de</strong> ren<strong>de</strong>rização não visíveis.<br />
A forma como os atributos serão codificados como cores po<strong>de</strong> ser modificada <strong>de</strong> acordo com a<br />
precisão numérica dos resultados requerida. Por exemplo, cada valor po<strong>de</strong> ser armazenado em uma<br />
componente <strong>de</strong> cor <strong>de</strong> 32 bits em formato <strong>de</strong> ponto flutuante. Assim, as três componentes <strong>de</strong> um vetor