DirectX の移植の計画Plan your DirectX port

概要Summary

DirectX 9 から DirectX 11 とユニバーサル Windows プラットフォーム (UWP) へのゲーム移植プロジェクトを計画してください。グラフィックス コードのアップグレードと、Windows ランタイム環境へのゲームの配置が必要です。Plan your game porting project from DirectX 9 to DirectX 11 and Universal Windows Platform (UWP): upgrade your graphics code, and put your game in the Windows Runtime environment.

グラフィックス コードの移植の計画Plan to port graphics code

UWP へのゲームの移植を開始する前に、ゲームに Direct3D 8 の要素が残っていない状態にすることが重要です。Before you begin porting your game to UWP, it's important to ensure that your game does not have any holdovers from Direct3D 8. ゲームに固定関数パイプラインが残っていないことを確かめてください。Ensure that your game doesn't have any remnants of the fixed function pipeline. 固定パイプライン機能など、推奨されなくなった機能の全一覧については、「推奨されなくなった機能」をご覧ください。For a complete list of deprecated features, including fixed pipeline functionality, see Deprecated Features.

Direct3D 9 から Direct3D 11 へのアップグレードは、変更箇所を探して置き換える作業にとどまりません。Upgrading from Direct3D 9 to Direct3D 11 is more than a search-and-replace change. Direct3D デバイス、デバイス コンテキスト、グラフィックス インフラストラクチャの違いを把握し、Direct3D 9 以降のその他の重要な変更について理解する必要があります。You need to know the difference between the Direct3D device, device context, and graphics infrastructure, and learn about other important changes since Direct3D 9. このセクションの他のトピックを読むことで、このプロセスを開始できます。You can start this process by reading the other topics in this section.

D3DX と DXUT のヘルパー ライブラリは、独自のヘルパー ライブラリか、コミュニティ ツールに置き換える必要があります。You must replace the D3DX and DXUT helper libraries with your own helper libraries, or with community tools. 詳しくは、「DirectX 11 API への DirectX 9 の機能のマッピング」をご覧ください。See the Feature mapping section for more info.

  を使用することができます、 DirectX ツール キットまたはDirectXTex D3DX と DXUT で以前提供されているいくつかの機能を置き換える。Note   You can use the DirectX Tool Kit or DirectXTex to replace some functionality that was formerly provided by D3DX and DXUT.

 

アセンブリ言語で記述されたシェーダーは、HLSL シェーダー モデル 4 レベル 9 を使用してにアップグレードする必要があります_1 または 9_3 つの機能、およびシェーダー効果ライブラリは HLSL の構文のより新しいバージョンに更新する必要があります用に記述します。Shaders written in assembly language should be upgraded to HLSL using shader model 4 level 9_1 or 9_3 functionality, and shaders written for the Effects library will need to be updated to a more recent version of HLSL syntax. 詳しくは、「DirectX 11 API への DirectX 9 の機能のマッピング」をご覧ください。See the Feature mapping section for more info.

さまざまな Direct3D 機能レベルについて確かめてください。Get familiar with the different Direct3D feature levels. 機能レベルは、既知の機能のセットを定義することで、幅広いビデオ ハードウェアを分類するものです。Feature levels classify a wide range of video hardware by defining sets of known functionality. 各セットは 9.1 ~ 11.2 のバージョンの Direct3D にほぼ対応しています。Each set roughly corresponds to versions of Direct3D, from 9.1 through 11.2. すべての機能レベルで DirectX 11 API を使います。All feature levels use the DirectX 11 API.

CoreWindow への Win32 UI コードの移植の計画Plan to port Win32 UI code to CoreWindow

UWP アプリは、CoreWindow と呼ばれる、アプリ コンテナーに対して作成されるウィンドウで実行されます。UWP apps run in a window created for an app container, called a CoreWindow. ゲームでは、デスクトップのウィンドウよりも必要な実装の詳細が少ない IFrameworkView からの継承によってウィンドウを制御します。Your game controls the window by inheriting from IFrameworkView, which requires less implementation details than a desktop window. ゲームのメイン ループは IFrameworkView::Run メソッドにあります。Your game's main loop will be in the IFrameworkView::Run method.

UWP アプリのライフサイクルはデスクトップ アプリとは大きく異なります。The lifecycle of a UWP app is very different from a desktop app. ゲームの保存は頻繁に行う必要があります。中断イベントが発生したときに、アプリで実行中のコードを停止できる時間が限られているうえ、アプリの再開時には、プレーヤーが中断時の状態からすぐにゲームを再開できるようにする必要があるためです。You'll need to save the game often, because when a suspend event happens your app only has a limited amount of time to stop running code, and you want to make sure the player can get back to where they were right away when your app resumes. ゲームの保存は、再開時に連続したゲームプレイ エクスペリエンスを維持できるだけの頻度で行う必要があります。ただし、フレームレートに影響したり、ゲームに引っかかりをもたらしたりしない程度にしてください。Games should save just often enough to maintain a continuous gameplay experience from resume, but not so often that the game saves impact framerate or cause the game to stutter. ゲームは、ゲームが終了状態から再開されたときに、必要に応じてゲームの状態を読み込む必要があります。Your game will potentially need to load game state when the game resumes from a terminated state.

DirectXMath は、D3DXMath と XNAMath の代わりになり、数学演算ライブラリが必要になったときに役立ちます。DirectXMath can be used as a replacement for D3DXMath and XNAMath, and it can come in handy if you need a math library. DirectXMath には、高速かつ移植可能なデータ型と、シェーダーで利用できるように整列およびパッキングされた型があります。DirectXMath has fast, portable data types, and types that are aligned and packed for use with shaders.

インタロック API などのネイティブ ライブラリは、ARM の組み込みメソッドをサポートするために拡張されました。Native libraries such as the Interlocked API have been expanded to support ARM intrinsics. ゲームでインタロック API を使う場合は、DirectX 11 と UWP でも使い続けることができます。If your game uses interlocked APIs, you can keep using them in DirectX 11 and UWP.

Microsoft のテンプレートとコード サンプルでは新しい C++ 機能が使われており、馴染みがない可能性があります。Our templates and code samples use new C++ features that you might not be familiar with yet. たとえば、UI スレッドをブロックすることなく Direct3D リソースを読み込むために、非同期メソッドがラムダ式と共に使われます。For example, asynchronous methods are used with lambda expressions to load Direct3D resources without blocking the UI thread.

頻繁に使う 2 つの概念があります。There are two concepts you'll use often:

  • マネージ リファレンス ( ^ 演算子) と マネージ クラス (ref クラス) は、Windows ランタイムの基本となる部分です。Managed references (^ operator) and managed classes (ref classes) are a fundamental part of the Windows Runtime. Windows ランタイム コンポーネントとのインターフェイスとして機能するマネージ ref クラスを使う必要があります。具体的には、IFrameworkView などです。詳しくはチュートリアルをご覧ください。You will need to use managed ref classes to interface with Windows Runtime components, for example IFrameworkView (more on that in the walkthrough).
  • Direct3D 11 の COM インターフェイスを操作する場合は、Microsoft::WRL::ComPtr テンプレート型を使うと COM ポインターが使いやすくなります。When working with Direct3D 11 COM interfaces, use the Microsoft::WRL::ComPtr template type to make COM pointers easier to use.