更新 (2017 年 9 月 17 日):
NVIDIA は最近、ヘッドレス システムで OpenGL を使用する方法を詳述した記事を公開しました。これは、質問で説明されている使用例と非常によく似ています。
要約すれば:
- の代わりに
libOpenGL.so
andにリンクします。(したがって、リンカー オプションはlibEGL.so
libGL.so
-lOpenGL -lEGL
- を呼び出して
eglGetDisplay
から、eglInitialize
EGL を初期化します。
eglChooseConfig
config 属性のEGL_SURFACE_TYPE
後に を付けて呼び出しますEGL_PBUFFER_BIT
。
eglCreatePbufferSurface
、次にeglBindApi(EGL_OPENGL_API);
、そしてeglCreateContext
を呼び出しeglMakeCurrent
ます。
その時点から、通常どおり OpenGL レンダリングを実行すると、ピクセル バッファ サーフェスを好きな場所にブリットできます。この NVIDIA の補足記事には、基本的な例と複数の GPU の例が含まれています。アプリケーションのニーズに応じて、PBuffer サーフェスをウィンドウ サーフェスまたはピックスマップ サーフェスに置き換えることもできます。
以前の編集でこれについてこれ以上調査しなかったことを後悔していますが、まあまあです。より良い答えはより良い答えです。
2010 年の私の回答以来、Linux のグラフィックス スペースには多くの大きな変化がありました。したがって、更新された回答:
現在、nouveau およびその他の DRI ドライバーは、OpenGL ソフトウェアが安定し、一般的に十分に機能するところまで成熟しています。Mesa に EGL API が導入されたことで、Linux デスクトップでも OpenGL および OpenGL ES アプリケーションを作成できるようになりました。
EGL をターゲットとするアプリケーションを作成でき、ウィンドウ マネージャーやコンポジターさえも存在しなくても実行できます。これを行うには、同じことを行う通常の glx 呼び出しの代わりに、、、eglGetDisplay
およびeglInitialize
最終的にeglCreateContext
andを呼び出します。eglMakeCurrent
ディスプレイ サーバーなしで動作するための具体的なコード パスはわかりませんが、EGL は X11 ディスプレイと Wayland ディスプレイの両方を受け入れます。EGL がディスプレイ サーバーなしで動作できることはわかっています。GL ES 1.1、ES 2.0、ES 3.0 (Mesa 9.1 以降を使用している場合)、および OpenGL 3.1 (Mesa 9.0 以降) コンテキストを作成できます。Mesa は (2013 年 9 月現在) まだ OpenGL 3.2 Core を実装していません。
特に、Raspberry Pi と Android では、EGL と GL ES 2.0 (Android < 3.0 では 1.1) がデフォルトでサポートされています。Raspberry Pi では、Wayland はまだ動作しないと思います (2013 年 9 月現在) が、付属のバイナリ ドライバーを使用すると、ディスプレイ サーバーなしで EGL を取得できます。興味があれば、EGL コードは (最小限の変更で) iOS にも移植可能である必要があります。
以下は、以前に受け入れられた古い投稿です。
Linux で X なしで OpenGL コンテキストを開きたいです。それを行う方法はまったくありますか?
Mesa がフレームバッファ ターゲットを提供していると思います。なんらかのハードウェア アクセラレーションを提供する場合、そのような使用をサポートするように適合されたオープン ソース ドライバーが存在するハードウェアでのみ提供されます。
Gallium3D も未熟で、私の知る限り、これに対するサポートはロードマップにもありません。
nvidia カードで動作するソリューションを入手したいと思います。
1つもありません。限目。
NVIDIA は X ドライバーのみを提供しており、Nouveau プロジェクトはまだ未熟であり、現在 X11 ドライバーのみに焦点を当てているため、探している種類の使用をサポートしていません。