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

# njReleaseTextureManageNum

テクスチャマネージメント番号によるテクスチャメモリのリリース

### 書式

> `Sint32 njReleaseTextureManageNum( texmng_no )
> Sint32 texmng_no
> `

### 引数

> texmng_no | テクスチャマネージメント番号

### 戻り値

> 1 | 成功
> −1 | 失敗

### 解説

> テクスチャマネージメント番号texmng_no番のテクスチャを リファレンスカウンタがゼロになるときテクスチャメモリから リリースします。テクスチャをリリースするとき、テクスチャ管理領域 (テクスチャマネージメント、テクスチャシステム領域)も初期化します。

### 用例

>     Sint32 nuLoadFileTexture(NJS_TEXLIST *texlist,Uint32 n)
>     {
>     	Sint32 ret;
>     	GDFS fp;
>     	Sint32 file_sect_size;
>     	Sint32 buffer_sect_size;
>     	Sint32 read_sect_size;
>     	Uint32 globalIndex;
>     	Uint32 globalIndex0;
>     	Uint32 bank;
>     	NJS_PVRHEADERDATA pvrh;
>     	Sint8 * tex_start;
>     	Sint8 filename2[32];
>     	Sint32 texmng_no;
>     	Uint32 size,offset;
>     	Sint8 *texbuf;
>     	Int texbuf_size;

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

>     	/* ファイル名の変更 */
>     	njCheckFileName(filename2,texlist->textures[n].filename,".PVR");

>     	if((fp = gdFsOpen(filename2,NULL)) == NULL){
>     		/* ファイルオープンエラー　*/
>     		_nj_texerr_.texerr = NJD_TEXERR_FILEOPEN;
>     		return -1;
>     	}

>     	/* ファイルのセクタサイズの計算 */
>     	gdFsGetFileSctSize(fp,&file_sect_size);
>     	/* テクスチャバッファ情報の取得 */
>     	nuGetTextureBuffer(&texbuf,&texbuf_size);
>     	buffer_sect_size = texbuf_size/NJD_GD_SECT_SIZE;

>     	/* リードするセクタを計算する */
>     	if(buffer_sect_size >= file_sect_size){
>     		/* バッファの方が大きい場合　*/
>     		/* When a sector of a buffer is bigger than a sector loading it. */
>     		read_sect_size = file_sect_size;
>     	}
>     	else{
>     		/* バッファの方が小さい場合　*/
>     		/* When a sector of a buffer is smaller than a sector loading it.*/
>     		read_sect_size = buffer_sect_size;
>     	}

>     	if((ret = gdFsRead(fp,read_sect_size,texbuf)) != GDD_ERR_OK){
>     		/* ファイルロードエラー　*/
>     		gdFsClose(fp);
>     		NUM_FREAD_ERR(fp,NJD_TEXERR_FILELOAD)
>     		return -1;
>     	}

>     	if((tex_start = njLoadPvrHeader(&pvrh,&globalIndex,texbuf)) == NULL){
>     		/* ヘッダデータがない　*/
>     		gdFsClose(fp);
>     		return -1;
>     	}

>     	if(globalIndex0 != NJD_GLOBAXINDEX_FIRST_VAL){
>     		globalIndex = globalIndex0;
>     	}

>     	ret = njEntryTextureManageNum(texlist,n,globalIndex,bank,&pvrh,&texmng_no);

>     	if(ret){
>     		gdFsClose(fp);
>     		return ret;
>     	}

>     	offset = 0;
>     	size = read_sect_size*NJD_GD_SECT_SIZE - ((Uint32)tex_start - (Uint32)texbuf);
>     	do{
>     		if(njLoadTexturePartManageNum(texmng_no,tex_start,offset,size)== -1){
>     			njReleaseTextureManageNum(texmng_no);
>     			/* テクスチャロードエラー　*/
>     			gdFsClose(fp);
>     			_nj_texerr_.texerr = NJD_TEXERR_TEXMEMLOAD;
>     			return -1;
>     		}
>     		offset += size;
>     		file_sect_size -= read_sect_size;

>     		if(buffer_sect_size >= file_sect_size){
>     			/* バッファの方が大きい場合　*/
>     			read_sect_size = file_sect_size;
>     		}
>     		else{
>     			/* バッファの方が小さい場合　*/
>     			read_sect_size = buffer_sect_size;
>     		}

>     		if((ret = gdFsRead(fp,read_sect_size,texbuf)) != GDD_ERR_OK){
>     			njReleaseTextureManageNum(texmng_no);
>     			NUM_FREAD_ERR(fp,NJD_TEXERR_FILELOAD)
>     			/* ファイルロードエラー　*/
>     			gdFsClose(fp);
>     			return -1;
>     		}
>     		tex_start = texbuf;
>     		size = read_sect_size*NJD_GD_SECT_SIZE;
>     		while(njLoadTextureFinishDMA() != 1);
>     	}while(file_sect_size > 0);

>     	gdFsClose(fp);

>     	return 1;
>     }

njReleaseTextureManageNum

COPYRIGHT © SEGA ENTERPRISES, LTD., 1998-2000