OpenGL (Русский)
Из Википедии:
- OpenGL (Open Graphics Library) — спецификация, определяющая платформонезависимый (независимый от языка программирования) программный интерфейс для написания приложений, использующих двумерную и трёхмерную компьютерную графику.
Подробнее на сайте Khronos.
Разработка OpenGL прекращена в 2017 году. В качестве современной замены предлагается Vulkan — низкоуровневый API, позволяющий достичь более высокой производительности на современном оборудовании.
Установка
Для работы OpenGL-приложений нужно установить драйвер, подходящий для вашего оборудования (видеокарты или процессора).
- Для AMD (и ATI) рекомендуется использовать открытые драйверы, если у вас нет веских причин использовать проприетарные.
- Для видеокарт NVIDIA поколений более новых чем Kepler (NVE0/GKXXX) рекомендуется использовать проприетарный драйвер, так как он имеет в целом более высокую производительность.
- Обозначение графики Intel GenN опирается не на поколения процессоров, а на поколения GPU, которые не совпадают с поколениями процессоров.
- Узнать семейство графики AMD (и ATI) можно на странице Wikipedia:ru:Список графических процессоров AMD.
- Узнать архитектуру и семейство графики NVIDIA можно на странице nouveau wiki с кодовыми именами.
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.
- amdgpu-pro-oglpAUR — проприетарный драйвер для графики AMD.
Проверка
Для проверки работоспособности 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.
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)
- 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 в коде требуется загрузчик функций, подробнее на сайте Khronos.
OpenGL Hardware Database
GPUInfo предоставляет информацию о комбинациях видеокарт и драйверов, поддерживаемых расширениях, возможностях и т.д. Эта информация полезна для проверки совместимости / соответствия определённого оборудования как с OpenGL, так и с Vulkan.