0

OpenGL を利用してオフスクリーン レンダリングを実行し、クライアントに送り返すことができる画像を動的に生成する Apache2 モジュールを開発しようとしています。

Apache2 は Ubuntu 12.04 マシンで実行されており、クワッドをレンダリングし、OpenGL/GLX を使用してフレームをイメージとしてディスクに保存するテスト モジュールを作成しました。しかし、モジュールがクライアント要求を受信するXOpenDisplay(0)と、セグメンテーション違反でクラッシュします。何がうまくいかないのでしょうか?

編集: 私が見たすべての例は、ピクセルバッファ(PBuffer)の使用について話しています。私の知る限り、これらは非推奨であり、代わりに FBO を使用する必要があります。誰かがコンテキストを作成し、FBO を使用してオフスクリーン レンダリングを実行する方法を説明できますか?

4

1 に答える 1

4

技術的には、OpenGL を使用して、ウィンドウレス、ディスプレイ サーバーのオフスクリーン GPU アクセラレーション レンダリングを行うことは完全に可能ですが、GPU に実際にアクセスするにはディスプレイ環境が必要なため、最近では事実上不可能です。幸いなことに、グラフィックス システムの構造は最近変化しています (ハイブリッド グラフィックス、ディスプレイ コンポジター)。すでに Mesa はオフスクリーン コンテキスト作成モード (OSMesa) を提供していますが、完全な機能にはほど遠い状態です。

したがって、現時点では、コンテキストをバインドできる何らかのディスプレイ サーバー ドローアブルが必要になります。X11 は、Windows と PBuffers の 2 種類の GPU アクセラレーション ドローアブルを提供します。どちらでも FBO を使用できます (PBuffers は技術的には、ルート ウィンドウにマップできず、オフスクリーン キャンバスを持つ Windows です)。最も簡単な方法は、X サーバー上に通常のウィンドウを作成し、それを表示しないことです。多くのチュートリアルで示されているように、OpenGL コンテキストを作成して FBO を作成することもできます。しかしOpenGLが機能するには、使用するXサーバーがアクティブである必要があり、コンソールを保持し、GPUを使用するように構成されている必要があります(理論的には、新しいハイブリッドグラフィックス対応のXサーバーとドライバーを使用すると、ダミーディスプレイデバイスを使用するようにXサーバーを構成し、レンダリングを高速化するためのセカンダリ デバイスとして GPU を使用しますが、これまで試したことはありません)。

于 2014-03-17T13:12:12.727 に答える