Tuto30

CBillboard の拡張クラスを用いて、圧縮画像を必要な時だけ 伸長して使用するサンプルです。

プロジェクトダウンロード

【解説】

実行画面


実行中に上下左右キーを押すと画面がスクロールします。
画面は、2048×2048ピクセルの画像をスクロールして表示します。

画像は、512×512ピクセルの16個の画像ファイルに分割されていて、
メモリ上に圧縮データが読み込まれます。そして、必要な部分だけが伸長され
テクスチャとして利用可能な状態となります。
こうする事でスクロールマップを効率的にメモリに配置します。


テクスチャの状態について

実行画面の右上隅の以下の画像は、メモリに配置された圧縮画像の状態を示しています。



画面上の16個の矩形は、分割されたマップ画像の一つ一つのファイルを表しています。
水色の矩形は圧縮されたままの画像を示し、白色の矩形は、伸長され利用可能なテクスチャ
を生成された画像を示します。

実際にウィンドウに表示されている部位は、図に示す赤い色の矩形で、その周囲の青っぽい
色の矩形と重なる画像が伸長処理されます。

画像の伸長は、CJITBillboard というクラスで実行されていて、伸長処理はアプリケーション
とは別のThread で実行されていて、デュアルコアCPUやHyperThreading に対応したCPUでは、
アプリケーションに負荷を感じさせません。

ただし、アプリケーション内で複数のCJITBillboard のインスタンスを持つ事は勧められません。
(インスタンス毎にThread を生成してしまう為)


class CJITBillboard

【概要】
 本プロジェクト内のクラス。
 Direct3D の 3D シーンに描画可能な ビルボードクラス。テクスチャは複数使用可能。

重要度メソッド名と解説アクセス
CJITBillboard(CD3DEnv *pEnv,int numTexture)
本クラスのコンストラクタ。描画環境へのポインタと使用するテクスチャの数を指定する。
public
~CJITBillboard()
デストラクタ
public
HRESULT SetTexture(DWORD dwTexNo, LPSTR fName)
テクスチャをファイル名で指定し、描画に使用できるようにする。
public
void Activate(DWORD dwTexNo)
指定された番号の圧縮画像を伸長しテクスチャとして利用可能にする。
public
void Inactivate(DWORD dwTexNo)
指定された番号のテクスチャを破棄し、ビデオメモリに空きを作る。
public
BOOL IsActive(DWORD dwTexNo)
指定された番号のテクスチャを確認し、使用可能であれば true を返す。
public

※重要度の意味:

◎これを知らないとこのライブラリを使えないもの。
○知っておいたほうが良いもの。
△知らなくても支障は無いもの。


CJITBillboard(CD3DEnv *pEnv, int numTexture)

引数:pEnv:このメッシュオブジェクトが使用する描画環境へのポインタ。
numTexture:使用するテクスチャの数を指定する。


コンストラクタ。使用するテクスチャの数を指定して、CBillboard クラスのオブジェクトを 生成する。


~CJITBillboard()

デストラクタ


HRESULT SetTexture(DWORD dwTexNo, LPSTR fName)

引数:dwTexNo:テクスチャ番号を指定。
fName:指定したテクスチャ番号へ読み込むテクスチャのファイル名を指定。


読み込むファイルを指定する。ファイルはメモリに読み込まれる。


void Activate(DWORD dwTexNo)

引数:dwTexNo:テクスチャ番号を指定。


指定された番号のテクスチャを伸長して、使用可能にする。
伸長は別スレッドで非同期的に実行されるので、すぐに使用可能にはならない。


void Inactivate(DWORD dwTexNo)

引数:dwTexNo:テクスチャ番号を指定。


指定された番号のテクスチャを破棄する。
メモリ解放は別スレッドで非同期的に実行される。


BOOL IsActive(DWORD dwTexNo)

引数:dwTexNo:テクスチャ番号を指定。


指定された番号のテクスチャが使用可能か返す。使用可能であれば true そうでなければ false を返す。