I'm following the DirectX tutorial here: [1]
I've found some strange behavior with the main loop... The tutorial uses the following
while(TRUE)
{
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
if(msg.message == WM_QUIT)
break;
}
RenderFrame();
}
When you hit alt-enter to switch to fullscreen mode, it works flawlessly. However, if you change the main loop to this:
while(TRUE)
{
if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
{
GetMessage(&msg, NULL, 0, 0);
DispatchMessage(&msg);
if(msg.message == WM_QUIT)
break;
}
RenderFrame();
}
When you hit alt-enter, it starts to go fullscreen, then "dings" an error and returns. It seems like it has to do with the PM_NOREMOVE flag, as the following shows the same broken behavior as the latter:
while(TRUE)
{
if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
{
}
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
DispatchMessage(&msg);
if(msg.message == WM_QUIT)
break;
}
RenderFrame();
}
The DirectX debugging output doesn't give any errors or warnings. Interestingly, it has to do with the context switching itself, not the fullscreen... if you change the line:
swapChainDesc.Windowed = false;
It starts fine in fullscreen, but fails to switch out of fullscreen on alt-enter. Any reason why PM_NOREMOVE would break fullscreen switching?
[1] http://www.directxtu.../BA4.aspx#still