📖

DirectX12で1からフレームワーク制作(1)

2024/03/09に公開

はじめに

こんにちは、はろ~です。
ゲーム開発と描画処理の研究をしています。
今回は、プロジェクトの環境設定からウィンドウの初期化までしていきます。
開発環境はVisualStudio2022です。
Github:https://github.com/nakanoyui/DirectX12Framework

環境構築

まずは、新規プロジェクトを作成していきましょう。

空のプロジェクトを選択してください。

プロジェクト名:FrameworkDX12(ここは自身の好きな名前で大丈夫です)
場所:適当で大丈夫です。
ソリューション名:FrameworkDX12(ここも自身の好きな名前で大丈夫です)
ソリューションとプロジェクトを同じ…:チェックを付けてください。

新規プロジェクト作成

ソリューションエクスプローラーの「FrameworkDX12」以下に「Source」フォルダを作成し、その下に「Application」と「Graphics」を追加してください。「Application」にはインゲーム処理。「Graphics」は描画関係の処理を入れていきます。
(基本的に日本語は使わないように意識していきましょう。)

「Application」を右クリック→追加→新しい項目を左クリック

C++ファイルを選択し、追加をクリック。
名前:Application.cpp
場所:Source/Application(自身でフォルダを作成してください。VisualStudio上と同じようにしておくことをお勧めします。)
ヘッダーも同様の手順で作成してください。
※今後は.cppと.hの作成手順は割愛します。

最初にコンソール実行ではなくウィンドウ実行で制作していきたいので、ソリューションを右クリックし、プロパティを選択してください。

構成プロパティ→リンカー→システム→サブシステムをWindowsに変えておいてください。

ウィンドウの初期化

Sourceフォルダ以下にSystemフォルダを新規作成し、Windowフォルダを作成してそこにWindow.cpp/hを作成してください。

Window.cppに以下プログラムを実装してください。

次に.hでWindowクラスを作成してCreate関数の宣言を書いて定義を.cppに書いてください。

Window.cppの実装を以下の通りです。


先程実装したWindowクラスをApplication.hに宣言を行ってください。Applicationに関してはシングルトンにしておきます。※無暗やたらにシングルトンにするのは推奨しません。

Application.cppにWindowのCreate関数を呼んであげて実行してみてください。
一瞬だけウィンドウが表示されると思います。※表示されない場合はどこかの実装が間違えてる可能性があります。

ずっとウィンドウを表示してあげたいので処理を追加します。Window.hにProcessMessage関数を追加。

Window.cppで中の実装を書いていきます。

Application.cppのメインループで呼び出してあげてください。

これで実行すればウィンドウがずっと表示されているはずです。

プリコンパイル済みヘッダー

最後に現在Windows.hやcassertなど色々な場所で使いそうなプログラミングを一々インクルードするのはめんどくさいですよね。なので、プリコンパイル済みヘッダーとして作成し、使用しちゃいましょう。
Sourceフォルダ以下にPch.cpp/hを追加してください。

Pch.cppを右クリックしプロパティを選択。構成プロパティ→C/C++→プリコンパイル済みヘッダー→プリコンパイル済みヘッダーを作成/(Yc)プリコンパイル済みヘッダーファイルをPch.hに変更してください。

Pch.cppで.hをインクルードしておいてください。

次はソリューション(FrameworkDX12)を右クリックでプロパティを開いて、構成プロパティ→C/C++→プリコンパイル済みヘッダー→プリコンパイル済みヘッダーを使用/(Yu)プリコンパイル済みヘッダーファイルをPch.hに変更してください。

ビルドしてエラーが出なかったら成功しています。※エラーが出る場合は作成か使用の設定を間違えています。

ソリューション(FrameworkDX12)を右クリックでプロパティを開いて、構成プロパティ→C/C++→詳細設定→必ず使用されるインクルードファイルにPch.hを追加

構成プロパティ→C/C++→全般→追加のインクルードファイルに./Sourceを追加。

最後にPch.hにインクルードするプログラムを記載します。今回は汎用的なものを事前にインクルードします。


これで事前にインクルードしたものが各々で使えるようになっているので、Windows.cpp/hとApplication.cpp/hでインクルードが不必要になったものは削除しておきましょう。

最後に

今後も続きを記事にするつもりですが、更新頻度に関しては不定期になります。(気が向いたら更新します)
著者は学生なので(保険)、多々間違える事があると思いますがその時は温かい目で見ていただき指摘してくださると助かります。

Discussion