
1. 今週の予定
今週は3カ月に一回のお休みの週ですが、先週DirectX12の勉強をしなかったのでそれをやります。
2. DirectX12の勉強
8.1 Lötwig Fusel氏のD3D12 Beginners Tutorial [D3D12Ez]を勉強する
8.1.1 Resizing the SwapChain | D3D12 Beginners Tutorial [D3D12Ez] [1]を勉強する
まずm_shouldResizeの値をFalseに変更していました。

ここまでは先週の勉強でやっておくべきでしたね。
次ですが、WindowのResizeを実装します。

Main()関数の中でUpdate()関数の後に実装しました。
Testします。
WindowのSizeを変更すると
以下の場所でErrorになりました。

Error Messageを見るとSwap Chainの時に出たErrorと全く同じErrorが表示されています。
解決策ですがResize()関数を呼ぶ前にFlush()関数を呼ぶようにします。

ここでCommentを追加しています。


Commentを書くのは面倒ですがまあこれもやっておきましょう。
そしてもう一回Testしています。
今度はWindowのSizeを変更してもErrorになりませんでした。
NvidiaのNsight Graphicsでテストします。

おお、既に文字が小さい。
WindowのSizeを変更しました。

おお、文字の大きさはそのままです。
WindowのSizeが小さくなっても文字が読めます。
これでもう完成かと思ったんですが、Tutorialは後10分位残っています。
何と、まだ解決しなければならないあるIssueがあるそうです。
それは以下のWarningを直す事だそうです。



このWarningは今の時点では問題では無いですが、後で大問題に発展するそうです。
なので今のうちに直しておく必要があるそうです。
Output Windowが0ってのが既に意味が分かりません。
Tutorialの説明を聞いてみます。
WindowのSizeをMinimizeするとWindowのSizeは0になるんですが、この時にBufferのSizeも0になります。
これがWarningの原因だそうです。
そしてDebugしてm_widthとm_heightの値を確認してみると
以下の時点で

m_widthとm_heightの値は0になっています。

これの解決方法はこれらの値が0になった時にCatchを使用すればよいそうです。
で値が0になったかどうかはどうやって確認するんでしょうか?
Clampを使用して確認します。
以下のようにしました。

いや、これClampじゃないじゃん。
この部分の理論の展開は追いきれませんでした。
Tutorialの説明は早口なだけでなく文法もおかしくてでよく分かりません。
WindowのSizeを0にしてそれからMaximizeした場合にも対応するように実装を以下のように変更しました。

TestしたらWidthとHeightの位置が反対だと気付きました。
ので直します。

もう一回Testしています。
WindowのSizeをMinimizeしてもMaximizeしてもWarningは出ません。
更に普通にWindowのSizeを変更した場合は、普通にResize()関数が呼ばれています。
出来てるみたいです。
以上でした。
実装は来週やります。
2.2 「DirectX 12の魔導書」を勉強する
2.2.1 「5.5 Texture Buffer」を勉強する
Texture用のBufferはID3D12Resource型のObjectで作成します。
作成するためにはID3D12Deviceにある関数、CreateCommittedResource()を使用するそうです。
作成したTexture用のBufferをCPUからGPUに送るためには以下の2つの方法があるそうです。
- WriteToSubresource()関数を使う
- Map()関数を使用する
WirteToSubresource()関数は比較的使用しやすいそうですが効率は悪い場合があるそうです。
ここではWriteToSubresource()関数を使用するそうです。
2.2.2 「5.5.1 Texture Bufferの作成」を勉強する
ここではCreateCommittedResource()関数を使用してTexture用のBufferを実際に生成するための実装方法を説明していました。
まずCreateCommittedResource()関数のArgumentに使用するHeapを作成します。

更にCreateCommittedResource()関数のArgumentに使用するResourceの設定をD3D12_RESOURCE_DESC型のStructを使用して作成します。

Texture用のBufferはID3D12Resource型のObjectで作成します。
![]()
これらを使用してCreateCommittedResource()関数でTexBuffを初期化します。
Sample Codeでは以下のようにやっていました。

「5.5 Texture Buffer」はこれで終わりでした。
一寸短いですが、予定の範囲の勉強は終わったのでここまでとします。
実装は来週やります。
3. まとめと感想
なし
4.参照(Reference)
[1] Lötwig Fusel. (2023, June 21). Resizing the SwapChain | D3D12 Beginners Tutorial [D3D12EZ] [Video]. YouTube. https://www.youtube.com/watch?v=QOT_OzPJl6c