Jump to content

OpenGL (Русский)

From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи OpenGL. Дата последней синхронизации: 30 июня 2025. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Из Википедии:

OpenGL (Open Graphics Library) — спецификация, определяющая платформонезависимый (независимый от языка программирования) программный интерфейс для написания приложений, использующих двумерную и трёхмерную компьютерную графику.

Подробнее на сайте Khronos.

Разработка OpenGL прекращена в 2017 году. В качестве современной замены предлагается Vulkan — низкоуровневый API, позволяющий достичь более высокой производительности на современном оборудовании.

Установка

Для работы OpenGL-приложений нужно установить драйвер, подходящий для вашего оборудования (видеокарты или процессора).

Совет:
  • Для AMD (и ATI) рекомендуется использовать открытые драйверы, если у вас нет веских причин использовать проприетарные.
  • Для видеокарт NVIDIA поколений более новых чем Kepler (NVE0/GKXXX) рекомендуется использовать проприетарный драйвер, так как он имеет в целом более высокую производительность.
Примечание:

Mesa — это реализация OpenGL с открытым исходным кодом, поддерживающая актуальную спецификацию OpenGL. Она содержит коллекцию открытых драйверов для графики Intel, AMD (ранее ATI) и NVIDIA. Mesa также предоставляет программные растеризаторы, такие как llvmpipe.

Есть два пакета с разными наборами драйверов Mesa:

  • mesa содержит свежие драйверы для современного оборудования:
    • r300 : для графики AMD Radeon R300, R400 и R500.
    • r600 : для графики AMD Radeon от R600 до Northern Islands. Официально поддерживается компанией AMD.
    • radeonsi : для графики AMD Southern Island и более новых. Официально поддерживается компанией AMD.
    • nouveau : Nouveau — открытый драйвер для графики NVIDIA.
    • virtio_gpu : драйвер virtio, который может использоваться в виртуальных машинах QEMU (вроде KVM или Xen).
    • vmwgfx : для виртуальных машин VMware.
    • i915 : для графики Intel Gen 3.
    • crocus : для графики Intel от Gen 4 до Gen 7.
    • iris : для графики Intel Gen 8 и более новых. Официально поддерживается компанией Intel.
    • zink : транслирует вызовы OpenGL в вызовы Vulkan.
    • d3d12 : OpenGL 3.3 для устройств, поддерживающих только D3D12 (то есть WSL).
    • softpipe : программный растеризатор и эталонная реализация Gallium-драйвера.
    • llvmpipe : программный растеризатор, который является многопоточным и использует LLVM для генерации JIT-кода x86.
  • mesa-amber содержит старые (не Gallium3D) драйверы для старого оборудования:
    • i830 : для графики Intel Gen 2. Тот же файл, что и i965.
    • i915 : для графики Intel Gen 3. Тот же файл, что и i965.
    • i965 : для графики Intel от Gen 4 до Gen 11. Официально поддерживается компанией Intel.
    • radeon : для графики AMD Radeon R100. Тот же файл, что и r200.
    • r200 : для графики AMD Radeon R200.
    • nouveau_vieux : для графики NVIDIA от NV04 (Fahrenheit) до NV20 (Kelvin).
    • swrast : устаревший программный растеризатор.
Примечание: При использовании Mesa правильный драйвер будет выбран автоматически; после установки пакета дополнительные настройки не требуются.
  • nvidia-utils — проприетарный драйвер для графики NVIDIA, который предоставляет реализацию OpenGL.

Проверка

Для проверки работоспособности OpenGL можно использовать команду eglinfo из пакета mesa-utils — она должна вывести что-то подобное:

$ 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

В X11 также можно использовать glxinfo.

Также для базового тестирования OpenGL можно использовать команды eglgears_x11 или glxgears (для X11) или eglgears_wayland (для Wayland). После запуска одной из них должно появиться окно с тремя вращающимися шестерёнками.

Переключение между драйверами

При использовании гибридной графики смотрите статью PRIME.

Примечание: Согласно этому сообщению на Reddit, можно одновременно использовать две видеокарты от разных производителей с помощью PRIME без каких-либо проблем.

Mesa

Чтобы переопределить драйвер для определённого приложения, запустите его, указав название нужного драйвера в переменной окружения:

MESA_LOADER_DRIVER_OVERRIDE=драйвер

По умолчанию Mesa ищет драйверы в /lib/dri/. Список доступных драйверов можно посмотреть командой:

$ ls /lib/dri/

Файлы в этом каталоге имеют имена вида драйвер_dri.so, где драйвер это собственно название драйвера. Если Mesa не сможет найти нужный драйвер, будет использоваться llvmpipe.

Чтобы использовать программный растеризатор OpenGL, укажите следующие переменные окружения:

LIBGL_ALWAYS_SOFTWARE=true
GALLIUM_DRIVER=драйвер

драйвер может быть softpipe, llvmpipe или swr.

Совет: В большинстве случаев llvmpipe и swr быстрее чем softpipe.

OpenGL поверх Vulkan (Zink)

Из документации Mesa:

Zink — это Gallium-драйвер, который использует Vulkan API вместо того, чтобы ориентироваться на конкретную архитектуру GPU. С его помощью можно получить полную поддержку OpenGL на устройствах, поддерживающих только Vulkan.

Если вы испытываете проблемы с обычным драйвером OpenGL (например, баг в RadeonSI, Iris и т.д.), вместо него можно попробовать использовать Zink.

Согласно этому бенчмарку Phoronix, средняя частота кадров может быть ниже в некоторых приложениях по сравнению с RadeonSI.

Чтобы использовать Zink на проприетарном драйвере NVIDIA, используйте примерно такую команду:

$ 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 приложение

Разработка

Примечание: Этот раздел предназначен для разработчиков, которые создают программы, использующие OpenGL. Обычным пользователям этот раздел не нужен.

Для использования OpenGL в коде требуется загрузчик функций, подробнее на сайте Khronos.

OpenGL Hardware Database

GPUInfo предоставляет информацию о комбинациях видеокарт и драйверов, поддерживаемых расширениях, возможностях и т.д. Эта информация полезна для проверки совместимости / соответствия определённого оборудования как с OpenGL, так и с Vulkan.