2

我用 C++ 编写了一个 3D 立体 OpenGL 程序。我在 timeBeginPeriod(1) 之后使用 timeGetTime 跟踪显示中的位置对象。当我使用“开始调试”运行程序时,我的对象在显示器上平滑移动(它们应该如此)。当我使用“开始而不调试”运行程序时,对象偶尔会冻结几次屏幕刷新,然后跳转到新位置。关于可能导致此问题的原因以及如何解决此问题的任何想法?

编辑:如果我单击鼠标按钮,当我运行“不调试就开始”时,似乎可以在短暂的延迟后解决抖动问题。我的应用程序是一个控制台应用程序(我在程序第一次启动时接受了一些参数)。这两个选项之间的窗口焦点可能有所不同吗?当我从控制台窗口完成输入时,是否有一种明确的方法可以将焦点强制到 OpenGL 窗口(通过 glutFullScreen(); 全屏显示)?

谢谢。

4

2 回答 2

1

API的timeGetTime精度只有 10 毫秒。如果您测量的间隔小于 50 毫秒左右,您可能只是看到了系统计时器中预期变化的影响。我不知道为什么调试器会对此产生影响,但是系统的整个工作都是一个黑匣子。您可以使用QueryPerformanceCounter获得更高分辨率的计时,这可能会有所帮助。

于 2009-11-25T19:23:18.333 回答
0

导致任何程序在被调试和未被调试时行为不同的最常见的事情是使用未初始化的变量,尤其是读取未初始化的内存。检查你没有这样做。

更具体的 OpenGL - 您可能在刷新命令时遇到一些问题。glFinish()在绘制每一帧后尝试插入。
以某种方式真正确保发生冻结时确实存在正在渲染的帧而不是整个应用程序被冻结也可能会有所帮助。如果您更有可能在逻辑中有一些错误,因为 OpenGL 似乎完成了它的工作。

于 2009-11-25T19:12:33.030 回答