MCPcopy Create free account
hub / github.com/NVIDIAGameWorks/HBAOPlus / MessageLoop

Method MessageLoop

samples/D3D11/src/DeviceManager.cpp:191–245  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

189}
190
191void
192DeviceManager::MessageLoop()
193{
194 MSG msg = {0};
195
196 LARGE_INTEGER perfFreq, previousTime;
197 QueryPerformanceFrequency(&perfFreq);
198 QueryPerformanceCounter(&previousTime);
199
200 while (WM_QUIT != msg.message)
201 {
202 if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
203 {
204 TranslateMessage(&msg);
205 DispatchMessage(&msg);
206 }
207 else
208 {
209 LARGE_INTEGER newTime;
210 QueryPerformanceCounter(&newTime);
211
212 double elapsedSeconds = (m_FixedFrameInterval >= 0)
213 ? m_FixedFrameInterval
214 : (double)(newTime.QuadPart - previousTime.QuadPart) / (double)perfFreq.QuadPart;
215
216 if(m_SwapChain && GetWindowState() != kWindowMinimized)
217 {
218 Animate(elapsedSeconds);
219 Render();
220 m_SwapChain->Present(m_SyncInterval, 0);
221 Sleep(0);
222 }
223 else
224 {
225 // Release CPU resources when idle
226 Sleep(1);
227 }
228
229 {
230 m_vFrameTimes.push_back(elapsedSeconds);
231 double timeSum = 0;
232 for(auto it = m_vFrameTimes.begin(); it != m_vFrameTimes.end(); it++)
233 timeSum += *it;
234
235 if(timeSum > m_AverageTimeUpdateInterval)
236 {
237 m_AverageFrameTime = timeSum / (double)m_vFrameTimes.size();
238 m_vFrameTimes.clear();
239 }
240 }
241
242 previousTime = newTime;
243 }
244 }
245}
246
247LRESULT
248DeviceManager::MsgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)

Callers 1

wWinMainFunction · 0.80

Calls 5

push_backMethod · 0.80
beginMethod · 0.45
endMethod · 0.45
sizeMethod · 0.45
clearMethod · 0.45

Tested by

no test coverage detected