Ninja Library - テクスチャ関数

njCheckAttrGlobalIndex

テクスチャアトリビュートのチェック

書式

Sint32 njCheckAttrGlobalIndex( texlist, n, globalIndex, bank )
NJS_TEXLIST *texlist
Uint32 n
Uint32 *globalIndex
Uint32 *bank

引数

texlist   テクスチャリスト
 テクスチャ番号
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;
}

njCheckAttrGlobalIndex
COPYRIGHT © SEGA ENTERPRISES, LTD., 1998-2000