Ninjaライブラリ - テクスチャ関数

njLoadTexturePartLow

テクスチャの即時復帰型ローレベル分割ロード

書式

Sint32 njLoadTexturePartLow( texmemlist, pTexture, offset, size ) 
NJS_TEXMEMLIST *texmemlist 
Uint32 *pTexture 
Uint32 offset 
Uint32 size 

引数

texmemlist   テクスチャメモリリスト
pTexture   テクスチャデータの先頭アドレス
offset   テクスチャデータ先頭からのオフセット(バイト)
size   ロードサイズ(バイト)

戻り値

成功   1
失敗   -1

解説

テクスチャメモリリストで指定されているサーフェスディスクに テクスチャデータの先頭アドレスからoffsetバイトの位置からsizeバイトロード要求します。

テクスチャサイズ以上のロード要求があってもサイズ分までしかロードしません。 この関数は即時復帰型のためロードの終了はnjLoadTextureFinishDMA関数で確認してください。


用例

***** テクスチャメモリリストの説明 *****
●globalIndex
	グローバルインデックス
	ユーザが使用できる範囲は0〜0xFFFFFFEF
	テクスチャメモリを使用していない場合は0xFFFFFFFFを入れる

●bank
	パレットテクスチャの場合、バンク番号を入れる
	4bppパレットでは0〜63、8bppパレットでは0〜15を入れる
	パレットテクスチャ以外の場合は0xFFFFFFFFを入れる
●tspparambuffer
●texparambuffer
	この2つのパラメータはテクスチャのサーフェスを取得した後、
	njSetTextureParam関数を実行することで設定される
	パレットテクスチャの場合、バンク番号を入れてから
	njSetTextureParam関数を実行すると、バンク番号も反映する
	njSetPaletteBank*関数を実行することでも、
	バンク番号の設定を反映する

●texaddr
	テクスチャメモリにテクスチャをロードした場合、
	NJD_TEXMEMFLAG_TEXMEM(BIT_1) を立てる
	キャッシュテクスチャ領域にロードした場合、
	NJD_TEXMEMFLAG_CACHE(BIT_0)を立てる

●texinfo

●count
	テクスチャをテクスチャメモリにロードした(ロード要求した)
	回数カウントする通常のリリース関数ではカウントが1の場合しか、
	テクスチャはリリースしない

●dummy
	エラーの場合エラー番号を入れる


/* 簡単なロード関数の例 (メモリにヘッダ付きテクスチャがある場合)*/

Sint32 EasyLoadTexture(NJS_TEXLIST *texlist,Uint32 n,Uint32 *pTexture)
{
    NJS_TEXMEMLIST *texmemlist;
    Uint32 globalIndex;
    NJS_PVRHEADERDATA pvrh;
    Uint32 *data;
    Int i,no;
    Uint32 size;

    /* データにはグローバルインデックス、
    PVRヘッダデータがあるものとする */
    if((data = njLoadPvrHeader(&pvrh,&globalIndex,pTexture)) == NULL){
        /* ヘッダがなかった場合*/
        return -1;
    }

    if(globalIndex > 0xFFFFFFEF){
        return -1;
    }

    /* テクスチャメモリリストの空いている場所を探す
        _nj_texmemlist、_nj_texmemsizeはnjInitTextureで
    設定した値 */
    no = -1;
    for(i = 0;i < _nj_texmemsize;i++){
        if(_nj_texmemlist[i].globalIndex == globalIndex){
        /* すでにロードしてある*/
            _nj_texmemlist[i].count++;
            return 1;
        } else {
            if(no == -1){
                if(_nj_texmemlist[i].globalIndex == 0xFFFFFFFF){
                    no = i;
                }
            }
        }
    }
    /* テクスチャメモリリストの空きが見つからない*/
    if(no == -1){
        return -1;
    }

    texmemlist = &_nj_texmemlist[no];
    texmemlist->globalIndex = globalIndex;

    /* サーフェスを取得する*/
    if(njGetTexSurface(texmemlist,&pvrh) == -1){
        /* 失敗*/
        FreeTexMemList(texmemlist);
    }
    /* データ先頭からサイズ分ロードする*/
    size = texmemlist->texinfo.texsurface.TextureSize;
    if(njLoadTexturePartLow(&texmemlist,data,0,size) == -1){
        /* サーフェスのリリース*/
        njReleaseTextureLow(texmemlist);
        FreeTexMemList(texmemlist);
        return -1;
    }

    /* DMA終了まで待つ*/
    while(njLoadTextureFinishDMA() != 1);

    /* テクスチャパラメータを設定する*/
    njSetTextureParam(texmemlist);

    EntryTexMemList(texmemlist);
    /* テクスチャリストとテクスチャメモリリストのリンクをはる */
    texlist->textures[n].texaddr = (Uint32)texmemlist;
    /* ロードしたテクスチャの数をカウントする
    この数分NINDOWSのテクスチャビューアで見ることができる */
    _nj_tex_count++;

    return 1;
}

/* テクスチャメモリリストのテクスチャロード後の設定*/
void EntryTexMemList(NJS_TEXMEMLIST *texmemlist)
{
    texmemlist->count = 1;
    texmemlist->texaddr = NJD_TEXMEMFLAG_TEXMEM;
    texmemlist->dummy = 0;
}

/* テクスチャメモリリストの開放設定*/
void FreeTexMemList(NJS_TEXMEMLIST *texmemlist)
{
    texmemlist->globalIndex = 0xFFFFFFFF;
    texmemlist->bank = 0xFFFFFFFF;
    texmemlist->tspparambuffer = 0;
    texmemlist->texparambuffer = 0;
    texmemlist->texinfo.texaddr = 0;
    texmemlist->texinfo.texsurface.Type = 0;
    texmemlist->texinfo.texsurface.BitDepth = 0;
    texmemlist->texinfo.texsurface.PixelFormat = 0;
    texmemlist->texinfo.texsurface.nWidth = 0;
    texmemlist->texinfo.texsurface.nHeight = 0;
    texmemlist->texinfo.texsurface.TextureSize = 0;
    texmemlist->texinfo.texsurface.fSurfaceFlags = 0;
    texmemlist->texinfo.texsurface.pSurface = 0;
    texmemlist->texaddr = 0;
    texmemlist->count = 0;
}

備考

使用する場合、他のテクスチャ関数との互換に注意してください。

詳しくは、TexLowサンプルを参照してください。


参照

njLoadPvrHeader()
njGetTexSurface()
njLoadTextureFinishDMA()
njReleaseTextureLow()

njLoadTexturePartLow
COPYRIGHT © SEGA ENTERPRISES, LTD., 1998,1999