가 전체 화면 전용 모드 전환을 지원하지 않습니다하지만 당신은 창 크기 조정을 처리하는 Direct3D Win32 Game VS 2013에서 Win32 데스크톱 응용 프로그램 템플릿을 봐야한다 .
Win32 데스크톱 응용 프로그램에서 Direct3D 11에 대한 윈도우 크기 조정의 기본 처리 방법은 WM_SIZE
을 처리하도록 윈도우 프로 시저를 업데이트하는 것이지만 많은 경우에 대처해야합니다.
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static bool s_in_sizemove = false;
static bool s_minimized = false;
switch (message)
{
...
case WM_SIZE:
if (wParam == SIZE_MINIMIZED)
{
// The window was minimized (you should probably suspend the application)
if (!s_minimized)
{
s_minimized = true;
}
}
else if (s_minimized)
{
// The window was minimized and is now restored (resume from suspend)
s_minimized = false;
}
else if (!s_in_sizemove)
{
// Here is where you handle the swapchain resize for maximize or unmaximize
}
break;
case WM_ENTERSIZEMOVE:
// We want to avoid trying to resizing the swapchain as the user does the 'rubber band' resize
s_in_sizemove = true;
break;
case WM_EXITSIZEMOVE:
s_in_sizemove = false;
// Here is the other place where you handle the swapchain resize after the user stops using the 'rubber-band'
break;
case WM_GETMINMAXINFO:
{
// We want to prevent the window from being set too tiny
auto info = reinterpret_cast<MINMAXINFO*>(lParam);
info->ptMinTrackSize.x = 320;
info->ptMinTrackSize.y = 200;
}
break;
...
은 Direct3D를 swapchain 크기 조정을 수행합니다 널 (null)와
- 전화
ID3D11DeviceContext::OMSetRenderTargets
을 렌더링 타겟 및 깊이/스텐실 버퍼 바인딩을 해제 할 수 있습니다.
- 렌더링 대상보기 및 심도/스텐실보기 및 원래의 백 버퍼 또는 깊이/스텐실 버퍼에 대한 다른 참조를 해제하십시오.
- 변경 사항을 완료하기 위해 으로 전화하십시오.
IDXGISwapChain::ResizeBuffers
을 호출하여 새 크기로 백 버퍼의 크기를 조정하십시오. DXGI_ERROR_DEVICE_REMOVED
및 DXGI_ERROR_DEVICE_RESET
오류에 응답해야합니다.
- 새로운 크기에 대해 초기 설정을 다시 수행하십시오. 새 백 버퍼에 대한 렌더 타겟보기를 만들고, 새로운 백 버퍼 크기와 일치하는 깊이/스텐실 버퍼에 대한 깊이 스텐실 뷰를 새로 만듭니다 (옵션) 뷰포트 크기를 재설정합니다.
이 절차에서는 응용 프로그램에 대한 몇 가지 가정 사항이 있으므로 간단하게하기 위해 Win32 데스크톱 자습서에서 생략했습니다. 이 경우는 Direct3D Win32 Game 템플리트, Windows Store DirectX app 템플리트 및 Windows phone DirectX app 템플리트에 대해 처리됩니다.
Windows Store 응용 프로그램이나 Windows 전화 응용 프로그램에는 '전체 화면 전용 모드'와 같은 것이 없으므로 해당 템플릿은이를 구현하지 않습니다.
dxgiFactory->MakeWindowAssociation(hwnd, DXGI_MWA_NO_ALT_ENTER);
내가 전체 지원하기 위해 Direct3D를 Win32에서 게임 템플릿을 확장하는 방법을 다시 방문 희망 :는 Win32 바탕 화면 튜토리얼과 Direct3D를 Win32에서 게임 템플릿, 나는 그것을 대처할 필요가 없습니다 보장하기 위해 다음 사용 화면 전용 모드이지만 아직 익숙하지 않았습니다.
ResizeBuffers가 창 크기를 변경하지 않는다고 생각합니까? 링크의 템플릿에는 쉐이더 코드가 없으므로 독점적 인 전체 화면 모드가 필요합니다.사실 단순히 고정 된 크기로 창을 만들고 싶고 전체 화면을 덮어 버리는 경우 전체 화면 만 독점해야합니다. – user1161656
세 가지 선택이 있습니다 : (1) 창을 고정 크기로 전체 화면으로 만들고 이동/크기 조정을위한 컨트롤을 포함하지 않습니다. (2) 창을 고정 크기로 전체 화면으로 만들고 컨트롤을 포함시키지 마십시오. border (때때로 "fake fullscreen"이라고도 함), (3) 실제로 DXGI를 사용하여 독점적 인 전체 화면 모드로 만듭니다. –