DirectX-概要-

DirectXの必要事前知識

DirectXを使用するにあたり、知っておいた方がいい情報をいくつか紹介します。

静的ライブラリ

静的ライブラリ(libファイル)はオブジェクトファイルの集まりです。
スタティックライブラリとも呼ばれています。
静的ライブラリの特徴は「処理のブラックボックス化」「再利用」です。

処理のブラックボックス化

ライブラリファイルにすることで関数内で行っている処理の内容を
利用者にわからないようにします。
これで、利用者が勝手に改変することを防げるので安定した技術提供と
技術漏洩を防ぐことができます。
ブラックボックス
ブラックボックスとは内部で何が行われているか分からなくても
使い方さえ分かっていたら十分な結果を得られるという考え方です。
反語としてホワイトボックスがあります。

再利用

ライブラリファイルは再利用をすることを前提に作成するので。
よく使われると思われる処理を効率よく使うために設計、実装を行います。
ゲームなどでは描画、キー入力、サウンド、当たり判定、
ファイル管理等、どのゲームでも使用する機能をライブラリファイルとして作成し、
いくつものゲームで使用します。

静的ライブラリの使用方法

静的ライブラリを使用するためには#pragma comment プリプロセッサを使用します。

#pragma comment
概要 #pragma commentはいくつかの種類があり、
libファイルのリンカでの使用宣言や、
リンカオプションの指定をすることが可能です。
書式(libファイル使用) #pragma comment(lib, ライブラリのパス)
使用例 #pragma comment(lib, "d3d9.lib")
DirectXはヘッダファイルとlibファイルを提供しており、 プロジェクト内で使用を宣言することで利用が可能となります。 例えばDirect3DCreate9関数を使用するためには 宣言部分があるd3d9.hと定義部分があるd3d9.libの使用宣言が必要です。

描画のしくみ

DirectXはフロントバッファバックバッファを使用して描画を行っています。
フロントバッファは実際に画面に表示されるバッファ、
バックバッファは次に画面に表示するバッファです。
ひとつのバッファで描画を行うと、表示されてる画面に書き換え中の内容が
反映されてしまい、スムーズな描画を行うことができません。
そこで、複数のバッファを使用することでスムーズな描画を可能にしています。

directx_0006

DirectXの画面切り替えの方法は「フリップ」と「コピー」がありますが
現状で違いを知る必要はありません。
この「フリップ」や「コピー」を使用した画面更新の方法を
スワップエフェクトと呼びます。

HAL(Hardware Abstract Layer)

HALはDirectGraphicsの初期化の際に出てきます。
HALとはハードウェアとソフトウェアの間に入り
ハードの種類による差異を吸収してくれるソフトのことです。
HALがあることによってソフトウェア側でハードの差異を意識することなく
処理を書くことができます。

directx_010

ハードウェア処理とソフトウェア処理

ハードウェア処理とソフトウェ処理は以下のような特徴があります。

特徴
ハードウェア処理 ハードウェア処理の特徴は特定の機能に特化しており
それに関する処理の速度が速いことです。
ただ、専用処理を行っているので変更することは容易ではありません。
ソフトウェア処理 ソフトウェア処理はアプリ側のプログラムのことを指します。
開発側の技量にもよりますが、ハードウェア処理と比較して速度は遅いです。
ただ、自分たちのアプリの状況に合わせて処理を変更することが容易です。
まとめ
ハードウェア 長所 処理速度が速い
短所 処理の改変が難しい
ソフトウェア 長所 処理の改変が容易
短所 処理が遅い(ある程度改善は可能)

ディスプレイアダプタ

ディスプレイアダプタはグラフィックボードやビデオアダプタと同じ意味です。
これらは3D処理に特化しているハードウェアです。

DirectX

DirectXはMicrosoftが提供するゲームライブラリです。
最新のバージョンはDirectX12(2017/04)までリリースされていますが
情報の少なさから普及率は高くなくDirectX9~11の利用が多いです。

DirectXの機能

DirectXにいくつかの機能があり、それぞれに名称がついています。

DirectGraphics

DirectGraphicsは3Dや2Dの描画を行うためのグラフィックAPIのことです。
DirectXのバージョンが変更された場合は必ずここが変更されます。
基本的には3D描画を主としていますが、2D描画も行うことができます。

DirectInput

DirectInputはキーボードやマウス、ゲームパッドなどの入力機器の情報を
処理することができるインプットAPIのことです。

DirectSound

DirectSoundはBGMやSEを再生するためのサウンドAPIのことです。
※MicrosoftはDirectSoundに変わるサウンドAPIのXAudio2を推奨している

DirectX9と10以降

DirectXはバージョンごとに仕様が変わりますが
特にDirectX9と10ではDirectGraphicsの内容が大きく異なります。
その違いは「プログラマブルシェーダが必須か否か」です。
プログラマブルシェーダとはプログラム可能なシェーディング機能のことで、
DirectX10以降はプログラマブルシェーダの使用が必須となっています。
しかし、DirectX9ではプログラマブルシェーダの代わりとなる
固定機能パイプラインと呼ばれる機能があり、
シェーダが分からなくてもある程度の作りこむことができました。
プログラマブルシェーダは技術的要求が高いので、
DirectXを初めて使用する場合、まずはDirectX9から始める人が多いです。