我正在尝试通过gDEBugger(http://www.gremedy.com)运行OpenGL程序,并且看到一些奇怪的事情:


使用gDEBugger,这些帧似乎可以更快地渲染。例如,如果我每帧更新某个对象的位置-它会以非常快的速度飞过屏幕,但是当程序在没有gDEBugger的情况下运行时,它的移动速度将大大降低。
奇怪的是,gDEBugger报告每秒8 GL帧。这似乎不太现实:显然,FPS高于8(顺便说一句,我已经在“调试设置”对话框中检查了所有可能的OpenGL Render Frame Terminator)。这是屏幕截图(单击here可获得完整分辨率):



我的程序使用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(未列出为渲染帧终止符之一),但我认为它应该只调用Windows SwapBuffers函数。

最佳答案

关于问题1:显然,gDebugger禁用了wait-for-vsync,这就是为什么帧速率远高于60 fps的原因。

关于问题2:由于某种原因,在使用SDL时,会创建2个OpenGL上下文。通过为第二个上下文添加性能计数器,可以看到正确的数字。

10-08 13:45