2

For whatever reason, I'm messing around with manual OpenGL extension loading.

Every tutorial I've found recommends first querying the extension string, then parsing it into a list of extensions, and then finally loading the function pointers for supported extensions. It seems to me that this whole process could be reduced to just getting the function pointers and then checking for any NULLs returned by wglGetProcAddress or equivalent.

My question is: What purpose does the intermediate query step serve? Is it possible for a function to be unsupported but for *GetProcAddress to return a non-NULL pointer?

4

2 に答える 2

4

拡張文字列は、GL 実装がサポートする拡張機能を知らせる正しい方法です。GL に関する限り、拡張文字列によって存在することが暗示されていない関数のポインターを照会することは、未定義の動作です。

実際には、状況が実際に発生する可能性があります。mesa の場合のように、異なるバックエンドに対して同じ GL クライアント側の dll を使用することがよくあります。関数が存在するという事実は、すべてのバックエンド ドライバーに実装されていることを意味するものではありません。

于 2013-11-10T20:56:58.020 に答える
1

中間クエリ ステップはどのような目的に役立ちますか?

現在アクティブなコンテキストをサポートする OpenGL 実装によって実際にサポートされている拡張機能を確認します。また、新しいテクスチャ フォーマットやシェーダー ターゲットなどのすべての拡張機能が新しい手順 (関数) を導入するわけではなく、新しいトークンのみが導入されます。それらを検出する唯一の方法は、拡張文字列を調べることです。

関数がサポートされていなくても、*GetProcAddress が非 NULL ポインターを返す可能性はありますか?

はい、可能です。

于 2013-11-11T01:59:22.860 に答える