作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用多线程 OpenGL 渲染到一个窗口中。如果我按下一个按钮,模型将旋转 5 秒。轮换后,我打印出 FPS。其余时间 OpenGL 什么都不做。模型不会随着时间的推移而改变,所有线程在旋转时都会暂停。一开始我在使用这个按钮 30 次后有 240FPS(并且还等到一切都完成移动)我的 FPS 下降到 30FPS(看起来真的很慢)。
我的循环看起来像这样,我还尝试了其他组合,例如删除 glFlush 和 glFinish。
pDriverOpenGL->Lock();
pDriverOpenGL->Present(this); //drawcall
glFlush();
glFinish();
//glFlush();
SwapBuffers(hdc);
pDriverOpenGL->Unlock();
我是否错过了一些命令?我还读到,在调用 glFlush 之前,GL 命令被堆叠到缓冲区中。真的吗?有人可以描述一下这个堆栈是如何工作的吗?我该如何清除它?
顺便说一句,我使用的是 Windows 10,AMD Radeon R7 M370
提前致谢!
最佳答案
@锁定我做 InitializeCriticalSection(&m_CS);是的,我确定只有一张 Thread 图
我假设你上面的代码在一个循环中,你每次都在创建一个关键部分,你要删除它吗?顺便说一句:您应该创建一次临界区并在锁定/解锁中使用 EnterCriticalSection/LeaveCriticalSection。
关于c++ - SwapBuffers 随着时间的推移变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37347939/
我是一名优秀的程序员,十分优秀!