Windows での OpenGL 1.0 および 1.1 の関数ポインタの性質について少し混乱しています。私はそれを理解していると思いますが、100% 確信があるわけではないので、誰かが私の現在の理解を確認またはコメントできることを願っています:
現時点での私の理解では、 で 1.2+ 関数をロードすることになっていますwglGetProcAddress()
が、その 1.0 および 1.1 関数は でロードする必要がありGetProcAddress()
ますopengl32.dll
。ただし、私の注意を引くのは、現在のコンテキストwglGetProcAddress()
に応じて異なる関数ポインターを返すと思われることです。HGLRC
しかし、おそらく 1.0 と 1.1 のポインターGetProcAddress()
は常に同じです。この行動の不一致は異常に感じます。
では、複数のHGLRC
オブジェクトがある状況があるとしましょう。それらA
を and と呼びますB
。を呼び出し、結果を 用とwglGetProcAddress()
用の別々のポインター プールに保持します。しかし、1.0 と 1.1 の関数をこれらのポインター プールにロードする必要もあります。この場合、 と のポインターは常に同じになるようです。A
B
A
B
驚いたことに、1.0 と 1.1 の関数は、OpenGL 呼び出しを現在の に関連付けられているドライバーにリダイレクトする薄いラッパーでなければなりませんHGLRC
。しかし、そのようなリダイレクト メカニズムが既に Windows に実装されwglGetProcAddress()
ている場合、コンテキスト依存のポインターを返す危険性が軽減されるため、なぜそれを使用できないのだろうかと思います。この問いに対する答えを知る必要は必ずしもないのですが、その問いの存在そのものが、そもそも私が物事を正しく理解しているかどうか疑問に思わせるものです。