DirectX12 の機能の1つで、 D3D11On12 のお試し第2回です。
前回のブログ記事でピンと来ている人もいるかもしれません。DirectX12 の場合でも今までと同様で、文字列を描画するのに手間がかかります。 DirectXTKなど他のオープンソースライブラリの力を借りれば、比較的簡単にパフォーマンスと文字列描画を自分のアプリケーションに取り込むことが出来ます。しかし、外部ライブラリ使用までの手間は掛けたくないので、簡単に文字列を書きたい、という点では今回の方法は検討する価値があるかもしれません。
文字列の描画
文字列の描画には、前回使用した Direct2D と DirectWrite の機能を用います。ただしDirectX12 のほうに直接 Direct2D の描画は出来ないようです。D3D12 のデバイスや、コマンドキューから IDXGIDevice を取得できず、Direct2Dデバイスを作れないからです。
そこで、登場するのが D3D11On12 の機能です。以前に説明したように DirectX11 の API セットを提供してくれるものですが、ここで使った ID3D11On12Device から、 IDXGIDevice を取得することが出来ます。
IDXGIDevice が取得できれば、あとは前回の内容と同じようにソースコードを実装していけば、DirectX12 で描画している画面の上に文字列や図形を描画することができます。
描画結果
Direct2D の機能で、簡単に角丸の四角形を描くこともできます。
まとめ
今回はなるべく外部ライブラリ依存なしでの DirectX12 のアプリケーションでテキストを描画することを目指しましたが、 D3D11On12 の手続きをしたり、Direct2D, DirectWrite の初期化の手間を考えると、外部ライブラリを使った方が楽となる可能性は十分にありそうです。残念ですが。
D3D11On12 を使うと、このような使い方も可能という点を説明したところで今回のまとめにしておきます。