在gDebugger中运行我的程序时出现了奇怪的结果

时间:2012-12-28 10:21:53

标签: c++ debugging opengl graphics

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

  1. 使用gDEBugger,帧似乎渲染速度更快。例如,如果我每帧都更新某个对象的位置 - 它只是快速地飞过屏幕,但是当程序在没有gDEBugger的情况下运行时,它将以更慢的速度移动。

  2. 奇怪的是,gDEBugger报告 8 GL帧/秒。这似乎不太现实:显然,FPS高于8(顺便说一下,我已经在Debug Settings对话框中检查了每个可能的OpenGL Render Frame Terminator)。这是一个屏幕截图(点击here获取完整分辨率): enter image description here

  3. 我的程序使用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 个答案:

答案 0 :(得分:0)

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

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