3

私は OpenGL の多くの側面を利用するプログラムを開発しました - かなり新しい機能から廃止された機能までの範囲で、大多数のマシン、特に古いグラフィック カードを搭載したマシンで正しく動作することを保証したいと考えています。

  • OpenGL アプリケーションの (後方) 互換性を最大化する最善の方法は何ですか?
  • 実際に古いハードウェアのテスト マシンを使用せずに、古いハードウェアとの互換性についてプログラムをテストするにはどうすればよいですか?
  • 互換性テスト中に発生する可能性のある問題の根本的な原因を見つけるには、どのような方法がありますか?
4

2 に答える 2

2

OpenGL アプリケーションの (後方) 互換性を最大化する最善の方法は何ですか?

「互換性」を定義しますか?アプリケーションをできるだけ多くのハードウェアで実行したい場合は、基本的にシェーダーを完全にあきらめて、約 GL 1.4 に固執する必要があります。ここでの主な交絡問題は、Intel ドライバーのバグです。古い Intel ハードウェアの多くは GL 2.0 または 2.1 のサポートを主張しますが、このサポートには無数の失敗があります。

実際に古いハードウェアのテスト マシンを使用せずに、古いハードウェアとの互換性についてプログラムをテストするにはどうすればよいですか?

あなたはそうしない。古いハードウェアとの互換性は、標準に固執するだけではありません。これは、プログラムでドライバーのバグが発生しないようにすることです。それを行う唯一の方法は、対象のハードウェアで実際にテストすることです。

互換性テスト中に発生する可能性のある問題の根本的な原因を見つけるには、どのような方法がありますか?

最近のハードウェアで同じコードをテストします。同じエラーが発生する場合は、コードに問題がある可能性があります。最近のハードウェアでは正常に動作し、古いハードウェアでは失敗する場合、問題はほぼ確実に古いハードウェア ドライバーのドライバー バグです。

回避策を開発します。

于 2012-09-26T18:22:00.790 に答える
1

下位互換性を最大化し、ターゲット マシンの機能を追跡するための強力なツールを取得するための最良の方法 (imho) は、GLEW: The OpenGL Extension Wrangler Library のようなものを使用することです。OpenGL のバージョン固有の関数が読み込まれ、それらがユーザーのシステム (より正確には、ビデオ ドライバー) でサポートされているかどうかをテストできます。このライブラリの使い方は非常に簡単で、ドキュメントも充実しており、Google でたくさんの例を検索できます。したがって、ターゲット マシンにいくつかの新しい opengl 関数がない場合は、"opengl_old.cpp" という名前のモジュールをロードするか (たとえば)、既に廃止されている機能 ( glBegin()glEnd()など)がない場合は、 、「opengl_new.cpp」を続けたほうがいいです。

基本的に、ほとんどの変更は OpenGL 3.0 (およびさらに 3.3) で行われ、非推奨でない唯一のグラフィックス パイプラインとしてシェーダーが導入されているため、プログラムで 2 つの opengl モジュールを作成できます。1 つは OpenGL 1&2 用、もう 1 つは OpenGL 3&4 用です。少なくとも、私は自分のコードでこの方法でこの問題を解決しました。

一部の機能をテストするには、コンテキストを作成するときに、ロードする OpenGL API の具体的なバージョンを指定できます。

于 2012-09-26T11:12:15.220 に答える