随着时间的推移SwapBuffers变得越来越慢

时间:2016-05-20 13:26:58

标签: c++ multithreading opengl

我正在使用多线程OpenGL渲染到窗口中。 如果按下按钮,模型将旋转5秒。旋转后,我打印出FPS。剩下的时间OpenGL什么都不做。 该模型不会随时间更改,并且所有线程在旋转时都会暂停。 一开始我使用这个按钮30次后有240FPS(并且还等到一切都完成了)我的FPS下降到30FPS(看起来真的很慢)。

我的循环看起来像这样,我也尝试了其他组合,比如删除glFlush和glFinish。

pDriverOpenGL->Lock();
pDriverOpenGL->Present(this); //drawcall
glFlush();
glFinish();
//glFlush(); 
SwapBuffers(hdc);
pDriverOpenGL->Unlock();

我是否错过了一些命令? 我还读到,GL命令被堆叠到缓冲区,直到调用glFlush。真的吗? 有人可以告诉我这个堆栈是如何工作的吗?我该如何清除它?

不过,我正在使用Windows 10,AMD Radeon R7 M370

提前谢谢!

2 个答案:

答案 0 :(得分:1)

@lock我做InitializeCriticalSection(& m_CS);是的,我确信只有一个Thread drawing

我认为上面的代码是在一个循环中,并且每次创建一个关键部分时,你是否正在删除它?顺便说一句:您应该创建一次关键部分并在锁定/解锁时使用EnterCriticalSection / LeaveCriticalSection。

答案 1 :(得分:1)

我发现了我的错误...... 在“pDriverOpenGL-> Present(this);”里面我正在使用

HDC hdc = GetDC(hWnd);

每次调用“GetDC”后,命令变慢。现在我只叫它一次并将HDC保存为会员

谢谢大家的帮助!