在3D应用程序中鼠标输入的帧率不均匀

时间:2009-04-01 20:39:27

标签: windows winapi opengl mouse

我正在使用OpenGL为Windows编写3D应用程序。目前它渲染了一个简单的测试场景,其中一个模型包含大约50000个多边形,并且在60FPS时平滑渲染。

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

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

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);

3 个答案:

答案 0 :(得分:1)

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

无法关闭鼠标消息,但丢弃它们应该很快。您可以使用GetCursorPos轮询鼠标坐标。

答案 1 :(得分:0)

听起来像线程问题。如何使用像glut这样的库来为你处理opengl主循环呢?

答案 2 :(得分:0)

在黑暗中拍摄一下,但WM_PAINT消息会触发你的应用重绘吗?如果那是你正在进行渲染的地方,那么听起来好像鼠标正在生成InvalidateRects并强制窗口更新。

一般情况下,我根本不让Windows轮询鼠标,但应用程序本身会根据需要进行轮询。