LoginSignup
0
0

「WRL+DirectX」で始めたプロジェクトを「C++/WinRT + DirectX」に移行する方法 - 準備編 -

Last updated at Posted at 2023-12-02

レイチェルです。
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)...] の順に選択してください。

image.png

次に、[参照] を選択して検索ボックスに Microsoft.Windows.CppWinRT と入力してください。
すると一番目に目的のパッケージが出てくるのでインストールしてください。

image.png

プリコンパイル済みヘッダーファイルを用意しよう

ファイルの作成

皆さん プリコンパイル済みヘッダーファイル ってご存知ですか?
僕は知らなかったですはい。
詳しいことはプリコンパイル済みヘッダー ファイル のページを参照してくださいな。
本記事では、プリコンパイル済みヘッダーに必要なライブラリをあらかじめ書き込んでおきます。

まずはプロジェクト直下でいいので [追加(D)] → [新しい項目(W)...] と進んでください。

image.png

[ヘッダーファイル(.h)] を選択します。名前は一般的にpch.hがよく用いられるみたいなので、ここでもそうします。

image.png

プロジェクトの設定

[プロジェクト(P)] → [プロジェクト名 のプロパティ(P)] と進みます。

image.png

[構成プロパティ] → [全般] → [Windows SDK バージョン]10.0.17134.0 以上に設定します。
Windows10 をお使いの方は 10.0 (最新のインストールされているバージョン) とかでいいと思います。

image.png

次に、[構成プロパティ] → [C/C++] → [プリコンパイル済みヘッダー] → [プリコンパイル済みヘッダー]作成 (/Yc)にします。
また、[プリコンパイル済みヘッダー ファイル]pch.h と入力します。

image.png

pch.hの中身を埋める

作成したpch.hによく使いそうなヘッダファイルのインクルードを書いておきます。
中身は皆様のお好みで構わないと思います。
ただ、唯一必須なのは winrt/base.h のインクルードです。
また、using winrt::com_ptr を書いておくと com_ptr を使用する際にいちいち winrt:: を書かずに済むためいいかもしれません。

以下は、僕の今現在のpch.hの中身です。

#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;

次回予告

次回は、元々WRLComPtrを使用していたプログラムを winrt::com_ptrを使うように改造していきます!

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0