# Programação com OpenGL/APIs, Bibliotecas e acronimos
## Panorama

Tem várias tecnologias e siglas que cercam o OpenGL. Veja como eles são organizados, e quais são as escolhas.
(As tecnologias apresentadas aqui, podem exister em qualquer um dos nível baixo, não apenas da direita para esquerda).
Nivel-Baixo -> Nivel-Alto :
| Placa gráfica | OpenGL | WGL (for Windows) | EGL | GLEW | GLUT | SFML Graphics, ClanLib... (2D) |
| Placa gráfica | OpenGL ES | GLX (for X11) | EAGL (iOS) | Glee | GLFW | Irrlicht, OGRE, Unity, (3D) |
| Placa gráfica | WebGL | CGL/AGL (for OS X) | | | SDL, SFML | OpenSG, OpenScenegraph... |
| | | | | | Escolha por aqui :) | Escolha por aqui :) |
* A base destas tecnologias são a OpenGL, a OpenGL ES é um OpenGL restrito as plataformas embarcadas (smartphones...). O OpenGL ES 2.0 em particular é baseado na OpenGL 2.0 mas não foi incluido os recursos da OpenGL 1.x, A GLSL (Linguagem dos Shading) é uma linguagem de programação para OpenGL >=2.0 e executam na GPU. a WebGL é baseada na OpenGL 2.0 e foi disponibilizado em 2011 para navegador atráves da linguagem JavaScript.
* Em cima dela, temos algumas implementações OpenGL essencial ao sistema (WGL, GLX, etc.). Ele provém padrões e funções glXxx que integram o OpenGL na tela do sistema operacional.
* O EGL deveria prover uma interface única para sistemas embarcados, uma implementação da OpenGL ES, para os Androids. a EGL ainda é uma requisitada no código de plataformas especificas, e ofertadas no contexto de baixo nivel para gráficos e controle de texturas. O iPhone da Apple usa um versão modificada e estendida chamada EAGL, você pode trabalhar com ele, mas por causa disto algumas partes especificas de seu programa não será portável.
* A GLEW e GLee provem uma ajuda chamar extensões e funções básicas do OpenGL em C. você pode escolher qualquer uma, sem implicar em muitas alterações em seu código, ou ainda nenhum e usar #define GL_GLEXT_PROTOTYPES para uso no básico.
* O GLUT, assim como a GLFW, SDL e SFML, oferecem um verdadeira plataforma independente para colocar o OpenGL na tela ( exatamente pelo C). Normalmente elas vem com suporte para teclados, controles e possivelmente oferecerão outros recursos, você pode escolher pelo nivel de portabilidade, diretamente para programação em OpenGL, para versões especificas do OpenGL, estas tecnologias tem suporte completo ao OpenGL, um suporte completlo para o OpenGL ES e EGL está surgindo.
'Este livro usa estas camadas
* Bibliotecas que são baseada em OpenGL provem recursos de alto nível, como controle de sprite de jogos 2D (SFML Graphics, ClanLib...), ou um motor 3D completo(Irrlicht, Ogre...). Eles podem proteger os usuários do OpenGL, ou apenas cuidar alguns pequenos detalhes(ex. apenas dar acesso a GLSL). Nós podem entre distinguir os motores de renderização, scenegraphs, e um maior abstração de motor do jogo, Você escolherá dependo do tipo de aplicação que você está trabalhando (2D, 3D, scene, game...).
Comparação entre o GLEW e o GLee (a partir de 09/2011):
* O GLee supporta o 3.0 enquanto o GLEW supporta a 4.2
* O GLee não precisa de uma inicializaçaõ como o GLEW precisa (glewInit).
* O Glee não é mantém uma distribuições binárias compatível com o mingw (apenas com o VC++), que nem o GLEW.
* O Glee não faz compilação-cruzada (AFAICS) enquanto o GLEW faz (cf. [[{{FULLBOOKNAME/Instalação/Windows|Instalação do Windows]])
Outras tecnologias:
* O DirectX/Direc3D, da Microsoft é o principal competidor do OpenGL, ele cobre a maior parte das camadas que vimos acima, e incluindo o GLUT/GLFW.
Ao contrário do OpenGL, ele roda apenas nas plataformas do Windows que é uma tecnologia proprietária.
* O OpenCL, é genérica e não gráfica para placas de vídeo com GPU, para programação paralela, CUDA é uma alternativa especifica de propriedade da nVidia.
* O Mesa3D provem uma implementação para várias tecnologias, como EGL, OpenGL, OpenGL ES, assim como uma implementação de software para o OpenGL para que não tem placa de vídeo 3D, e por isto abrange várias camadas, e permite o uso do OpenGL ES no desktop com GNU/Linux (X11).