【问题标题】:Weird results when running my program in gDebugger在 gDebugger 中运行我的程序时出现奇怪的结果
【发布时间】:2012-12-28 10:21:52
【问题描述】:

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

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

  2. 奇怪的是,gDEBugger 报告 8 GL 帧/秒。这似乎不太现实:显然,FPS 高于 8(顺便说一句,我已经在“调试设置”对话框中检查了所有可能的 OpenGL 渲染帧终止符)。这是截图(点击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 函数。

【问题讨论】:

    标签: c++ debugging opengl graphics


    【解决方案1】:

    关于问题 1:显然 gDebugger 禁用了等待垂直同步,这就是帧速率远高于 60 fps 的原因。

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

    【讨论】:

    • 使用 GLFW 时还会列出两个上下文。第二个上下文也是相关的。
    猜你喜欢
    • 1970-01-01
    • 2011-02-23
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多