Ich erstelle eine Zeichenanwendung, die OpenGL wiedergibt, wenn ein WM_SCROLL oder WM_MOUSEMOVE abgerufen wird. Die Sache ist, dass es viele Mausbewegungen gibt und ich brauche es nur, um maximal 60 Bilder pro Sekunde zu rendern. Also habe ich einen Bool in meiner Engine-Klasse namens CanRender erstellt. also in meinem render() proc mache ich: if (! CanRender) { zurückgeben; } CanRender = false;Warum hört mein Timer auf zu ticken?
Grundsätzlich verhindert es das Rendern von mehr als 60 FPS.
Ich erstelle den Timer in WM_CREATE.
Wenn ich einen WM_TIMER bekomme, setze ich CanRender auf True.
Ich habe es piepsen lassen, also weiß ich, dass der Timer läuft. Sobald ich mit dem Scrollen oder Bewegen der Maus beginne, hört der Signalton auf und ich sehe kein Rendering mehr. Warum sollte es meinen Timer stoppen? Auch wenn ich den Timer minimiert, startet er neu und remaximize, es stoppt wieder.
Dank
Nachricht Pumpe:
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int) msg.wParam;
Schöpfung:
case WM_CREATE:
//Set Window Title
SetWindowText(hWnd,engineGL.current.caption.c_str());
SetTimer(hWnd, // handle to main window
120, // timer identifier
17, // 60 fps interval
(TIMERPROC) NULL); // no timer callback
Wie sieht Ihre gesamte Nachrichtenpumpe aus, und können Sie auch den Code eingeben, den Sie zum Erstellen des Timers verwenden? –
Ja, ich vermute, dass es etwas Seltsames mit Ihrer Ereignisverarbeitung gibt. – stinky472
Es ist nur, wenn meine Renderfunktion CanRender auf false setzt, sonst ist es in Ordnung – jmasterx