私は OpenGL に非常に慣れていないので、おそらくこれは明らかですが、特定の機能が特定のビデオ カードでサポートされているかどうかを判断することは可能ですか? これは、ATI Radeon 9550 ビデオ カードを搭載した古いコンピューターを使用し、Lubuntu 12.10 を実行していて、dFdx と dFfy の使用をサポートしていないことを発見したときに発生しました。この問題は回避できましたが、このような問題が原因で障害が発生したかどうかを調べて、これに基づいて別の方法などを使用してアクションを実行できるかどうか、興味があります。
2 に答える
glGetString(GL_VERSION)
またはを使用して、サポートされている OpenGL のバージョンを確認できますglGetInteverv(GL_MAJOR_VERSION, …); glGetInteverv(GL_MINOR_VERSION, …);
。OpenGL-3 以降では、OpenGL のメジャー バージョンはハードウェア機能に直接対応しています。
古いバージョンではそれほど厳密ではなく、OpenGL の抽象的なデバイス モデルのために、ハードウェア機能を実際に「照会」することはできません。サポートされている拡張機能を確認できます。これは、多くの ARB 拡張機能がコア機能になっているため、サポートされている機能の良い指標です。現在の OpenGL バージョンの特定の機能が基づいている拡張機能がサポートされていない場合、コア機能がエミュレートされる可能性があります。
非常に曖昧で不安定であることは承知していますが、それがその通りです。他の唯一のオプションは、GL_RENDERER 文字列のデータベースを保持し、それに対して照合することです。
一般的に言えば、できません。あなたが話しているようなことではありません。
dFdx
dFdy
バージョン 1.10 (コア OpenGL 2.0 の最初のバージョン) から GLSL の一部になっています。それらのサポートはオプションではありません。
あなたの問題は、ATI/AMD が彼らの古いカードが 2.x をサポートしていると主張したいのですが、彼らのハードウェアは 2.x が必要とするすべてのことを実際に行うことができないということです. そのため、彼らはそれについて嘘をつき、これらの無効な操作を黙って行いながら、サポートを主張しています。
OpenGL には、不正行為を検出する方法がありません。できることは、カードのリストを保持し、文字列GL_VENDOR
とGL_RENDERER
文字列を使用してテストすることだけです。