我正在使用多线程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提前谢谢!
答案 0 :(得分:1)
@lock我做InitializeCriticalSection(& m_CS);是的,我确信只有一个Thread drawing
我认为上面的代码是在一个循环中,并且每次创建一个关键部分时,你是否正在删除它?顺便说一句:您应该创建一次关键部分并在锁定/解锁时使用EnterCriticalSection / LeaveCriticalSection。
答案 1 :(得分:1)
我发现了我的错误...... 在“pDriverOpenGL-> Present(this);”里面我正在使用
HDC hdc = GetDC(hWnd);
每次调用“GetDC”后,命令变慢。现在我只叫它一次并将HDC保存为会员
谢谢大家的帮助!