01−05、TexBank



テクスチャのコンテナ

メタセコイアでは同じテクスチャを複数の材質に割り当てる場合が多くあります。
この材質データを参照して表示用のテクスチャデータを作ると、同じ内容のものを何個も作る事になり
ビデオメモリが無駄になります。最悪の場合、ビデオメモリが足りなくてアプリを実行できなくなくなる事態なども考えられます。
ですのでビデオメモリ節約のために、複数の材質から参照されていても同じファイルからは1個しか表示データを作らないという仕組みにしました。

それぞれのテクスチャはCTexElemクラスとして作成し、
それらをまとめたり検索したりするクラスをCTexBankとして作成します。

それぞれの変数メンバを以下に示します。

class CTexBank
{

    ...(関数メンバ省略)

public:
    LPDIRECT3DDEVICE9 m_pdev;
    map<int, CTexElem*> m_texmap;
};

class CTexElem
{

    ...(関数メンバ省略)

public:
    int m_id;
    WCHAR m_name[ MAX_PATH ];
    WCHAR m_path[ MAX_PATH ];
    int m_transparent;
    int m_pool;
    int m_orgheight, m_orgwidth;
    int m_height, m_width;
    D3DCOLOR m_transcol;
    LPDIRECT3DTEXTURE9 m_ptex;
};


CTexBankのm_texmapはCTexElemのm_idからテクスチャデータを参照できるようにしたmapです。
m_nameはディレクトリを除いたファイル名のみを格納し、m_pathはディレクトリのみを格納します。
m_orgheight, m_orgwidthは元データの絵の大きさです。
m_height, m_widthは読み込み後の絵の大きさです。
元の絵の大きさと読み込み後の絵の大きさは異なる可能性があることを覚えておいてください。
m_ptexは表示用のテクスチャデータです。


01章のトップに戻る

オープンソースのトップに戻る

トップページに戻る