GPUベンダー間のOpenGL決定論的レンダリング

私は現在、OpenGLを使って科学画像アプリケーションをプログラミングしています。

私のコード(C ++/OpenGLと単純なGLSL)が別のハードウェア(ATI vs NVidia、さまざまなNVidia世代、さまざまなOSで実行されているとき、OpenGLレンダリング(FBOから取り出されたピクセルの意味で)が完全に決定的であると考えられるかどうかを知りたい)?

もっと正確には、ハードウェア(基本的なGLSLとOpenGL 3.0を実行できる)で自分のコードを実行するたびに、正確な同じピクセルバッファが必要です...

それは可能ですか?私は考慮すべきいくつかのアドバイスはありますか?

可能であれば、ホストOSを変えながらビデオカード(Quadroなど)の特定のブランドがありますか?

6
決定論的?もちろん!ドライバ間やハードウェア間で不変であるか?おそらくない(少なくとも保証されていない)。
追加された 著者 Christian Rau,

3 答え

OpenGL仕様(バージョン2.1付録A)から:

OpenGLの仕様はピクセル単位ではありません。したがって、異なるGL実装によって生成されるイメージ間の正確な一致を保証するものではありません。しかし、この仕様では、同じ実装で作成された画像に対して完全一致を指定する場合もあります。

If you disable all anti-aliasing and texturing, you stand a good chance of getting consistent results across platforms. However, if you need antialiasing or texturing or a 100% pixel-perfect guarantee, use software rendering only: http://www.mesa3d.org/

4
追加された
同一のハードウェアであっても、ドライバのバージョンによってレンダリングが変更される可能性があります。 NVidiaのWindowsドライバとNVidiaのLinuxドライバ、または同じドライバの2つの異なるバージョン間でも同じレンダリングを期待しないでください。ドライバーの設定は、アンチエイリアスやテクスチャのフィルタリングの品質に関してアプリケーションが要求するものを上書きすることができます。 60FPSで完璧なピクセルレンダリングが必要ないということは、ハードウェアレンダリングをプレビューとして使用して、最終的に正確なレンダリングをソフトウェアレンダリングでディスクに保存することで実現できます。
追加された 著者 user57368,
どうもありがとうございました! Quadroカードのみを使用してピクセル完全な結果を得ることができると思いますか?同じ設定を使用していますか?
追加された 著者 softmllx,

「決定論的」という言い方をすれば、私はあなたが言いたいことを(実際には意味するものではなく)意味すると仮定しよう:ピクセルで同じ結果をクロスプラットフォームで得ることができる。

いいえ、チャンスではありません。

グラフィックスドライバのアプリケーションの設定で再生するだけで、レンダリングから得られるピクセル結果を変更することができます。同じハードウェアからのドライバのリビジョンは、取得するものを変更する可能性があります。

OpenGL仕様には、完璧なピクセル結果は決して必要ありません。アンチエイリアスとテクスチャフィルタリングは、特に不明瞭な部分です。

2
追加された

OpenGL仕様を読んでいる場合、実装が標準に準拠するために満たす必要のある決定的な条件がいくつかありますが、重要な数の実装の詳細が残っていますハードウェアのベンダー/ドライバーの開発者に任されています。決定的/不変のカテゴリ(フィルタ処理されたテクスチャ、アンチエイリアス、ライティング、シェーダなどを使用しないようにする)に当てはまる信じられないほど基本的なテクニックでレンダリングしない限り、異なるハードウェアと異なるドライバ同じハードウェアで

0
追加された