DirectX-概要-

■DirectXの必要事前知識

●静的ライブラリ
	静的ライブラリ(libファイル)はオブジェクトファイルの集まりです。
	スタティックライブラリとも呼ばれています。

	・ライブラリファイルの特徴
		処理のブラックボックス化:
			ライブラリファイルにすることで関数内で行っている処理の内容を
			利用者にわからないようにします。
			これで、利用者が勝手に改変することを防げるので安定した技術提供と
			技術漏洩を防ぐことができます。

			※ブラックボックス
				ブラックボックスとは内部で何が行われているか
				分からなくても使い方さえ分かっていたら
				十分な結果を得られるという考え方です。
				反語としてホワイトボックスがあります。

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

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

		#pragma comment 概要:
			#pragma commentはいくつかの種類があり、
			libファイルのリンカでの使用宣言や、
			リンカオプションの指定をすることが可能です。

		#pragma comment 書式(libファイル使用):
			#pragma comment(lib, ライブラリのパス)

		#pragma coment 使用例:
			#pragma comment(lib, "d3d9.lib")

	DirectXはヘッダファイルとlibファイルを提供しており、
	プロジェクト内で使用を宣言することで利用が可能となります。
	例えばDirect3DCreate9関数を使用するためには
	宣言部分があるd3d9.hと定義部分があるd3d9.libの使用宣言が必要です。

●描画のしくみ
	DirectXの描画はフロントバッファバックバッファと呼ばれるバッファを
	使用して描画を行っています。
	フロントバッファは実際に画面に表示されるバッファ、
	バックバッファは次に画面に表示するバッファです。
	ひとつのバッファで描画を行おうとするとどうしても切り替えの瞬間がわかってしまい、
	スムーズな描画を行うことができません。
	ですが、複数のバッファを使用することでスムーズな描画を可能としています。

	directx_0006
	directx_0006

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

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

	directx_010
	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から始める人が多いです。