昨日その2を書いたのに、保存するを選んだ瞬間サーバーメンテになって凹んだ…orz
とりあえず、前回やった2D_FontSpriteのソースでも眺めて見ませう。
38 : WINAPI WinMain
お決まり。問題なし。
40 : ICore *pCore = NULL; //ウィンドウ管理インターフェイス
41 : IGraphicCard *pGraphicCard = NULL; //ビデオカード管理インターフェイス
42 : IDevice *pDevice = NULL; //デバイス管理インターフェイス
43 : IRender *pRender = NULL; //レンダラーインターフェイス
44 : IFontSprite2D *pFontSpr = NULL; //フォントスプライト管理インターフェイス
45 : IFileManager *pFileMgr = NULL; //ファイル管理クラス
上4つはSeleneの基礎の基礎でしょう。これがないと何も出来ないやつ。
理解できなくてもこのまま書けばok。
下2つはフォントとファイル管理です。
52 : System::Initialize();
200 : System::Finalize();
Seleneの初期化と開放。最初と最後に必ず書く。
60 : pCore = System::CreateCore();
ウィンドウ1つにつき1つのコアが取得できるらしい。
67 : pCore->Initialize( "Selene Sample Program", FRAME_RATE_60 )
どう見てもウィンドウタイトルとフレームレートを渡している。
ウィンドウを初期化する。
ちなみに、フレームレートの種類。
・FRAME_RATE_60, // 1フレーム1/60
・FRAME_RATE_30, // 1フレーム1/30
・FRAME_RATE_20, // 1フレーム1/20
・FRAME_RATE_15, // 1フレーム1/15
上記4つがenumで定義されている。
76 : pGraphicCard = pCore->CreateGraphicCard( GRAPHIC_CARD_DEFAULT_NO );
グラフィックカードの管理なので、性能なども取得できるらしい。
ちなみに、
// 通常GraphicCardNoにはGRAPHIC_CARD_DEFAULT_NOを指定します。
// 「NV PerfHUD」のインストールされた環境では、
// GRAPHIC_CARD_NV_PERF_HUDを指定することでそれを有効に出来ます。
とかある。うほっ、これはいい機能~!NV PerfHUDについては>www.shader.jp/xoops/html/masafumi/directx9/fxcomposer/fx007.htm
86 : pCore->Start( SCREEN_WIDTH, SCREEN_HEIGHT, true );
ウィンドウ作成。引数は、ウィンドウサイズとウィンドウモードフラグ。
92 : pFileMgr = pCore->CreateFileMgr();
94 : pCore->SetFileManager( pFileMgr );
96 : pFileMgr->SetCurrentPath( "font" );
フォルダを指定しとけば、ファイルパスとか気にならないって代物っぽい。
104 : pDevice = pGraphicCard->CreateDevice();
112 : pRender = pDevice->CreateRender();
デバイス作成とレンダラー取得。おまじないおまじない。
118 : pFontSpr = pRender->CreateFontSprite2DFromFile( "Font.sff", "tga", FONT_MAX );
Seleneに付属のFontUtilityで生成した定義ファイルとテクスチャを使って、高速に文字列の描画を行うことが可能って事らしい。
129 : pCore->Run()
メインループ。この中でフレーム制御とか色々勝手にやってくれて便利。
136 : pDevice->Clear( 0x00303030 );
145 : pRender->Begin();
156 : pRender->End();
デバイス(バックバッファ)を初期化して、レンダラーに描画の開始と終了を伝えている。
当然、BeginとEndの間に描画しないと意味なし。
147 : pRender->SetDrawType( DRAW_TYPE_BLEND );
描画タイプを指定。
・DRAW_TYPE_NORMAL, ///< 通常描画
・DRAW_TYPE_BLEND, ///< 半透明描画
・DRAW_TYPE_ADD, ///< 加算描画
・DRAW_TYPE_ADD_NOALPHA, ///< 加算描画(アルファ値無効)
・DRAW_TYPE_SUB, ///< 減算描画(アルファ値無効)
・DRAW_TYPE_SUB_NOALPHA, ///< 減算描画(アルファ値無効)
・DRAW_TYPE_MULTIPLE, ///< 乗算描画
・DRAW_TYPE_SCREEN, ///< スクリーン描画
お好きなものをどうぞ。
151 : pFontSpr->Rendering();
フォントスプライトをレンダリング(描画)
幾ら裏に描画しても、レンダリングしないと見えないよ。
163 : pFontSpr->Begin();
166 : pFontSpr->DrawString( "さんぷるテキスト", CPoint2D<Float>( 100, 100 ), CColor(255,255,255,255) );
167 : pFontSpr->DrawString( "ハンカクもかけます", CPoint2D<Float>( 100, 130 ), CColor(255,255,255,255) );
168 : pFontSpr->DrawString( "ABCabcABCabc012012", CPoint2D<Float>( 100, 160 ), CColor(255,255,255,255) );
171 : pFontSpr->End();
上のBegin-Endと同じ。
フォントスプライトへの描画。
ここからは終了処理。
// ファイルマネージャー解放
176 : SAFE_RELEASE( pFileMgr );
// フォントスプライトの解放
179 : SAFE_RELEASE( pFontSpr );
// レンダラーの解放
182 : SAFE_RELEASE( pRender );
// デバイスの解放
185 : SAFE_RELEASE( pDevice );
// グラフィックカードの解放
188 : SAFE_RELEASE( pGraphicCard );
// コアの解放
192 : SAFE_RELEASE( pCore );
多分、取得(生成)した逆順で開放したほうがいいと思う。
いきなりコアを開放したら、その下のデバイスやグラフィックカードが迷子になりそうなので。
(そうなってもきちんと開放できるように内部ではなっていると思うけど、精神的に)
こんなとこかな。
なんか、コメント振ってくれてるんでそれ読めば理解できるな…書いた意味が…orz
基本的にF12で何とかなるかな。
今回のサンプル
gamdev.org/up/img/9629.zip
PR