##### Ninja Library - テクスチャ関数

# njCheckAttrGlobalIndex

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

### 書式

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

njCheckAttrGlobalIndex

COPYRIGHT © SEGA ENTERPRISES, LTD., 1998-2000