##はじめに
DirectX12の個人的なメモ。
概念的なところから、実装まで覚えたことをここに書いていこうと思います。
※あくまで個人的な解釈なので、誤った情報もある可能性があります。
##リンク集
##概念
DXGI
より低レベルな部分を管理し、情報を提供するレイヤー?各バージョンのDirectXで使用することができるらしい。
アダプターの列挙やスワップチェインの作成等をしてくれる。
-
IDXGIFactory~
DXGIの各種オブジェクトを生成するクラス(だと思う・・・)。
現在はIDXGIFactory無印~7まで存在するらしい。末尾の数字が上がるとできることが増えるが、OSのバージョン依存がでてくるっぽい。
こちらのブログに詳しいことが書いてあった。
デバイスクラスとは?
どうやらDirectX12以前から存在する概念らしい。要は接続されているグラフィックボードの情報を詰め込んだクラス。
サーフェス(surface)
ざっくり言うとリソースを格納するメモリのこと言うらしい
フリップモデル
参考になりそうなサイト
https://docs.microsoft.com/ja-jp/windows/desktop/direct3ddxgi/dxgi-flip-model
https://docs.microsoft.com/ja-jp/windows/desktop/direct3ddxgi/for-best-performance--use-dxgi-flip-model
コマンドキュー、コマンドリスト、コマンドアロケータ
/書く予定*****/
##関数たち
IID_PPV_ARGS
引数に与えたインターフェイスのGUIDとポインタをカンマ区切りで返すマクロ。
D3D12CreateDevice
デバイスを作成する関数
- 第1引数 IUknown *pAadapter
使用するデバイスを指定します。NULLを指定すると、デフォルトのアダプターが選択されます。
デフォルトのアダプターというのはIDXGIFacory1::EnumAdaptersで一番最初に取得できるアダプター。 - 第2引数 D3D_FEATURE_LEVEL *MinimumFeatureLevel
デバイス作成をするために必要な最小の機能レベル。シェーダーモデルとかDirectXのバージョンとかを指定。
CreateDXGIFactory1
IDXGIFactoryインターフェイスを生成する。末尾の数字は1に限定されていないようで、自分が見たサンプルとかだとIDXGIFactory4とかを渡してたりしてた。
- 第1,2引数 REFIID riid, void **ppFactory
IDXGIFactory1のGUIDとポインタを指定する。 - 戻り値 HRESULT
S_OK か DXGI_ERRORのいずれかを返す。
CreateCommandQueue
文字通りコマンドキューを作成する関数
- D3D12_COMMAND_LIST_TYPE Type
コマンドリストのタイプ
詳しいことはこちらのブログに書いてあった - INT Priority
プライオリティなので処理優先度だと思う。自分は今の所何も指定してない - D3D12_COMMAND_QUEUE_FLAGS Flags
デフォルトか、タイムアウトを無効にするパラメータの2種類が存在する。 - UINT NodeMask
GPU複数存在する場合に使うらしい
CreateSwapChain
スワップチェーンを作成する関数
全画面とウィンドウモードだとフロントバッファが違うらしい。一応覚えておこう。
- 第1引数 IUnknown *pDevice
描画関係を担っているクラスなのでDirectX12だとCommandQueue、DirectX11以前だとDeviceクラスを設定する。
- UINT BufferCount
バッファの数(フロントバッファ込み) - DXGI_SWAP_EFFECT SwapEffect
サーフェスの後処理を指定する - UINT Flags
スワップチェーンがどういった挙動をしてほしいかを細かく指定できる。必要になったらドキュメント読もう
DXGI_MODE_DESC
バックバッファの表示モード
- DXGI_RATIONAL RefreshRate
リフレッシュレートだけど特になにも指定しなくてもいいかも - DXGI_FORMAT Format
表示のフォーマット。詳細はDXGI_FORMATを参照(多い) - DXGI_MODE_SCANLINE_ORDER ScanlineOrdering
走査線の描画順とかを指定できるけど、いじる機会がなさそう - DXGI_MODE_SCALING Scaling
モニターの解像度によって何やらスケーリングするらしいのだけれども今の所特に使いそうもない・・・
DXGI_SAMPLE_DESC
マルチサンプリングの設定
- UINT Count
サンプル数 - UINT Quality
マルチサンプリングのクオリティ
DXGI_USAGE
バックバッファのメモリに関する細かいことを指定できる
DXGI_SWAP_EFFECT
描画後のバッファ(?)の処理方法を指定する