• Aucun résultat trouvé

Research Background

Dans le document The DART-Europe E-theses Portal (Page 22-26)

O OpengGL (Open Graphics Library) é uma API (Application Programming Interface) que define um conjunto de recursos e funcionalidades apropriados para o desenvolvimento de aplicações interactivas em 2D ou em 3D. Foi concebido em 1992 pela Silicon Graphics Inc. e tornou-se a API de referência nesta área. Nesta altura, foi constituída um consórcio independente denominado de OpenGL ARB (Architecture Review

Board) formado por várias marcas representativas da indústria. Este consórcio é responsável pelo

desenvolvimento e/ou aprovação de melhoramentos à especificação, mantendo esta API o mais actual possível de forma a dar resposta às cada vez mais exigentes necessidades do mercado [59].

O OpengGL acelera imenso o desenvolvimento de aplicações ao incorporar um vasto conjunto de funcionalidades ao nível da geometria (linhas, polígonos, NURBS, etc), iluminação, rendering, shaders, mapeamento de texturas, cor e transparência, anti-aliasing, blending, etc. Estas funcionalidades poderão ser

1 Red, Green, Blue; cores primárias da teoria aditiva da cor, relacionada com o fenómeno luminoso (utilizada para visualização em televisores e monitores LCD, projectores, etc.)

2

Cyan, Magenta, Yellow; cores primárias da teoria subtractiva da cor, relacionada com tintas e pigmentos (utilizada para impressão). O K é um canal separado com tinta preta (blacK), de modo a poder imprimir o preto sem ter de recorrer à junção das 3 cores primárias (CMY).

extremamente úteis a áreas tão vastas como a animação 3D, jogos de computador, realidade virtual,

broadcast, CAD/CAM/CAE, visualização médica, ou apresentações multimédia.

Esta tecnologia possui uma óptima qualidade e desempenho, uma vez que tem suporte directo ao nível do GPU (Graphics Processing Unit) da vasta maioria das placas gráficas (Nvidia, ATI, Matrox, etc). Este facto constitui uma enorme vantagem, uma vez que, como é sabido, actualmente os GPUs das placas gráficas são superiores em capacidade de processamento gráfico do que os próprios CPUs dos computadores (embora não tão versáteis).

O OpenGL é actualmente o standard da indústria nesta área, sendo suportado em quase todas as plataformas de hardware e sistemas operativos existentes. Pode ser utilizado em linguagens de programação como o C, o C++ ou o Java, entre outras. Ao nível do desenvolvimento de software, existem várias vantagens na utilização desta API:

Standard de Indústria - a única API gráfica aberta e multi-plataforma

• Estável - as adições à especificação são bem controladas, garantindo sempre a retro-compatibilidade. • Fiável e portátil - os resultados obtidos são os esperados, independentemente do sistema operativo ou

hardware utilizado.

• Evolutiva - permite novas inovações através do recurso a extensões.

Escalável - pode ser utilizada em equipamentos de consumo até às workstations mais potentes. Fácil de usar - permite a abstracção do hardware na fase de programação.

• Bem documentada - existe imensa bibliografia e código fonte disponível, tornando esta API extremamente acessível a todos os níveis.

Extensões

Apesar do OpenGL ARB (Architecture Review Board) definir uma especificação completa da API, qualquer marca possui total liberdade para lhe acrescentar novas funcionalidades através do conceito de extensões. Por exemplo, através de extensões, determinadas tarefas podem ser executadas em hardware dedicado, ou no CPU do computador, ou em ambos, tornando esta tecnologia extremamente flexível. Ao utilizar este mecanismo de extensões, as marcas de placas gráficas podem diferenciar os seus produtos da concorrência, ao desenvolver determinadas extensões que permitam novas funcionalidades com aceleração gráfica directamente no GPU.

A API do OpenGL está em evolução permanente. Revisões à especificação ocorrem regularmente, e o mecanismo de extensões tem aqui um papel muito importante. À medida que determinada extensão vai ganhando aceitação e relevância, é considerada a sua inclusão na especificação formal do OpenGL. Este processo permite que o OpenGL se desenvolva de uma forma controlada e, simultaneamente, inovadora.

Shaders

A versão 2.0 do OpenGL1 tem como principal novidade a inclusão da OpenGL Shading Language (GLSL)2 e das respectivas APIs para criar, gerir e utilizar esses mesmos shaders programáveis. Esta linguagem baseada em ANSI C apesar de já existir desde a especificação 1.4 do OpenGL, não fazia parte integrante da mesma, funcionando como uma extensão.

A tendência da Indústria em termos de hardware gráfico tem sido a de substituir funcionalidades fixas (Figura 15) pela possibilidade de programação, nomeadamente nas áreas de processamento de vértices e de fragmentos (vertex, fragment)3. Esta linguagem foi concebida com o intuito de permitir que os programadores possam definir o processamento que ocorre nestas etapas da pipeline do OpenGL. É a este código, unidades independentemente compiláveis escritas nesta linguagem que damos o nome de shaders. Um programa é um conjunto de shaders compilados e interligados [60].

Figura 15 – Esquema da funcionalidade fixa da pipeline do OpenGL 4

Qualquer placa gráfica actual da NVidia, da ATI ou mesmo da Intel possui esta versatilidade, permitindo correr no GPU processos que anteriormente teriam de ser executados pelo CPU principal. A vantagem em termos de performance torna-se muito clara. De facto, o aumento das capacidades de processamento paralelo das placas gráficas consegue suplantar claramente as do processador principal no que diz respeito a quase todo o tipo de processamento gráfico, visto que este, com a sua utilização muito mais abrangente, não se encontra optimizado para a especificidade aqui requerida. No contexto desta tese, esta característica vem

1 http://www.opengl.org/documentation/specs/version2.0/glspec20.pdf

2 http://oss.sgi.com/projects/ogl-sample/registry/ARB/GLSLangSpec.Full.1.10.59.pdf 3

O processamento de vértices refere-se à alteração da geometria dos modelos OpenGL, enquanto que o processamento de fragmentos está relacionado com o processamento da cor de cada pixel.

4

permitir libertar o processamento do CPU para executar determinadas tarefas que não seja possível implementar no GPU ou cujo tipo de cálculo não se adeqúe tanto a este.

Dans le document The DART-Europe E-theses Portal (Page 22-26)