Jump to content

OpenGL (Português)

From ArchWiki
Status de tradução: Este artigo é uma tradução de OpenGL. Data da última tradução: 2026-07-21. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.

De acordo com a Wikipédia:

O OpenGL (Open Graphics Library) é uma API (Application Programming Interface) livre utilizada na computação gráfica para desenvolvimento de aplicativos gráficos, ambientes 3D, jogos, entre outros.

Saiba mais em Khronos.

O desenvolvimento do OpenGL foi encerrado em 2017 para dar lugar ao Vulkan, a API de "nova geração" que oferece uma maior performance em dispositivos (hardware) mais recentes.

Instalação

Para executar aplicativos que fazem uso do OpenGL, você precisará instalar o(s) driver(s) correto(s) para o seu dispositivo (seja para a CPU ou para a GPU).

Dica
  • Para AMD (e ATI), é recomendado o uso dos drivers de código aberto a menos que haja um bom motivo para optar pelos proprietários.
  • Para NVIDIA, o driver proprietário é recomendado para placas gráficas mais recentes que a série Kepler (NVE0/GKXXX), e para uma melhor performance em geral.
Nota
  • Dispositivos Gen N da Intel não se referem à geração da CPU, e sim da geração da GPU, que são gerações diferentes.
  • Para encontrar a família de uma placa gráfica AMD (e ATI), veja a lista de GPUs da AMD e seus recursos.
  • Para encontrar o codinome de uma placa gráfica NVIDIA, veja a lista de codinomes do projeto Nouveau.
  • Ao contrário dos repositórios da comunidade do Fedora Linux, o Arch Linux não distribui variantes "freeworld" para codecs de vídeo e áudio protegidos por patentes; os pacotes padrão são compilados com todos os codecs relevantes, como os "freeworld" do Fedora.

O Mesa é uma implementação de código aberto do OpenGL, continuamente atualizado para dar suporte à mais recente especificação do OpenGL. Ele possui uma coleção de drivers de código aberto para gráficos Intel, AMD (anteriormente ATI) e GPUs da NVIDIA. O Mesa também providencia rasterizadores por software, como o llvmpipe.

Existem dois pacotes do Mesa, cada um com um conjunto distinto de drivers:

  • mesa é o pacote sempre "em dia" do Mesa que inclui a maior parte dos drivers modernos para dispositivos recentes:
    • r300 : para as GPUs da AMD: Radeon R300, R400, e R500.
    • r600 : para as GPUs da AMD: Radeon R600 até a série Northern Islands. Oficialmente suportado pela AMD.
    • radeonsi : para as GPUs da AMD da série Southern Islands e posteriores. Oficialmente suportado pela AMD.
    • nouveau : Nouveau é o driver de código aberto para GPUs da NVIDIA.
    • virtio_gpu : um driver virtual de GPU para virtio. Pode ser usado com monitores de máquina virtual (VMMs) baseados no QEMU, como o KVM ou o Xen.
    • vmwgfx : para GPUs virtuais VMware.
    • i915 : para dispositivos Gen 3 da Intel.
    • crocus : para dispositivos de Gen 4 a Gen 7 da Intel.
    • iris : para dispositivos de Gen 8 em diante da Intel. Oficialmente suportado pela Intel.
    • zink : um driver Gallium utilizado para executar o OpenGL em cima do Vulkan.
    • d3d12 : para o suporte do OpenGL 3.3 em dispositivos que só suportam D3D12 (i.e., WSL).
    • softpipe : um rasterizador por software e um driver Gallium de referência.
    • llvmpipe : um rasterizador por software que usa o LLVM para a geração de código x86 JIT e utiliza a técnica de multi-threading.
  • mesa-amber é o pacote legado do Mesa que inclui os drivers clássicos (não Gallium3D) para hardware mais antigo:
    • i830 : para dispositivos Gen 2 da Intel. O mesmo binário que i965.
    • i915 : para dispositivos Gen 3 da Intel. O mesmo binário que i965.
    • i965 : para dispositivos de Gen 4 a Gen 11 da Intel. Oficialmente suportado pela Intel.
    • radeon : para as GPUs Radeon R100 da AMD. O mesmo binário que r200.
    • r200 : para as GPUs Radeon R200 da AMD.
    • nouveau_vieux : para GPUs da NVIDIA da série NV04 (Fahrenheit) até NV20 (Kelvin).
    • swrast : um rasterizador por software legado.
Nota Ao usar o Mesa, o driver correto deve ser selecionado automaticamente, portanto nenhuma configuração é necessária uma vez instalado o pacote.
  • nvidia-utils é o driver proprietário para GPUs da NVIDIA, que inclui uma implementação do OpenGL.

Verificação

Para verificar sua instalação do OpenGL, você pode utilizar o eglinfo do mesa-utils, que deve mostrar uma saída do tipo (com valores diferentes dependendo do seu setup, claro):

