Estoy creando una aplicación de dibujo que representa OpenGL cuando obtiene un WM_SCROLL o WM_MOUSEMOVE. El caso es que hay muchos movimientos de mouse y solo necesito que rinda un máximo de 60 fotogramas por segundo. Así que creé un bool en mi clase de motor llamada CanRender. así que en mi proceso de renderizado() hago: if (! CanRender) { return; } CanRender = false;¿Por qué mi cronómetro deja de funcionar?
Básicamente impide que rinda más de 60 FPS.
Creo el temporizador en WM_CREATE.
cuando obtengo un WM_TIMER establezco CanRender en verdadero.
Lo hice sonar, así que sé que el temporizador se está ejecutando. Tan pronto como comienzo a desplazar o mover el mouse, el pitido se detiene y ya no veo el renderizado. ¿Por qué iba a detener mi temporizador? Además, cuando minimizo el tiempo, el temporizador comienza de nuevo y se remaximiza, se detiene nuevamente.
Gracias
mensaje Bomba:
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int) msg.wParam;
la creación:
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
¿Cómo se ve su bomba de mensajes, y también puede publicar el código que usa para crear el temporizador? –
Sí, sospecho que hay algo extraño en el procesamiento de su evento. – stinky472
Es solo cuando mi función de renderización establece CanRender en falso, de lo contrario está bien – jmasterx