【DirectX12】DirectX12の初期化

DirectX12の事前準備

事前準備はVisualStudioをインストールするだけです!

DirectX11に引き続きDirectX12もWindowsSDKに含まれています。
なのでVisualStudioさえあれば特にインストールなどを行う必要はありません!

前提条件

今回はComPtrというものを使用します。
詳細は割愛しますが、参照が無くなった時点で自動で解放してくれる機能です。
所謂スマートポインターです!

ComPtrという名前からも分かる通りCOMコンポーネント向けの機能となります。

これを使用するために下記の記述を行っています。

  1. #include <wrl.h>
  2. using Microsoft::WRL::ComPtr;
  3. using namespace DirectX;

この用に記載することで下記のようにCOMオブジェクトのポインタを扱えます。

  1. ComPtr<ID3D12Device> pDevice;

 

DirectX12のデバイスの作成

今回はDirectX12の初期化について記述していきます。
DirectX12は初期化が少し長いので、皆さん頑張ってください…!

先ず最初にDirectX12を初期化するために下記が必要になります。

ライブラリファイル d3d12.lib
dxgi.lib
ヘッダーファイル d3d12.h
dxgi1_6.h

これらでDirectX12のライブラリとDXGIの機能を有効にします。

では早速、DirectxXでおなじみのデバイスの作成を行っていきます。

IDXGIFactory

とその前にIDXGIFactoryの作成を行っていきます。
ハードウェアに依存する低レベルな機能をサポートしています。
例えばモニターやグラフィックボードといったハードのスペックを取得できます。

  1. UINT dxgiFactoryFlags = 0;
  2. #if defined(_DEBUG)
  3. {
  4. // デバッグレイヤーの有効化
  5. ComPtr<ID3D12Debug> debugController;
  6. if (SUCCEEDED(D3D12GetDebugInterface(IID_PPV_ARGS(&debugController))))
  7. {
  8. debugController->EnableDebugLayer();
  9. dxgiFactoryFlags |= DXGI_CREATE_FACTORY_DEBUG;
  10. }
  11. }
  12. #endif
  13. ComPtr<IDXGIFactory6> pFactory;
  14. // DXGIFactory6の生成
  15. if (FAILED(CreateDXGIFactory2(dxgiFactoryFlags, IID_PPV_ARGS(&pFactory))))
  16. {
  17. return false;
  18. }

こうやってIDXGIFactoryを作ることで
デバイス作成時に使用するアダプターの取得などが可能になります。

又、後ほど出てくるSwapChainの作成にも必要になります。
今回は合わせてDirectX12のデバッグ機能を有効にしています。

これにより何か問題が起きた際にログを出力してくれます。

ID3D12Deviceの生成
  1. HRESULT hr;
  2. ComPtr<ID3D12Device> pDevice;
  3. // D3D12デバイスの生成
  4. D3D12CreateDevice(nullptr, D3D_FEATURE_LEVEL_12_1, IID_PPV_ARGS(&pDevice));

デバイスの生成はこれだけです。
これで自動的に使用可能なアダプター(グラフィックデバイス)を指定してくれます。
※第一引数で任意のアダプターを選択することも可能です。

 

1 2 3

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です