Ninja Library - テクスチャ関数

njLoadTextureManageNum

テクスチャマネージメント番号による即時復帰型テクスチャのロード

書式

Sint32 njLoadTextureManageNum( texmng_no, pTexture )
Sint32 texmng_no
Sint8* pTexture

引数

texmng_no   テクスチャマネージメント番号
pTexture   メモリテクスチャのアドレス

戻り値

 1   成功
−1   失敗

解説

テクスチャマネージメント番号texmng_noにテクスチャをロード要求します。 pTextureが32バイトアラインメントのとき即時復帰します。ロードの完了は njLoadTextureFinishDMA関数で取得してください。 ロードする前にテクスチャ管理領域、テクスチャサーフェスが取得されている 必要があります。njEntryTextureManageNum関数などで取得してください。


用例

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

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