【DirectX12】DirectX12の初期化

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));

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

 

1 2 3

コメントを残す

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