나는 WM_SCROLL 또는 WM_MOUSEMOVE를 얻을 때 OpenGL을 렌더링하는 그리기 응용 프로그램을 만들고 있습니다. 문제는 마우스 움직임이 많고 초당 최대 60 프레임 만 렌더링하면됩니다. 그래서 CanRender라는 엔진 클래스에 bool을 만들었습니다. 그래서 내 렌더링에서() proc : if (! CanRender) { return; } CanRender = false;타이머가 멈추는 이유는 무엇입니까?
기본적으로 60FPS 이상을 렌더링하지 못합니다.
저는 WM_CREATE에 타이머를 만듭니다.
내가 WM_TIMER를 얻을 때 CanRender를 true로 설정했습니다.
저는 타이머가 작동 중임을 알기 위해 경고음을 울립니다. 마우스를 움직이거나 스크롤을 시작하자마자 경고음이 멈추고 렌더링이 더 이상 보이지 않습니다. 왜 내 타이머가 멈출까요? 또한 타이머를 최소화 한 후 다시 시작하면 다시 중지됩니다.
감사
메시지 펌프 :
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int) msg.wParam;
제작 :
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
전체 메시지 펌프가 어떻게 보이며 타이머를 만드는 데 사용하는 코드를 게시 할 수 있습니까? –
예, 귀하의 이벤트 처리에 이상한 점이 있다고 생각됩니다. – stinky472
내 렌더링 함수가 CanRender를 false로 설정 한 경우에만 해당합니다. 그렇지 않은 경우에는 – jmasterx