1

gDEBugger(http://www.gremedy.com)を介してOpenGLプログラムを実行しようとしていますが、いくつか奇妙なことがわかります。

  1. フレームは、gDEBuggerを使用するとはるかに高速にレンダリングされているようです。たとえば、フレームごとにオブジェクトの位置を更新すると、画面上を非常に速く移動しますが、gDEBuggerを使用せずにプログラムを実行すると、移動速度が大幅に低下します。

  2. 不思議なことに、gDEBuggerは8GLフレーム/秒を報告します。これは現実的ではないようです。明らかに、FPSは8よりも高くなっています(ただし、[デバッグ設定]ダイアログで可能なすべてのOpenGLレンダリングフレームターミネーターを確認しました)。これがスクリーンショットです(フル解像度については ここをクリックしてください):ここに画像の説明を入力してください

私のプログラムはSDLを使用してOpenGLレンダリングコンテキストを作成します。

Uint32 flags = SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_OPENGL;
if(fullscreen) flags |= SDL_FULLSCREEN;

// Initialize SDL's video subsystem
SDL_Init(SDL_INIT_VIDEO) == -1;

// Attempt to set the video mode
SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
SDL_Surface* s = SDL_SetVideoMode(width, height, 0, flags);

Windows 7とNVidiaグラフィックカード(geforce gtx 660m)を使用しています。

私の質問は、1)と2)で見られる奇妙な行動をどのように説明するのですか?何らかの理由で、レンダリングがグラフィックカードではなくソフトウェアで実行されている可能性がありますか?

UPD:明らかに、SDL_GL_SwapBuffers各フレームの最後で(レンダリングフレームターミネータの1つとしてリストされていない)呼び出していますが、WindowsのSwapBuffers関数を呼び出すだけでよいと思います。

4

1 に答える 1

0

問題1に関して:明らかにgDebuggerはvsyncの待機を無効にします。これが、フレームレートが60fpsよりはるかに高い理由です。

問題2に関して:何らかの理由で、SDLを使用すると、2つのOpenGLコンテキストが作成されます。2番目のコンテキストのパフォーマンスカウンターを追加することで、正しい数を確認できます。

于 2012-12-28T21:41:24.567 に答える