Неравномерная частота кадров при вводе с помощью мыши в 3D-приложении - PullRequest
2 голосов
/ 02 апреля 2009

Я пишу 3D-приложение для Windows, используя OpenGL. На данный момент он воспроизводит простую тестовую сцену с одной моделью из 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 ]

1 голос
/ 02 апреля 2009

Помимо сообщений о перемещении мыши, перемещение по окну будет генерировать сообщения WM_SETCURSOR. Вы можете попробовать отбросить их и сообщения WM_MOUSEMOVE, чтобы увидеть, ускоряется ли приложение. Чтобы отказаться, верните 1 вместо вызова DefWindowProc.

Невозможно отключить сообщения мыши, но выбрасывать их нужно быстро. Вы можете использовать GetCursorPos для опроса координат мыши.

0 голосов
/ 04 апреля 2009

Немного в темноте, но будет ли сообщение WM_PAINT вызвать перерисовку вашего приложения? Если именно здесь происходит рендеринг, похоже, что мышь генерирует InvalidateRects и вынуждает окно обновляться.

Обычно я вообще не позволяю Windows опрашивать мышь, но само приложение опрашивает при необходимости.

0 голосов
/ 02 апреля 2009

Похоже на проблему потока. Как насчет использования библиотеки типа glut для обработки основного цикла opengl для вас?

...