画面のクリア
前項ではRenderTargetViewの生成する処理の実装を記述しました。
次はRenderTargetViewを使って画面を任意の色に塗り潰してみましょう!
DirectX11.h
// DirectX11クラス class DirectX11 { public: DirectX11(); ~DirectX11(); // 初期化 bool Initialize(Window& window); // 解放 void Finalize(); // 画面のクリア void ClearTarget(float r, float g, float b); // 画面のフリップ void Present(); // ~ 以降は前回までのコード ~
DirectX11.cpp
// 画面のクリア void DirectX11::ClearTarget(float r, float g, float b) { const float color[4]{ r, g, b, 1.0f }; m_pDeviceContext->ClearRenderTargetView(m_pRenderTargetView, color); } // 画面のフリップ void DirectX11::Present() { m_pSwapChain->Present(1, 0); }
次に画面のクリアとフリップ処理を実装してみました。
実装しただけでは動かないので実際に使ってどうなるか確認してみましょう。
main.cpp
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // ~ ここまで前回の記事のコード ~ // メインループ while (!window.IsQuitMessage()) { // メッセージの更新 if (!window.UpdateMessage()) { // 青色に画面をクリアする directX.ClearTarget(0, 0, 1); // 画面の内容をフリップする directX.Present(); } } directX.Finalize(); return 0; }
Windowの作成で作ったmain.cppのメインループに組み込んでみました。
これで画面のクリアとフリップが実行されたはずです!
実際に実行して画面の内容を見てみると…
画面が真っ青になりました。
これはdirectX.ClearTarget(0, 0, 1)でr, g, bを0, 0, 1と設定しているからです。
試しに数値の配分を自由に変えてみましょう。
色が変わってプログラムが正しく動いているのが分かると思います。
では次にdirectX.Present()をコメントアウトしてみるとどうなるでしょうか?
何と画面の色が変わらなくなります。
何故、Presentを呼ぶのをやめると色が変わらなくなるのでしょうか?