1

OpenGL レンダリング ビューを使用する C++ で記述されたデスクトップ Windows アプリがあります。

一部の AMD カードでは、Catalyst Control Center を開いてトリプル バッファリングと V-sync を強制的にオンにすると、アプリが壊れます。何もレンダリングされず、灰色の画面が表示されます (他の一部のドライバー バージョンでは、代わりにコンテキストの作成時にクラッシュします)。 )。トリプル バッファリングまたはV-sync のいずれかをオフにすると、通常の状態に戻ります。

wglSwapIntervalEXTアプリで V-syncing を有効にするために使用します。競合する可能性があると考えて、コードを削除しました。変化なし。

これは間違いなくドライバーのバグですか、それともトリプル バッファリングを処理するために他に何かしなければならないことがありますか?

4

1 に答える 1

4

私は自分のアプリケーションでこの同じ問題に遭遇しましたが、追跡するのは非常に困難です。問題を再現するために構築した最小限のアプリケーション テスト セットアップに基づいて提供できる追加情報を次に示します。

1) ピクセル形式を設定し、GL RC を作成するための呼び出しはすべて成功します。ただし、GLDebugger は、RC が実際には静的バッファーを取得していないことを示します。

2) RC を最新のものにしようとすると、false が返され、GetLastError() は無効なハンドルがあることを示します。

3) この問題は MFC でしか再現できません。それはあなたが使用しているものですか?ストレートな Win32 API を使用してテストベッド アプリケーションを作成したところ、問題なく動作しました。ここではあいまいな相互作用が行われている必要があります..

4) OnCreate の後まで RC の作成を遅らせると、問題なくビルドできます。

私の答えは「ドライバーのバグ」に傾いているのではないかと心配していますが、ポイント 4 は回避策を示しています。私のためにテスト中!

更新: この問題について AMD に連絡しましたが、これは MFC が最初に幅/高さゼロのウィンドウを作成し、サイズを変更した結果であることが判明しました。PreCreate 関数でゼロ以外の次元を割り当てると、すべてが機能します。

これで何が起こっているのかを理解しようとしているすべての人にとって、これが良いリソースになることを願っています!

于 2013-03-26T04:53:17.057 に答える