繁体   English   中英

什么可能导致OpenGL在“开始调试”与“不进行调试开始”选项下的行为有所不同?

[英]What might cause OpenGL to behave differently under the “Start Debugging” versus “Start without debugging” options?

我已经用C ++编写了3D-Stereo OpenGL程序。 我跟踪显示器中的位置对象应该在timeBeginPeriod(1)之后使用timeGetTime。 当我使用“开始调试”运行程序时,我的对象在显示器上平滑移动(应按其原样)。 当我使用“无需调试就开始”运行程序时,对象偶尔冻结几次屏幕刷新,然后跳到新位置。 关于什么可能导致此问题以及如何解决此问题的任何想法?

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

谢谢。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM