DirectX 포트 계획

요약

DirectX 9에서 DirectX 11 및 UWP(유니버설 Windows 플랫폼)로의 게임 포팅 프로젝트를 계획합니다. 그래픽 코드를 업그레이드하고 게임을 Windows 런타임 환경에 배치합니다.

그래픽 코드 포팅 계획

UWP로의 게임 포팅을 시작하기 전에 게임에 Direct3D 8의 영향을 받지 않는지 확인하는 것이 중요합니다. 게임에 고정 함수 파이프라인의 나머지 부분이 없는지 확인합니다. 고정 파이프라인 기능을 포함하여 사용되지 않는 기능의 전체 목록은 사용되지 않는 기능을 참조하세요.

Direct3D 9에서 Direct3D 11로 업그레이드하면 검색 및 바꾸기 이상의 변경 사항이 있습니다. Direct3D 디바이스, 디바이스 컨텍스트, 그래픽 인프라 간의 차이점을 알고 Direct3D 9 이후의 다른 중요한 변경 사항에 대해 알아야 합니다. 이 섹션의 다른 항목을 읽음으로써 이 프로세스를 시작할 수 있습니다.

D3DX 및 DXUT 도우미 라이브러리를 사용자 고유의 도우미 라이브러리 또는 커뮤니티 도구로 교체해야 합니다. 자세한 내용은 기능 매핑 섹션을 참조하세요.

참고DirectX 도구 키트 또는 DirectXTex를 사용하여 이전에 D3DX 및 DXUT에서 제공한 일부 기능을 대체할 수 있습니다.

 

어셈블리 언어로 작성된 셰이더는 셰이더 모델 4 수준 9_1 또는 9_3 기능을 사용하는 HLSL로 업그레이드해야 하고 효과 라이브러리에 대해 작성된 셰이더는 최신 버전의 HLSL 구문으로 업데이트해야 합니다. 자세한 내용은 기능 매핑 섹션을 참조하세요.

다양한 Direct3D 기능 수준에 익숙해지세요. 기능 수준으로 알려진 기능 집합을 정의하여 광범위한 비디오 하드웨어를 분류합니다. 집합은 각각 대략 9.1에서 11.2까지의 Direct3D 버전에 해당합니다. 모든 기능 수준은 DirectX 11 API를 사용합니다.

Win32 UI 코드를 CoreWindow로의 포팅 계획

UWP 앱은 CoreWindow라는 앱 컨테이너에 대해 만든 창에서 실행됩니다. 게임은 데스크톱 창보다 구현 세부 정보가 덜 필요한 IFrameworkView에서 상속하여 창을 제어합니다. 게임의 기본 루프는 IFrameworkView::Run 메서드에 있습니다.

UWP 앱의 수명 주기는 데스크톱 앱과 매우 다릅니다. 일시 중단 이벤트가 발생할 때 앱은 코드 실행을 중지하는 데 제한된 시간만 있고 앱이 다시 시작될 때 플레이어가 바로 원래 위치로 돌아갈 수 있도록 하기 때문에 게임을 자주 저장해야 합니다. 게임은 재시작 시 연속 게임 플레이 환경을 충분히 자주 저장해야 하지만, 게임이 영향 프레임 속도를 저장하거나 또는 속도가 떨어지는 경우가 자주 발생하지 않습니다. 게임이 종료된 상태에서 재시작될 때 게임이 게임 상태를 로드해야 할 수 있습니다.

DirectXMath는 D3DXMath 및 XNAMath를 대체하는 용도로 사용할 수 있으며 수학 라이브러리가 필요한 경우 유용하게 사용할 수 있습니다. DirectXMath에는 빠르고 포팅 가능한 데이터 형식과 셰이더에 사용할 수 있도록 정렬되고 압축된 형식이 있습니다.

연동 API와 같은 네이티브 라이브러리는 Arm 내장 함수를 지원하도록 확장되었습니다. 게임에서 연동 API를 사용하는 경우, DirectX 11 및 UWP에서 계속 사용할 수 있습니다.

템플릿 및 코드 샘플은 아직 익숙하지 않을 수 있는 새로운 C++ 기능을 사용합니다. 예를 들어, 비동기 메서드는 람다 식과 함께 UI 스레드를 차단하지 않고 Direct3D 리소스를 로드하는 데 사용됩니다.

자주 사용하는 두 가지 개념이 있습니다.

  • 관리형 참조(^ 연산자) 및 관리형 클래스(참조 클래스)는 Windows 런타임 기본적인 부분입니다. 관리되는 참조 클래스를 사용하여 Windows 런타임 구성 요소(예: IFrameworkView)와 상호작용해야 합니다(연습에서 자세히 설명).
  • Direct3D 11 COM 인터페이스를 사용하는 경우 Microsoft::WRL::ComPtr 템플릿 형식을 사용하여 COM 포인터를 더 쉽게 사용할 수 있습니다.