この記事は、Qiitaに掲載の記事を再編集したものです。
レイチェルです。
DirectX12の勉強を始めたばかりの時、ネットに転がってる情報が大体 「WRL+DirectX」 で開発をするものばかりでした。
そんなわけで、自分も例に漏れずWRLのプロジェクトを作成して開発を開始しました。
WRLで開発を行う一番の目的は、ComPtr クラスです。
DirectXのAPIはCOMオブジェクトとして実装されており、WRLではCOMオブジェクトをいい感じに扱う機能が提供されております。
その1つがCOMオブジェクトのスマートポインタである ComPtr クラスというわけです。
自分はCOMに関しても初見プレイだったので、Microsoftのドキュメントを漁りながら勉強していました。 そんなある日、COM を使用した DirectX のプログラミングというページで以下の記載を見つけました。
「 C++/WinRT で COM コンポーネントを使用 する」トピックでは、 C++/WinRT を使用して DirectX API (およびすべての COM API) を使用する方法を示します。 これは、最も便利で推奨されるテクノロジです。
ちょっと待った!
C++/WinRTって何!?
もしかしてWRLってクソ古い!?
時代はC++/WinRTなんか???
というわけで開発は途中ですが、WRLからWinRTに移行を行うこととなるのでした…
今回は、その準備段階です。
C++/WinRT のパッケージをインストールしよう!
本記事ではVisual Studio 2022を使用している場合の手順をご紹介いたします。
まずはNugetパッケージ
を使ってC++/WinRT
をプロジェクトにぶち込みます。
この手順はWRL から C++/WinRT への移行というページが参考になります。
[プロジェクト] → [NuGet パッケージの管理(N)...] の順に選択してください。
次に、[参照] を選択して検索ボックスに Microsoft.Windows.CppWinRT と入力してください。
すると一番目に目的のパッケージが出てくるのでインストールしてください。
プリコンパイル済みヘッダーファイルを用意しよう
ファイルの作成
皆さん プリコンパイル済みヘッダーファイル ってご存知ですか?
僕は知らなかったですはい。
詳しいことはプリコンパイル済みヘッダー ファイル のページを参照してくださいな。
本記事では、プリコンパイル済みヘッダーに必要なライブラリをあらかじめ書き込んでおきます。
まずはプロジェクト直下でいいので [追加(D)] → [新しい項目(W)...] と進んでください。
[ヘッダーファイル(.h)] を選択します。名前は一般的にpch.hがよく用いられるみたいなので、ここでもそうします。
プロジェクトの設定
[プロジェクト(P)] → [プロジェクト名
のプロパティ(P)] と進みます。
[構成プロパティ] → [全般] → [Windows SDK バージョン] を 10.0.17134.0 以上に設定します。
Windows10 をお使いの方は 10.0 (最新のインストールされているバージョン) とかでいいと思います。
次に、[構成プロパティ] → [C/C++] → [プリコンパイル済みヘッダー] → [プリコンパイル済みヘッダー] を作成 (/Yc)にします。
また、[プリコンパイル済みヘッダー ファイル] に pch.h と入力します。
pch.hの中身を埋める
作成した pch.h によく使いそうなヘッダファイルのインクルードを書いておきます。
中身は皆様のお好みで構わないと思います。
ただ、唯一必須なのは winrt/base.h のインクルードです。
また、using winrt::com_ptr を書いておくと com_ptr を使用する際にいちいち winrt:: を書かずに済むためいいかもしれません。
以下は、僕の今現在のpch.hの中身です。
C++#pragma once
#include "targetver.h"
#include <windows.h>
#include <Unknwn.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
#include <winrt/base.h>
#include <d3d12.h>
#include <DirectXMath.h>
#include <D3Dcompiler.h>
#include <dxgi1_4.h>
using winrt::com_ptr;
using namespace DirectX;
次回予告
次回は、元々 WRL の ComPtr を使用していたプログラムを winrt::com_ptr を使うように改造していきます!