Modern OpenGL (3)

Modern OpenGL é um paradigma de engenharia de software e de utilização da API OpenGL iniciado em 2008, 11 de agosto, com a publicação da versão maior 3 da especificação do OpenGL. Sucede praticamente todo o paradigma de engenharia e utilização antes usado por esta API que, até então, carregava toda uma visão de como eram feitos desenhos computacionais que remetia à década de 1980, pois o OpenGL nasceu da IrisGL, que uma API de programação que se destacou naquela década.

Apesar do OpenGL 2 já haver tido trago as shaders, e consigo, programabilidade no pipelining de desenho computacional a um mundo limitado pelo “fixed pipelining”, ainda existia uma mistura e/ou atuação híbrida entre esses dos modais de pipelining, sendo que o fixed pipelining era limitado por ser fixo e tinha um custo muito mais elevado de desenho pois oferecia apenas um caminho de renderização para todas as situações faceadas pelos desenvolvedores de gamewares e outros softwares de alto desempenho em CAD 2D e/ou 3D.

Visando criar um divisor de águas neste problema, o consórcio Khronos Group, responsável pelo OpenGL, começou a trabalhar numa forma de reestruturação desta API. Tal evento ficou conhecido como Longs Peak, possivelmente o mais frustante episódio da história do OpenGL, pois a falta de consenso entre as instituições que integram o consórcio (tais como AMD, NVidia e Intel) levou a dissolução da tão esperada reestruturação. Acabou reduzida a poucos implementos de recursos e instauração deste paradigma que estamos tratando: o Modern OpenGL.

OpenGL sempre foi e parece que ainda é um alienígena da programação. A história do OpenGL incidente em situações ele conseguiu ser ruim porque era bom e ser bom porque era ruim. Esteve afrente das escolhas de futuro em muitas oportunidades mas foi pisoteado por ser futurista de mais, a destacar pelo seu design icônico de API que permite que qualquer um, em poucas linhas de código, chegue “perto do metal” ou para que se perca tentando fazer coisas, fáceis em outras APIs, que eram complexas no OpenGL. Em suma, OpenGL assumiu algumas decisões certas no momento errado.

OpenGL 3.0

A principal característica do OpenGL 3.0 foi a introdução do conceito de deprecação de funções, parâmetros e recursos, abandonando o jeito 1980 de desenhar representações geométricas.

A versão 3.0 instaura:

  • A manipulação estrita de recursos do OpenGL através de handles, invalidando qualquer forma de aquisição e manipulação fora dos meios unicamente oferecidos.
  • Deprecação de imagem composta por mapas de cores indexadas (também conhecidas como “paletizadas”) pelo sistema de janelas do OS. Uma imagem paletizada é composta por um mapa de índices contra uma tabela adjunta de cores, frequentemente num alcance de 256 tons. Assim sendo, toda a parafernália tratando de cores indexadas está removido em favor das cores empacotadas, onde cada pixel contém os valores únicos de cada canal de cor RGBA; também conhecido como raster.
  • Introdução da versão 1.30 da GLSL, a linguagem de shading do OpenGL e Vulkan, deprecando as versões 1.20 e 1.10.
  • Deprecação de toda a conjuntura de desenho onde as vértices e suas características eram submetidas ao driver em encapsulação das funções glBegin e glEnd. Tal remoção agora favorece o uso de bufferização de dados e submissão optimizada destes.
  • Deprecação de processamento de vértices e fragmentos por função fixa. Agora é obrigatório o uso de ao menos 2 módulos de pipelining: um para o estágio de vértice e outro para estágio de fragmento/pixel.
  • Deprecação de display lists.
  • Introdução de renderização condicional.
  • Introdução de frame buffer object e render buffer object.
  • Introdução de vertex array object.
  • Introdução de formato combinado de depth e stencil.
  • Introdução de transform feedback.

OpenGL 3.1

A principal característica do OpenGL 3.1 foi a remoção de funções, parâmetros e recursos então somente marcados como deprecados na versão imediatamente anterior, 3.0.

A versão 3.1 instaura:

  • Introdução da versão 1.40 da GLSL.
  • Introdução de desenho instanciado.
  • Introdução de uniform buffer object.
  • Introdução de texture buffer object.

OpenGL 3.2

A principal característica do OpenGL 3.2 foi a separação da API em dois perfis: “core” e “compatibility”.

A versão 3.2 instaura:

  • Introdução de múltiplos perfis: core, contendo um subconjunto remanescente da limpeza da API, e compatibility, que traz de volta suporte a recursos e funções deprecadas e removidas.
  • Introdução da versão 1.50 da GLSL.
  • Introdução de desenho de elementos com base mutável de vértices.
  • Introdução da geometry shader, um terceiro módulo de pipelining.
  • Introdução de fence sync objet.

OpenGL 3.3

[A ser continuado]

Discuta sobre este e outros conteúdos e temas na Assembleia Dos Fóruns Da SIGMA.
WP Radio
WP Radio
OFFLINE LIVE