Sto creando un'applicazione di disegno che esegue il rendering di OpenGL quando ottiene un WM_SCROLL o WM_MOUSEMOVE. Il fatto è che ci sono molti movimenti del mouse e ho solo bisogno di renderizzare un massimo di 60 fotogrammi al secondo. Così ho creato un bool nella mia classe di motori chiamata CanRender. così nel mio render() proc I do: if (! CanRender) { return; } CanRender = falso;Perché il mio timer smette di spuntare?
Fondamentalmente impedisce di eseguire il rendering di oltre 60 FPS.
Creo il timer in WM_CREATE.
quando ottengo un WM_TIMER, ho impostato CanRender su true.
Ho fatto un segnale acustico in modo da sapere che il timer è in esecuzione. Non appena inizio lo scrollo o lo spostamento del mouse, il segnale acustico si interrompe e non vedo più rendering. Perché dovrebbe fermare il mio timer? Anche quando minimizzo il timer ricomincia, quindi rimpicciolisce, si ferma di nuovo.
Grazie
Messaggio Pompa:
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int) msg.wParam;
creazione:
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
Che aspetto ha l'intera pompa del messaggio e puoi anche inserire il codice che utilizzi per creare il timer? –
Sì, ho il sospetto che ci sia qualcosa di strano nell'elaborazione degli eventi. – stinky472
È solo quando la mia funzione di rendering imposta CanRender su false, altrimenti va bene – jmasterx