テクスチャキャッシュ
2013-11-10


テクスチャを描画するときデータはVRAMに転送して使用しますが、VRAMの容量には限りがあります。アプリの規模がある程度大きくなり、一度に全てのテクスチャをVRAMに乗せられなくなると、場面によってVRAM上のテクスチャデータを入れ替える必要が出てきます。
場面がはっきりと分かれていて、一つ一つの場面で使用するテクスチャが十分小さい場合は自前でテクスチャを入れ替えても良いのですが、なかなかそうもいかなかったり、面倒だったりするのでテクスチャキャッシュという機構を使ってシステムにやらせてみます。

※"テクスチャキャッシュ"というと、VRAM上でキャッシュに乗せてGPUが高速にアクセス…みたいな話だったりしますが、ここではVRAMに乗せるテクスチャ自体をキャッシュするということになります。


テクスチャキャッシュ概要
・テクスチャが必要なとき(描画時)、キャッシュにそのテクスチャがあるか検索する。
・キャッシュにあった場合、すでにVRAMに読み込まれているのでそれを使用する。また、キャッシュ上での優先度を上げる。
・キャッシュに無かった場合、テクスチャをVRAMに読み込み、優先度を上げてキャッシュに登録する。このとき、登録されているテクスチャの総容量(枚数、またはサイズ)がキャッシュの容量を超えていた場合、優先度の低いテクスチャをVRAMとキャッシュから削除する。

Texture.h
/**************************
    テクスチャキャッシュ
 **************************/
class TexCache : public Texture
{
        static TexCache**       cache;                          // キャッシュ
        static int                      cache_num;                      // キャッシュ数
        static u32                      cache_mem_size;         // キャッシュ使用メモリサイズ

        static void             clear_cache(void);              // 最後尾のテクスチャを削除

public :

// リソース種類
enum
{
        RES_MEMORY      = 0,            // メモリ
        RES_ASSET,                              // assetsファイル
};

        static void                     init(void);                                                     // 初期化
        static void                     quit(void);                                                     // 削除
        static Texture*         get_texture(short, const void*);        // テクスチャ取得

        short                   type;                   // リソース種類
        const void*             data;                   // リソースデータ
        u32                             mem_size;               // VRAM占有サイズ

                TexCache(short, const void*);           // コンストラクタ
};

Texture.cpp

続きを読む

[Android プログラミング]

コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット