OpenGL

提供: ArchWiki
2025年3月18日 (火) 09:38時点におけるKgx (トーク | 投稿記録)による版 (→‎OpenGL over Vulkan (Zink): 同期)
ナビゲーションに移動 検索に移動

wikipedia OpenGL から:

OpenGL (Open Graphics Library) は、グラフィックスハードウェア向けの2次元/3次元コンピュータグラフィックスライブラリである。SGI 社内で自社の CG ワークステーション向けにクローズドに策定された API 仕様が改良されて公開されています。

詳しくは、Khronos をご覧ください。

インストール

OpenGL を使用するアプリケーションを実行するには、ハードウェア (GPU または CPU) に適したドライバをインストールする必要があります。

ヒント:
  • AMD(および ATI)の場合、特別な理由がない限りオープンソースドライバーの使用が推奨されます。
  • NVIDIA の場合、Kepler(NVE0/GKXXX) シリーズより新しいカードではプロプライエタリ (独自) ドライバーを使用するのが推奨されます。一般的にパフォーマンスも向上します。
ノート:

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 向けオープンソースドライバー Nouveau
    • virtio_gpu : QEMU ベースの VMM (KVMXen など) 向けの仮想 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 : レガシーなソフトウェアラスタライザ。
ノート: Mesa を使用する場合、適切なドライバーは自動的に選択されるため、パッケージをインストールするだけで追加設定は不要です。
  • nvidia-utils : NVIDIA GPU 向けのプロプライエタリ (独自) ドライバ (OpenGL 実装を含む)

検証

OpenGL のインストールを確認するには、mesa-utilseglinfo を使用できます。実行すると、環境に応じた異なる値を含む以下のような出力が表示されるはずです。

$ 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_x11glxgears(X11上)、または eglgears_wayland(Wayland 上)を使用することもできます。プログラムを実行すると、3つの回転するギアが表示されるはずです。

ドライバの切り替え

ハイブリッドグラフィック については、PRIME を見て下さい。

ノート: reddit post によると、異なるベンダーの2つの GPU を同時にうまく動作させることができるそうです。

Mesa

以下の 環境変数 を使用することで、使用されているドライバーを上書きすることができます。

MESA_LOADER_DRIVER_OVERRIDE=driver

デフォルトでは、mesa は /lib/dri/ にあるドライバを検索します。

$ ls /lib/dri/

driver_dri.so を除いたドライバ名です。もし失敗したら、llvmpipe にフォールバックします。

また、以下の 環境変数 を設定することで、OpenGL ソフトウェアラスタライザードライバを使用することができます。

LIBGL_ALWAYS_SOFTWARE=true
GALLIUM_DRIVER=driver

driversoftpipe, llvmpipe, swr のどれか1つです。

ヒント: これを書いている時点では、llvmpipe と swr は softpipe より高速です。

OpenGL over Vulkan (Zink)

Mesa ドキュメントより:

Zink ドライバーは、特定の GPU アーキテクチャをターゲットとするのではなく、Vulkan API 呼び出しを発行する Gallium ドライバです。これを使用すると、Vulkan のみをサポートするデバイスでも完全なデスクトップ OpenGL サポートを得ることができます。

デフォルトの OpenGL ドライバ (RadeonSI や Iris など) に問題がある場合は、Zink ドライバーを試すことができます。

この Phoronix ベンチマークによると、一部のアプリケーションでは RadeonSI と比較して平均 FPS が低下する可能性があります。

NVIDIA ドライバで Zink を使用するには、以下のコマンドまたは類似のコマンドを実行してください:

$ 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 application

開発

ノート: このセクションは、OpenGL を使いたい開発者のためのものです。エンドユーザはこのセクションの内容は必要ありません。

OpenGL をコードで使うには、関数ローダーが必要です。詳しくは、Khronos を参照してください。

OpenGL ハードウェアデータベース

GPUInfo は、ユーザーが報告した GPU/ドライバ の組み合わせ、サポートされる拡張機能、能力などを提供します。