Sint32 njCheckAttrGlobalIndex( texlist, n, globalIndex, bank )
NJS_TEXLIST *texlist
Uint32 n
Uint32 *globalIndex
Uint32 *bank
texlist テクスチャリスト n テクスチャ番号 globalIndex グローバルインデックス番号 bank バンク番号
実行中 1 失敗 −1 通常 0
テクスチャ番号n番のテクスチャアトリビュートを調べ、グローバルインデックス番号バンク番号を取得します。対象になるアトリビュートはNJD_TEXATTR_TEXCONTINUE、NJD_TEXATTR_GLOBALINDEX、NJD_TEXATTR_PALGLOBALINDEXです。
テクスチャアトリビュートが設定されたとき、グローバルインデックス番号とバンク番号を以下のように取得します。
NJD_TEXATTR_TEXCONTINUE
globalIndex テクスチャ番号n-1のグローバルインデックス番号 bank ((&texlist.textures[n])->texaddr & NJD_TEXPALGLOBAL_MASK) >> NJD_TEXBANK_SHIFTの上位6ビット
テクスチャ番号n-1番のテクスチャ情報を取得し、これまでに使用していないバンク番号のときは新たにテクスチャ管理領域を取得し、テクスチャリストとリンクをして終了します。この時戻り値は1になります。
NJD_TEXATTR_GLOBALINDEX
globalIndex (&texlist.textures[n])->texaddr bank NJD_BANK_FIRST_VAL(0xFFFFFFFF)
NJD_TEXATTR_PALGLOBALINDEX
globalIndex (&texlist.textures[n])->texaddr & NJD_TEXPALGLOBAL_MASKの下位26ビット bank ((&texlist.textures[n])->texaddr & NJD_TEXPALGLOBAL_MASK) >> NJD_TEXBANK_SHIFTの上位6ビット
設定なし
globalIndex NJD_GLOBAXINDEX_FIRST_VAL bank ((&texlist.textures[n])->texaddr & NJD_TEXPALGLOBAL_MASK) >> NJD_TEXBANK_SHIFTの上位6ビット
エラーは、NJD_TEXATTR_TEXCONTINUEが設定されていて、テクスチャの管理領域が取得できなかった場合に返ります。
Sint32 nuLoadMemoryTexture(NJS_TEXLIST *texlist,Uint32 n) { Sint32 ret; Uint32 globalIndex; Uint32 globalIndex0; Uint32 bank; NJS_PVRHEADERDATA pvrh; Sint8 * tex_start; Sint32 texmng_no; NJS_TEXINFO *info; njInitTextureErrStat(); /* NJD_TEXATTR_TEXCONTINUE, NJD_TEXATTR_GLOBALINDEX, NJD_TEXATTR_PALGLOBALINDEXの処理 */ ret = njCheckAttrGlobalIndex(texlist,n,&globalIndex0,&bank); if(ret){ /* 0以外の場合 */ /* 1: NJD_TEXATTR_TEXCONTINUE*/ /* -1: エラー */ return ret; } /* filenameにメモリテクスチャが設定されているかリードしてみる */ tex_start = njLoadPvrHeader(&pvrh,&globalIndex,(Sint8*)texlist->textures[n].filename); if(tex_start == NULL){ /* filenameになかった場合は、Ninja1までと同じ設定になっているはず */ tex_start = njLoadPvrHeader(&pvrh,&globalIndex,((NJS_TEXINFO*)texlist->textures[n].filename)->texaddr); if(tex_start == NULL){ /* これでもヘッダが確認できなかった場合は、ヘッダ情報はないとみなす */ info = (NJS_TEXINFO*)texlist->textures[n].filename; pvrh.nWidth = info->texsurface.nWidth; pvrh.nHeight = info->texsurface.nHeight; pvrh.nTextureType = info->texsurface.Type; tex_start = ((NJS_TEXINFO*)texlist->textures[n].filename)->texaddr; } } if(globalIndex0 != NJD_GLOBAXINDEX_FIRST_VAL){ globalIndex = globalIndex0; } ret = njEntryTextureManageNum(texlist,n,globalIndex,bank,&pvrh,&texmng_no); if(ret) return ret; if(njLoadTextureManageNum(texmng_no,tex_start) < 0){ njReleaseTextureManageNum(texmng_no); /* テクスチャロードエラー */ return -1; } while(njLoadTextureFinishDMA() != 1); return 1; }