Modern OpenGL (3)

modern-opengl-sigma-sigmaco-www.sigmaco.org
70 / 100

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]

Responses