gpt4 book ai didi

c++ - SwapBuffers 随着时间的推移变慢

转载 作者:行者123 更新时间:2023-11-30 03:41:33 26 4
gpt4 key购买 nike

我正在使用多线程 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com