Wayland というプロジェクトに興味があるかもしれません
http://en.wikipedia.org/wiki/Wayland_%28display_server%29
更新 (2017 年 9 月 17 日):
NVIDIA は最近、ヘッドレス システムで OpenGL を使用する方法を詳述した記事を公開しました。これは、質問で説明されている使用例と非常によく似ています。
要約:
libOpenGL.so
へのリンク とlibEGL.so
libGL.so
の代わりに . (したがって、リンカー オプションは-lOpenGL -lEGL
にする必要がありますeglGetDisplay
に電話する 、次にeglInitialize
EGL を初期化します。eglChooseConfig
に電話する 構成属性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 をターゲットとするアプリケーションを作成でき、ウィンドウ マネージャーやコンポジターさえも存在しなくても実行できます。これを行うには、eglGetDisplay
を呼び出します。 、 eglInitialize
、そして最終的に eglCreateContext
と eglMakeCurrent
、同じことを行う通常の glx 呼び出しの代わりに。
ディスプレイ サーバーなしで動作するための具体的なコード パスはわかりませんが、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 コアを実装していません。
特に、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 ドライバーのみに焦点を合わせているため、探している種類の使用をサポートしていません。