2009-04-01 12 views
2

Ich schreibe eine 3D-Anwendung für Windows, mit OpenGL. Für den Moment macht es eine einfache Testszene mit einem Modell von ungefähr 50000 Polygonen und es rendert glatt bei 60FPS.Framerate bei Mauseingabe in 3D-App

Die Framerate wird jedoch sehr ungleichmäßig, wenn die Maus über das Anwendungsfenster bewegt wird. Es schwankt von 400 FPS zu 20 FPS nach dem Zufallsprinzip. Gibt es einen Grund dafür? Wird dies durch Mausereignisse verursacht, mit denen die App umgehen muss? Kann ich sie deaktivieren und nur den Mausstatus abfragen?

Meine app Schleife ist sehr einfach, etwas mehr oder weniger wie:

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

und die Fensterprozedur ist im Grunde

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

Antwort

0

wie ein roter Faden Problem Sounds. Wie wäre es mit einer Bibliothek wie glut, um die OpenGL-Hauptschleife für Sie zu behandeln?

+0

Ich kann nicht, es muss reine WinAPI verwenden. – GhassanPL

1

Zusätzlich zu den Mausbewegungsnachrichten werden beim Verschieben über ein Fenster WM_SETCURSOR-Nachrichten generiert. Sie könnten versuchen, diese und die WM_MOUSEMOVE-Nachrichten zu verwerfen, um zu sehen, ob die App schneller wird. Verwerfen Sie 1, anstatt DefWindowProc aufzurufen.

Es gibt keine Möglichkeit, die Mausnachrichten abzuschalten, aber sie wegzuwerfen sollte schnell sein. Sie können GetCursorPos verwenden, um nach den Mauskoordinaten zu suchen.

+0

Das ist die Sache, ich werde keine Nachrichten außer WM_CLOSE behandeln. Die Rückgabe von 0 oder 1 an WM_MOUSEMOVE ändert nichts. – GhassanPL

+0

Sie behandeln sie möglicherweise nicht, aber DefWindowProc ist. –

0

Ein bisschen von einem Schuss im Dunkeln, aber wird die WM_PAINT-Nachricht Ihre App zum Neuzeichnen auslösen? Wenn dies der Fall ist, dann scheint es, als ob die Maus InvalidateRects erzeugt und das Fenster zum Aktualisieren zwingt.

Generell lasse ich Windows überhaupt nicht die Maus abfragen, aber die App selbst fragt nach Bedarf ab.

+0

Nein, ich behandle die WM_PAINT-Nachricht nicht. – GhassanPL

+0

Wie jeder sagt, dass DefWindowProc sie behandelt. – thing2k

Verwandte Themen