できるだけ面倒じゃないDirectXの初期化
初期化はともだち。こわくないよ。
はじめに
DirectX9(August 2009)が対象です。
★注意★ : かなりイレギュラーなやり方なので、正しい初期化は他サイトを回ってください。
元ネタは2chのメガデモスレ。
DirectXの初期化が面倒なので自分のメモ用ですが、参考になればええですなー。
ソース
初期化してフルスクリーンにするなら苦労しません。以下のようになります。
ndx.cpp
ndx_nocomment.cpp(コメントなし)
VCでコンパイルしてください。(ex : cl ndx.cpp )
実行するとフルスクリーンになって白い画面がでます。
ループかましてロスト対応のテンプレ入れても、100Line未満です。
あと、ウィンドウプロシージャがありません。
解説
簡単に手順を解説します。以下の通りとなります。
1) CreateWindowExAでエディットコントロールとしてHWNDを取得
2) D3D9オブジェクト取得
3) D3DDevice取得
※取得物はRELEASEしても良いし、D3D9.DLLアンロード時に任せるなど。これは術者のモラルにかかってきます。
ポイントはCreateWindowExAです。
"edit"でウィンドウを作成するとエディットコントロールとして、HWNDが取得できます。一撃です。
DirectXの初期化に欲しいのは有効なHWNDなので、取得できればよいです。RegisterClassも必要ないです。
HINSTANCEが欲しいならGetModuleHandle(NULL)で取得します。
実質メッセージの処理をしないけど動いてくれます。
また、Graphicsに限らず、DirectSoundもDirectInputも初期化できます。
もし、リソースの管理を行う位そこそこ大きいアプリ作るなら、
この方法よりもきちんと作ったほうが良いかもしれません。
課題やら問題点
以下に対処が足りない事や、問題点を列挙します
・HALしか初期化していない(3行くらい足せばHELを追加できるけど省いてます)
・スクリーンセーバーが防御できない(WindowProcで抑えないとだめです)
・デュアルスクリーンに対応していない(ディスプレイ列挙して作成先を選ばないといけません)
・32bit(A8R8G8B8)限定
・Vista, Win7に対応しているか未テスト(持ってないです)
まとめ
上記以外にもIlligalなケースは大量にあると思います。
そもそもエディットコントロールを使う影響範囲が不明。でも外国のmegademo界隈では当たり前だったり。
まあ、一人での影響範囲洗い出しは無理なので割り切ります(キリッ
サンプル
vs, psともに2.0必須です。m.batをVCのPATHが通ってるところで実施して、実行ファイルを作成してください。
tndx.zip
おわり。
Back
2009/12/18 Gyabo