DirectX12の事前準備
事前準備はVisualStudioをインストールするだけです!
DirectX11に引き続きDirectX12もWindowsSDKに含まれています。
なのでVisualStudioさえあれば特にインストールなどを行う必要はありません!
前提条件
今回はComPtrというものを使用します。
詳細は割愛しますが、参照が無くなった時点で自動で解放してくれる機能です。
所謂スマートポインターです!
ComPtrという名前からも分かる通りCOMコンポーネント向けの機能となります。
これを使用するために下記の記述を行っています。
#include <wrl.h>
using Microsoft::WRL::ComPtr;
using namespace DirectX;
この用に記載することで下記のようにCOMオブジェクトのポインタを扱えます。
ComPtr<ID3D12Device> pDevice;
DirectX12のデバイスの作成
今回はDirectX12の初期化について記述していきます。
DirectX12は初期化が少し長いので、皆さん頑張ってください…!
先ず最初にDirectX12を初期化するために下記が必要になります。
ライブラリファイル | d3d12.lib dxgi.lib |
---|---|
ヘッダーファイル | d3d12.h dxgi1_6.h |
これらでDirectX12のライブラリとDXGIの機能を有効にします。
では早速、DirectxXでおなじみのデバイスの作成を行っていきます。
IDXGIFactory
とその前にIDXGIFactoryの作成を行っていきます。
ハードウェアに依存する低レベルな機能をサポートしています。
例えばモニターやグラフィックボードといったハードのスペックを取得できます。
UINT dxgiFactoryFlags = 0;
#if defined(_DEBUG)
{
// デバッグレイヤーの有効化
ComPtr<ID3D12Debug> debugController;
if (SUCCEEDED(D3D12GetDebugInterface(IID_PPV_ARGS(&debugController))))
{
debugController->EnableDebugLayer();
dxgiFactoryFlags |= DXGI_CREATE_FACTORY_DEBUG;
}
}
#endif
ComPtr<IDXGIFactory6> pFactory;
// DXGIFactory6の生成
if (FAILED(CreateDXGIFactory2(dxgiFactoryFlags, IID_PPV_ARGS(&pFactory))))
{
return false;
}
こうやってIDXGIFactoryを作ることで
デバイス作成時に使用するアダプターの取得などが可能になります。
又、後ほど出てくるSwapChainの作成にも必要になります。
今回は合わせてDirectX12のデバッグ機能を有効にしています。
これにより何か問題が起きた際にログを出力してくれます。
ID3D12Deviceの生成
HRESULT hr;
ComPtr<ID3D12Device> pDevice;
// D3D12デバイスの生成
D3D12CreateDevice(nullptr, D3D_FEATURE_LEVEL_12_1, IID_PPV_ARGS(&pDevice));
デバイスの生成はこれだけです。
これで自動的に使用可能なアダプター(グラフィックデバイス)を指定してくれます。
※第一引数で任意のアダプターを選択することも可能です。