名古屋 美容整形若返り

できるだけ面倒じゃない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