OpenGL

Página  5  de  8  

5. Integração num Sistema de Janelas

   O OpenGL desenha cenários tridimensionais e bidimensionais para um framebuffer, mas para ser útil num ambiente heterogéneo, o OpenGL deve ser subordinado a um sistema de janelas que aloca e controla os recursos do framebuffer. Na descrição que se segue mostra-se como o OpenGL é integrado no X Window System, mas a integração noutro sistema de janelas (por exemplo, Microsoft Windows NT®) é semelhante.
   O X oferece uma interface procedimental e um protocolo de rede para criação e manipulação das janelas do framebuffer e desenho de certos objectos bidimensionais nestas janelas. O OpenGL é integrado no X através de uma extensão formal do X, designada por GLX. GLX consiste em dezenas de chamadas (com a correspondente codificação para rede) que oferece uma integração compacta e geral do OpenGL em X. Tal como noutras extensões de X (dois exemplos são o Display PostScript e o PEX), há um protocolo específico de rede para os comandos de rendering do OpenGL, encapsulados no X fluxo de bytes.
   OpenGL requer uma região de um framebuffer na qual as primitivas possam ser rendered. Em X, esta região designa-se drawable. Uma janela, do tipo drawable, tem associada um visual que descreve a configuração do framebuffer da janela. Em GLX, o visual é uma estrutura que inclui informação acerca dos buffers de OpenGL que não estão presentes no X (profundidade, acumulação, etc.).
   O X oferece ainda um segundo tipo de drawable, o pixmap, que não é mais do que um framebuffer fora do monitor. GLX oferece um GLX pixmap que corresponde a um X pixmap, mas com buffers adicionais. O GLX pixmap fornece meios, às aplicações OpenGL, para a renderização fora do monitor num buffer criado por software.
   Para utilizar um drawable de OpenGL, o programador tem que criar um contexto tendo como alvo esse drawable. Quando o contexto é criado, é inicializada uma cópia da renderização do OpenGL com a informação visual do drawable. Esta renderização é conceptualmente (se não verdadeiramente) parte do servidor de X, de forma que, uma vez criado, um cliente X pode ligar-se ao contexto do OpenGL e enviar comandos OpenGL (Figura 3). Múltiplos contextos podem ser criados para os mesmos ou diferentes drawable’s. Qualquer drawable de OpenGL pode também ser normalmente usado no desenho de X. As chamadas são fornecidas para sincronizar imagens entre o OpenGL e o X. É da responsabilidade do cliente efectuar esta sincronização caso seja necessária.

Figura 3 - Renderização do OpenGL, Cliente GLX e Servidor X

   Um cliente de GLX que se encontra a correr num computador de cujo subsistema gráfico faz parte, pode evitar passar tokens para o servidor de X. Este direct rendering pode resultar num aumento do desempenho gráfico uma vez que, o overhead da codificação, descodificação e envio do token é eliminado. A renderização directa é suportada embora não seja um requisito do GLX (um cliente pode determinar se o servidor deve ou não fornecer a renderização directa). A renderização directa é possível, uma vez que a sequência entre os comandos de X e de OpenGL não necessita de ser mantida, excepto quando os comandos são explicitamente sincronizados.

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8