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;
}