0

私のソフトウェアでは、Windowsにさまざまなピクセル形式を照会するためにダミーウィンドウを生成し、そのウィンドウを破棄して、適切な形式を選択した後に新しいウィンドウを作成しています。

最初のウィンドウを初期化した後、wglChoosePixelFormatARB関数を使用するためにglewInit()でglewを初期化します。ダミーウィンドウを破棄した後も拡張機能は機能し続けますが、理論的には2つのウィンドウが2つの異なる関数ポインターのセットを持つ可能性があるため、これは技術的に「正しい」ものではないことを認識しています。したがって、2番目のウィンドウを作成した後、もう一度glowを初期化します。

これを行うと、その後、次のような通常の関数からエラーが発生します。

GLint viewport[4];

::glGetIntegerv(GL_VIEWPORT, viewport);

、glErrorは1280です-奇妙なことに、ビューポートをチェックすると、正しい値が含まれているようです(前のコマンドでエラーが発生したかどうかを確認するためにglGetError()を調べています)。

だから、私の質問はこれです:Windowsに必要と思われる2つの状態のOpenGL初期化(ダミーウィンドウの作成、拡張機能の初期化、拡張機能の使用、ダミーウィンドウの破棄、実際のウィンドウの作成)で、新しいウィンドウが2回目に光ったとき、どのように初期化するのですか?ウィンドウは現在のコンテキストですか?

4

2 に答える 2

1

最初にwglChoosePixelFormatARBの関数ポインターを取得し(wglGetProcAddressを使用すると思います)、2番目のウィンドウが作成された後に初期化が光ります。

于 2013-01-18T18:20:46.130 に答える
1

メインウィンドウを作成した後でのみ、ダミーウィンドウ/コンテキストを破棄することをお勧めします。また、Slicedpanがすでに示唆しているように、必要な拡張関数はhadfullだけなので、GLEWに依存しないように手動でロードします。また、glewInit()への2回目の呼び出しは、適切なOpenGLコンテキストが作成さ、スレッドで現在のGLEW関数が使用されるようになった後であることを確認しましたか?

于 2013-01-19T19:28:42.393 に答える