我正在尝试通过 gDEBugger ( http://www.gremedy.com )运行一个 OpenGL 程序,但我看到了一些奇怪的事情:
使用 gDEBugger 似乎可以更快地渲染帧。例如,如果我每帧更新某个对象的位置——它会飞快地飞过屏幕,但是当程序在没有 gDEBugger 的情况下运行时,它的移动速度会慢得多。
奇怪的是,gDEBugger 报告8 GL 帧/秒。这似乎不太现实:显然,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
每一帧的末尾调用(它没有被列为渲染帧终止符之一),但我认为它应该只调用 windows SwapBuffers 函数。