OpenGL
wikipedia OpenGL から:
- OpenGL (Open Graphics Library) は、グラフィックスハードウェア向けの2次元/3次元コンピュータグラフィックスライブラリである。SGI 社内で自社の CG ワークステーション向けにクローズドに策定された API 仕様が改良されて公開されています。
詳しくは、Khronos をご覧ください。
インストール
OpenGL を使用するアプリケーションを実行するには、ハードウェア (GPU または CPU) に適したドライバをインストールする必要があります。
Mesa は、最新の OpenGL 仕様をサポートするオープンソースの OpenGL 実装です。Intel、AMD (旧 ATI)、NVIDIA の GPU 向けのオープンソースドライバを提供し、ソフトウェア ラスタライザ(llvmpipe など)も備えています。
Mesa には 2 つのパッケージがあり、それぞれ異なるドライバを含んでいます。
- mesa は、最新のハードウェア向けの Mesa パッケージで、以下のようなモダンなドライバーを含みます。
r300: AMD Radeon R300、R400、R500 GPU 向け。r600: AMD Radeon R600 から Northern Islands までの GPU 向け (AMD 公式サポート)radeonsi: AMD Southern Island 以降の GPU 向け (AMD 公式サポート)nouveau: NVIDIA 向けオープンソースドライバー Nouveauvirtio_gpu: QEMU ベースの VMM (KVM や Xen など) 向けの仮想 GPU ドライバ。vmwgfx: VMware の仮想 GPU 向け。i915: Intel Gen 3 GPU 向け。crocus: Intel Gen 4 Gen 7 GPU 向け。iris: Intel Gen 8 以降の GPU 向け (Intel 公式サポート)zink: Vulkan 上で OpenGL を実行するための Gallium ドライバー。d3d12: WSL など、D3D12 のみをサポートするデバイス向けの OpenGL 3.3 ドライバー。swrast: レガシーなソフトウェアラスタライザ。Mesa 22.0.0 で廃止されたが、ソースコードには残存 (ArchLinux では 24.1.1 で依然利用可能[1])softpipe: ソフトウェアラスタライザかつ Gallium のリファレンスドライバ。llvmpipe: LLVM を使用した x86 JIT コード生成によるマルチスレッド対応のソフトウェアラスタライザ。
- mesa-amber は、古いハードウェア向けのクラシック(Gallium3D 非対応)ドライバーを含むパッケージです。
i830: Intel Gen 2 GPU 向け(i965と同じバイナリ)i915: Intel Gen 3 GPU 向け(i965と同じバイナリ)i965: Intel Gen 4 Gen 11 GPU 向け(Intel 公式サポート)radeon: AMD Radeon R100 GPU 向け(r200と同じバイナリ)r200: AMD Radeon R200 GPU 向け。nouveau_vieux: NVIDIA NV04(Fahrenheit)NV20(Kelvin)GPU 向け。swrast: レガシーなソフトウェアラスタライザ。
- nvidia-utils : NVIDIA GPU 向けのプロプライエタリ (独自) ドライバ (OpenGL 実装を含む)
- amdgpu-pro-oglpAUR : AMD GPU 向けの プロプライエタリドライバ
検証
OpenGL のインストールを確認するには、mesa-utils の eglinfo を使用できます。実行すると、環境に応じた異なる値を含む以下のような出力が表示されるはずです。
$ eglinfo -B
Wayland platform: EGL API version: 1.4 EGL vendor string: Mesa Project EGL version string: 1.4 EGL client APIs: OpenGL OpenGL_ES OpenGL compatibility profile vendor: Mesa Project OpenGL compatibility profile renderer: i915 (chipset: Pineview M) OpenGL compatibility profile version: 2.1 Mesa 23.1.5 OpenGL compatibility profile shading language version: 1.20 OpenGL ES profile vendor: Mesa Project OpenGL ES profile renderer: i915 (chipset: Pineview M) OpenGL ES profile version: OpenGL ES 2.0 Mesa 23.1.5 OpenGL ES profile shading language version: OpenGL ES GLSL ES 1.0.16 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: Mesa OpenGL core profile renderer: llvmpipe (LLVM 15.0.7, 128 bits) OpenGL core profile version: 4.5 (Core Profile) Mesa 23.1.5 OpenGL core profile shading language version: 4.50 OpenGL compatibility profile vendor: Mesa OpenGL compatibility profile renderer: llvmpipe (LLVM 15.0.7, 128 bits) OpenGL compatibility profile version: 4.5 (Compatibility Profile) Mesa 23.1.5 OpenGL compatibility profile shading language version: 4.50 OpenGL ES profile vendor: Mesa OpenGL ES profile renderer: llvmpipe (LLVM 15.0.7, 128 bits) OpenGL ES profile version: OpenGL ES 3.2 Mesa 23.1.5 OpenGL ES profile shading language version: OpenGL ES GLSL ES 3.20
X11プラットフォームでは、glxinfo も使用できます。
同じパッケージには、基本的な OpenGL テストとして eglgears_x11 や glxgears(X11上)、または eglgears_wayland(Wayland 上)を使用することもできます。プログラムを実行すると、3つの回転するギアが表示されるはずです。
ドライバの切り替え
ハイブリッドグラフィック については、PRIME を見て下さい。
Mesa
以下の 環境変数 を使用することで、使用されているドライバーを上書きすることができます。
MESA_LOADER_DRIVER_OVERRIDE=driver
デフォルトでは、mesa は /lib/dri/ にあるドライバを検索します。
$ ls /lib/dri/
driver は _dri.so を除いたドライバ名です。もし失敗したら、llvmpipe にフォールバックします。
また、以下の 環境変数 を設定することで、OpenGL ソフトウェアラスタライザードライバを使用することができます。
LIBGL_ALWAYS_SOFTWARE=true GALLIUM_DRIVER=driver
driver は softpipe, llvmpipe, swr のどれか1つです。
OpenGL over Vulkan (Zink)
もし、何らかの問題(RadeonSI や Iris のバグなど)が発生した場合は、Zink を使用してみてください。
AMD RX 6700 XT では、[2] によると、RadeonSI と比較してゲームによって FPS が 58-105% になるそうです。
2021-11-30 現在、最新のドライバ 495.44 と mesa-gitAUR の master ブランチでも多くのアプリケーションが NVIDIA GPU で動きません。Copper DRI 拡張(アップストリーム未対応)と組み合わせると、RTX 2070 では Tomb Raider の平均 FPS が 20% 高くなります。
$ env __GLX_VENDOR_LIBRARY_NAME=mesa MESA_LOADER_DRIVER_OVERRIDE=zink GALLIUM_DRIVER=zink %app%
開発
OpenGL をコードで使うには、関数ローダーが必要です。詳しくは、Khronos を参照してください。
OpenGL ハードウェアデータベース
GPUInfo は、ユーザーが報告した GPU/ドライバ の組み合わせ、サポートされる拡張機能、能力などを提供します。