在3D应用程序中鼠标input帧率不均匀

我正在使用OpenGL编写Windows的3D应用程序。 现在,它呈现一个简单的testing场景,一个约50000个多边形的模型,并在60FPS时呈现平稳。

但是,只要将鼠标移到应用程序窗口上,帧率就会非常不均匀。 它随机波动从400 FPS到20 FPS。 这有什么理由吗? 这是由应用程序被强制处理的鼠标事件引起的吗? 我可以禁用它们,只是轮询鼠标状态?

我的应用程序循环非常简单,或多或less像这样:

if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { if (msg.message==WM_QUIT) { quit(); } else { TranslateMessage(&msg); DispatchMessage(&msg); } } else { draw(); Sleep(1); } 

而窗口程序基本上是

 return DefWindowProc(hWnd,uMsg,wParam,lParam); 

除了鼠标移动消息之外,移动窗口将生成WM_SETCURSOR消息。 您可能会尝试放弃这些和WM_MOUSEMOVE消息,以查看应用程序是否加速。 放弃,返回1而不是调用DefWindowProc。

没有办法关闭鼠标消息,但扔掉它们应该很快。 您可以使用GetCursorPos来轮询鼠标坐标。

听起来像一个线程问题。 那么用glut这样的库来处理opengl主循环呢?

在黑暗中的一点点,但将WM_PAINT消息触发你的应用程序重绘? 如果这是渲染正在发生的地方,那么听起来鼠标正在生成InvalidateRects并强制更新窗口。

通常我不会让Windows根据需要轮询鼠标,但应用程序本身也会轮询。