$ eglinfo -B
Wayland platform:
EGL API version: 1.5
EGL vendor string: Mesa Project
EGL version string: 1.5
EGL client APIs: OpenGL OpenGL_ES
OpenGL core profile vendor: Intel
OpenGL core profile renderer: Mesa Intel(R) UHD Graphics (CML GT2)
OpenGL core profile version: 4.6 (Core Profile) Mesa 25.1.3-arch1.3
OpenGL core profile shading language version: 4.60
OpenGL compatibility profile vendor: Intel
OpenGL compatibility profile renderer: Mesa Intel(R) UHD Graphics (CML GT2)
OpenGL compatibility profile version: 4.6 (Compatibility Profile) Mesa 25.1.3-arch1.3
OpenGL compatibility profile shading language version: 4.60
OpenGL ES profile vendor: Intel
OpenGL ES profile renderer: Mesa Intel(R) UHD Graphics (CML GT2)
OpenGL ES profile version: OpenGL ES 3.2 Mesa 25.1.3-arch1.3
OpenGL ES profile shading language version: OpenGL ES GLSL ES 3.20

X11 platform:
EGL API version: 1.5
EGL vendor string: Mesa Project
EGL version string: 1.5
EGL client APIs: OpenGL OpenGL_ES
OpenGL core profile vendor: Intel
OpenGL core profile renderer: Mesa Intel(R) UHD Graphics (CML GT2)
OpenGL core profile version: 4.6 (Core Profile) Mesa 25.1.3-arch1.3
OpenGL core profile shading language version: 4.60
OpenGL compatibility profile vendor: Intel
OpenGL compatibility profile renderer: Mesa Intel(R) UHD Graphics (CML GT2)
OpenGL compatibility profile version: 4.6 (Compatibility Profile) Mesa 25.1.3-arch1.3
OpenGL compatibility profile shading language version: 4.60
OpenGL ES profile vendor: Intel
OpenGL ES profile renderer: Mesa Intel(R) UHD Graphics (CML GT2)
OpenGL ES profile version: OpenGL ES 3.2 Mesa 25.1.3-arch1.3
OpenGL ES profile shading language version: OpenGL ES GLSL ES 3.20

Na plataforma X11, o glxinfo também funciona.

Do mesmo pacote, você também pode utilizar o glxgears ou eglgears_x11 (no X11) ou eglgears_wayland (no Wayland) como um teste básico do OpenGL. Ao executar o programa, você deve ver 3 engrenagens rodando.

Alternando entre drivers

Para gráficos Híbridos, veja PRIME.

Nota De acordo com este post no Reddit, você pode usar 2 GPUs de fabricantes diferentes ao mesmo tempo com o PRIME sem nenhum problema.

Mesa

Você pode redefinir o driver utilizado para um aplicativo com a seguinte variável de ambiente:

MESA_LOADER_DRIVER_OVERRIDE=driver

Por padrão, o Mesa procura drivers em /lib/dri/. Você pode ver a lista de drivers instalados com

$ ls /lib/dri/

driver em driver_dri.so é o nome de facto do driver. Se o Mesa não conseguir encontrar o driver especificado, ele irá recorrer ao llvmpipe.

Você também pode usar um rasterizador por software para o OpenGL definindo as seguintes variáveis de ambiente:

LIBGL_ALWAYS_SOFTWARE=true
GALLIUM_DRIVER=driver

driver pode ser softpipe, llvmpipe, ou swr.

Dica Na maior parte dos casos, llvmpipe e swr são mais rápidos que o softpipe.

OpenGL sobre o Vulkan (Zink)

Da documentação do Mesa:

O driver Zink é um driver Gallium que emite chamadas API Vulkan ao invés de visar uma arquitetura de GPU específica. Isso pode ser usado para se obter um suporte completo do OpenGL desktop em dispositivos que suportem apenas o Vulkan.

Caso você esteja sofrendo problemas com os seus drivers padrão de OpenGL (como um bug no RadeonSI, Iris, etc.), você pode tentar usar o driver Zink.

De acordo com esta comparação do Phoronix, a taxa de quadros por segundo (FPS) pode ser menor em alguns aplicativos comparado ao RadeonSI.

Note que o Zink não mais funciona de imediato em sistemas X que usam drivers AMD ou Intel DDX (xf86-video-amdgpu e xf86-video-intel, respectivamente). Os desenvolvedores fonte (upstream) recomendam o uso do driver DDX modesetting(4) genérico. [1] De forma alternativa, para desviar deste problema, você pode utilizar as seguintes variáveis de ambiente:

$ LIBGL_KOPPER_DRI2=1 MESA_LOADER_DRIVER_OVERRIDE=zink

Para usar o Zink no driver proprietário da NVIDIA, use este comando ou similar:

$ env __GLX_VENDOR_LIBRARY_NAME=mesa __EGL_VENDOR_LIBRARY_FILENAMES=/usr/share/glvnd/egl_vendor.d/50_mesa.json MESA_LOADER_DRIVER_OVERRIDE=zink GALLIUM_DRIVER=zink LIBGL_KOPPER_DRI2=1 application

Solução de problemas

Erro gráfico do Mesa em GPU da Lenovo

O Mesa estava utilizando a CPU (llvmpipe) para renderização, o que falhou alguns softwares da interface gráfica. Consertei isso indo às configurações do BIOS e escolhendo Dynamic Graphics em vez do Discrete Graphics (Se estiver usando um outro computador, escolha a opção que o permita alternar entre GPUs ao invés de desativar a GPU integrada). Isso irá acontecer se o driver principal da GPU não estiver instalado mas você espera que a placa integrada funcione. [2]