/*++

  COPYRIGHT        (C) NEC        Corporation 1997

  All rights reserved by NEC Corporation. This program must be
  used solely for the purpose for which it was furnished by NEC
  Corporation. No part of this program may be reproduced or
  disclosed to others, in any form, without the prior written
  permission of NEC Corporation.
  Use of copyright notice does not evidence publication of this
  program.

  Author	:  		T.Hirata(NEC Software Ltd.,)
  Module Name:		kmapi.h

  Abstract:
	KAMUI = Kamui is abstruction model that is ultimate interface for PowerVR.
	'kmapi.h' define prototype of kamui function.

  Environment:
	Microsoft Compiler.

  Notes:
	define Kamui's api proto-types.

  Revision History:

--*/

#if !defined(__kamui_api_h)
#define __kamui_api_h

#ifdef __cplusplus
extern "C" {
#endif 




/*++
kmInitDevice

proto type:

	KMSTATUS
	kmInitDevice (KMVIDEOMODE nVideoMode);

Description:
	ハードウェアのイニシャライズを行います。
	ビデオ信号を出力し、BLANK画面を表示します。

Arguments:
	IN	nVideoMode
		ビデオモードを指定します。下記のいずれかが指定できます。

			KM_NTSC	... NTSC圏（北米、日本など）
			KM_PAL	... PAL圏 (ヨーロッパなど)
			KM_VGA	... VGA (ARC1)

		ARC1では、どれを指定してもKM_VGAが指定されたものとみなされます。



Result:

	KMSTATUS_SUCCESS				デバイス初期化成功
	KMSTATUS_INVALID_VIDEOMODE		不正なビデオモードを指定した。
	KMSTATUS_HARDWARE_NOT_PRESENTED	ハードウェアが使用できない。

--*/
KMSTATUS KMAPI
kmInitDevice (
		IN	KMVIDEOMODE nVideoMode
	);


/*++
kmSetDisplayMode

proto type:

	KMSTATUS
	kmSetDisplayMode(
			IN	KMDISPLAYMODE	nDisplayMode,
			IN	KMBPPMODE		nBpp,
			IN	KMBOOLEAN		fDither,
			IN	KMBOOLEAN		fAntiAlias
		);

Description:
	Frame Bufferの表示モードを設定します。

Arguments:
	IN	nDisplayMode
	ディスプレイモードを指定します。
		KM_DSPMODE_VGA				VGA(640x480) 60Hz
		KM_DSPMODE_NTSCNI320x240	320x240 ノンインタレース60Hz
		KM_DSPMODE_NTSCI320x240		320x240 インタレース 30Hz
		KM_DSPMODE_NTSCNI640x240	640x240 ノンインタレース60Hz
		KM_DSPMODE_NTSCI640x240		640x240 インタレース30Hz
		KM_DSPMODE_NTSCI640x480		640x480 インタレース 30Hz
		KM_DSPMODE_PALNI320x240		320x240 ノンインタレース50Hz
		KM_DSPMODE_PALI320x240		320x240 インタレース25Hz
		KM_DSPMODE_PALNI640x240		640x240 ノンインタレース50Hz
		KM_DSPMODE_PALI640x240	 	640x240 インタレース25Hz
		KM_DSPMODE_PALI640x480		640x480 インタレース25Hz

	IN	nBpp
	FrameBufferのカラーモードを指定します。
	以下の定義済み定数を使用することができます。
		KM_DSPBPP_RGB565		RGB565 
		KM_DSPBPP_RGB555		RGB555
		KM_DSPBPP_ARGB4444		ARGB4444
		KM_DSPBPP_ARGB1555		ARGB1555
		KM_DSPBPP_RGB888		RGB888
		KM_DSPBPP_ARGB8888		ARGB8888

	IN	bDither
		PowerVR が レンダリング結果を 16bitの Frame Buffer に書き込む際の
		Dither の有無を決定します。レンダリング先の Frame Buffer が 
		RGB888、ARGB8888 である場合、このフラグは無視されます。

			TRUE	Dither を使用する。
			FALSE	Dither を使用しない。

	IN	bAntiAlias
		アンチエリアシングフィルタの使用可否を決定します。
		アンチエイリアシングフィルタを有効にした場合動作速度が
		低下する場合があります。
		
			TRUE 	Anti Aliasing Filter を使用する。
			FALSE	Anti Aliasing Filter を使用しません。


Result:
	KMSTATUS_SUCCESS				成功
	KMSTATUS_INVALID_DISPLAY_MODE	不正なディスプレイモードが指定された。
									初期化時に指定されたディスプレイモードと
									矛盾するディスプレイモードが指定された。


--*/

KMSTATUS KMAPI
kmSetDisplayMode(
		IN	KMDISPLAYMODE	nDisplayMode,
		IN	KMBPPMODE		nBpp,
		IN	KMBOOLEAN		fDither,
		IN	KMBOOLEAN		fAntiAlias
	);


/*++
kmChangeDisplayFilterMode

proto type:

	KMSTATUS 
	kmChangeDisplayFilterMode(	
			KMBOOLEAN fDither,
			KMBOOLEAN fAntiAlias
		);

Description:
	kmSetDisplayMode で設定したディザやアンチエリアシングフィルタの Enable / Disable を
	後で変更する為に使用します。

Arguments:
	IN	bDither
		PowerVR が レンダリング結果を 16bitの Frame Buffer に書き込む際の
		Dither の有無を決定します。レンダリング先の Frame Buffer が 
		RGB888、ARGB8888 である場合、このフラグは無視されます。

			TRUE	Dither を使用する。
			FALSE	Dither を使用しない。

	IN	bAntiAlias
		アンチエリアシングフィルタの使用可否を決定します。
		アンチエイリアシングフィルタを有効にした場合動作速度が
		低下する場合があります。
		
			TRUE 	Anti Aliasing Filter を使用する。
			FALSE	Anti Aliasing Filter を使用しません。



Result:
	KMSTATUS_SUCCESS				成功
	KMSTATUS_INVALID_DISPLAY_MODE	不正なディスプレイモードが指定された。
									初期化時に指定されたディスプレイモードと
									矛盾するディスプレイモードが指定された。

--*/

KMSTATUS  KMAPI
kmChangeDisplayFilterMode(	
		IN	KMBOOLEAN fDither,
		IN	KMBOOLEAN fAntiAlias
	);

/*++
kmCreateFrameBufferSurface

proto type:

	KMSTATUS 
	kmCreateFrameBufferSurface (
			PKMSURFACEDESC pSurfaceDesc,
			KMINT32 nWidth, 
			KMINT32 nHeight,
			KMBOOLEAN fStripBuffer,
			KMBOOLEAN fBufferClear
		);

Description:
	表示用のSurfaceをフレームバッファメモリ上にアロケートし、
	初期化します。この関数を呼び出す前にkmSetDisplayModeを行う必要があります。

Arguments:
	OUT	pSurfaceDesc		KMSURFACEDESC 構造体の領域を示すポインタです。
							kmCreateFrameBufferSurface で作成したサーフィスの情報が格納されます。
							KMSTATUS に KMSTATUS_NOT_ENOUGH_MEMORYが返された場合には不定となります。


	IN	nWidth, nHeight		確保する Surfaceの幅／高さを指定します。0,0を設定した場合には、kmSetDisplayModeで
							指定した画面サイズを使用します。
							HOLLYは Strip Bufferを使用することができます。Strip Bufferを使用する場合には、
							nHeight に 32の倍数を指定する必要があります。Strip Bufferの機能はARC1にはありません。
							ARC1で使用する場合には常に0,0を指定してください。


	IN	bStripBuffer		Strip Buffer の作成有無を指定します。Strip Bufferの機能はARC1にはありません。
							ARC1で使用する場合には常にFALSEを指定してください。
							−＞無視してもいい気がするけど．．．
								TRUE		StripBuffer形式のフレームバッファを生成します。 
								FALSE		Frame Buffer を生成します。

	IN	bBufferClear		Frame Buffer 作成時に初期化の有無を指定します。
								TRUE	Surfaceを作成したときに0クリアします。
								FALSE	Sufraceを0クリアしません。

Result:
	KMSTATUS_SUCCESS				Frame Buffer 作成成功
	KMSTATUS_NOT_ENOUGH_MEMORY		失敗、メモリ容量が足りない
	

--*/


KMSTATUS KMAPI
kmCreateFrameBufferSurface (
		OUT	PKMSURFACEDESC 	pSurfaceDesc,
		IN	KMINT32 		nWidth, 
		IN	KMINT32 		nHeight,
		IN	KMBOOLEAN 		fStripBuffer,
		IN	KMBOOLEAN 		fBufferClear
	);


/*++
kmCreateTextureSurface

proto type:
	KMSTATUS 
	kmCreateTextureSurface(
			PKMSURFACEDESC	pSurfaceDesc,
			KMINT32			nWidth, 
			KMINT32			nHeight, 
			KMTEXTURETYPE	nTextureType
		);

Description:
	テクスチャ用のSurfaceを確保します。

Arguments:
	OUT	pSurfaceDesc		KMSURFACEDESC 構造体の領域を示すポインタです。
							確保した Texture Surface の情報が返されます。
							KMSTATUS にKMSTATUS_NOT_ENOUGH_MEMORYが返された場合には不定となります。

	IN	nWidth, nHeight		テクスチャの横サイズ、縦サイズを指定します。
								MIPMAPを使用する場合にはトップレベルのテクスチャサイズを指定します。
								Twiddled, VQ, Palettizedなどの正方形テクスチャを使用する場合には 
									nWidthに指定した値のみが使用されます。
								長方形テクスチャを使用する場合には、nWidth, nHeight共に有効です。
								ARC1、HOLLYは正方形テクスチャサイズとして 8x8〜1024x1024までのテクスチャを使用できますが、
								nWidth, nHeightに指定する値は,8, 16, 32, 64, 128, 256, 512, 1024の
								いずれかでなければなりません。

	IN	nTextureType		テクスチャの形式を指定します。
							以下のカテゴリコード、ピクセルフォーマットコードから
							一つずつ選び出し、論理和(or)して与えます

								-カテゴリコード
									KM_TEXTURE_TWIDDLED			// Twiddledフォーマット
									KM_TEXTURE_TWIDDLED_MM		// TwiddledフォーマットMipmapあり
									KM_TEXTURE_VQ				// VQ圧縮形式
									KM_TEXTURE_VQ_MM			// VQ圧縮形式Mipmapあり
									KM_TEXTURE_PALETTIZE4		// 4bppパレット形式
									KM_TEXTURE_PALETTIZE4_MM	// 4bppパレット形式Mipmapあり
									KM_TEXTURE_PALETTIZE8		// 8bppパレット形式
									KM_TEXTURE_PALETTIZE8_MM	// 8bppパレット形式Mipmapあり
									KM_TEXTURE_RECTANGLE		// 矩形

								- ピクセルフォーマットコード
									KM_TEXTURE_1555
									KM_TEXTURE_565
									KM_TEXTURE_4444
									KM_TEXTURE_YUV422
									KM_TEXTURE_BUMP
									KM_TEXTURE_8888

							注)  KM_TEXTURE_8888はKM_TEXTURE_PALETTIZE4or8との組み合わせのみ有効です。

Result:
		KMSTATUS_SUCCESS					テクスチャメモリ確保成功
		KMSTATUS_INVALID_TEXTURE_TYPE		無効なテクスチャタイプを指定した
		KMSTATUS_NOT_ENOUGH_MEMORY			メモリ容量が足りない
		KMSTATUS_INVALID_MIPMAPED_TEXTURE	MIPMAPできないテクスチャにMIPMAPを指定した。

--*/

KMSTATUS KMAPI
kmCreateTextureSurface(
		OUT	PKMSURFACEDESC	pSurfaceDesc,
		IN	KMINT32			nWidth, 
		IN	KMINT32			nHeight, 
		IN	KMTEXTURETYPE	nTextureType
	);

/*++
kmCreateCombinedTextureSurface

proto type:
	KMSTATUS 
	kmCreateCombinedTextureSurface(
			PKMSURFACEDESC	pSurfaceDesc1,
			PKMSURFACEDESC	pSurfaceDesc2,
			KMINT32			nWidth, 
			KMINT32			nHeight, 
			KMTEXTURETYPE	nTextureType
		);

Description:
	VQテクスチャ用のSurfaceを２つ確保します。nTextureTypeにに設定するテクスチャカテゴリは
	KM_TEXTURE_VQ,KM_TEXTURE_VQ_MMのどちらかでなければなりません。

Arguments:
	OUT	pSurfaceDesc1		KMSURFACEDESC 構造体の領域を示す１つめのポインタです。
							確保した Texture Surface の情報が返されます。
							KMSTATUS にKMSTATUS_NOT_ENOUGH_MEMORYが返された場合には不定となります。

	OUT	pSurfaceDesc2		KMSURFACEDESC 構造体の領域を示す２つめのポインタです。
							確保した Texture Surface の情報が返されます。
							KMSTATUS にKMSTATUS_NOT_ENOUGH_MEMORYが返された場合には不定となります。

	IN	nWidth, nHeight		テクスチャの横サイズ、縦サイズを指定します。
							MIPMAPを使用する場合にはトップレベルのテクスチャサイズを指定します。
							ARC1、HOLLYは正方形テクスチャサイズとして 8x8〜1024x1024までのテクスチャを使用できますが、
							nWidth, nHeightに指定する値は,8, 16, 32, 64, 128, 256, 512, 1024の
							いずれかでなければなりません。

	IN	nTextureType		テクスチャの形式を指定します。
							以下のカテゴリコード、ピクセルフォーマットコードから
							一つずつ選び出し、論理和(or)して与えます

								-カテゴリコード
									KM_TEXTURE_VQ				// VQ圧縮形式
									KM_TEXTURE_VQ_MM			// VQ圧縮形式Mipmapあり

								- ピクセルフォーマットコード
									KM_TEXTURE_ARGB1555
									KM_TEXTURE_ARGB4444

Result:
		KMSTATUS_SUCCESS					テクスチャメモリ確保成功
		KMSTATUS_INVALID_TEXTURE_TYPE		無効なテクスチャタイプを指定した
		KMSTATUS_NOT_ENOUGH_MEMORY			メモリ容量が足りない

--*/

KMSTATUS KMAPI
kmCreateCombinedTextureSurface(
		OUT	PKMSURFACEDESC	pSurfaceDesc1,
		OUT	PKMSURFACEDESC	pSurfaceDesc2,
		IN	KMINT32			nWidth, 
		IN	KMINT32			nHeight, 
		IN	KMTEXTURETYPE	nTextureType
	);


/*++
kmSetAlphaThreshold

proto type:

	KMSTATUS 
	kmSetAlphaThreshold(	
			KMINT32 nThreshold	
		);

Description:
	1555サーフェスをレンダリング用Surfaceとした場合にαの1bitを決定するためのスレッショルド値です。
	レンダリング結果が、ここでセットした値以上となった場合、αビットを1にします。
	αビットはRAMDACなどでクロマキー合成をする場合に使用されます。

Arguments:
	IN	nThreshold		0〜255の値のスレッショルド値。
						0以下または255以上を指定された場合は、それぞれ0、255 にクランプされます。


Result:
	KMSTATUS_SUCCESS		設定成功
--*/

KMSTATUS KMAPI
kmSetAlphaThreshold(	
		IN	KMINT32 nThreshold	
	);

/*++
kmActivateFrameBuffer

proto type:

	KMSTATUS 
	kmActivateFrameBuffer(
			PKMSURFACEDESC	pPrimarySurfaceDesc,
			PKMSURFACEDESC	pBackBufferSufaceDesc, 
			KMBOOLEAN 		fStripBuffer,
			KMBOOLEAN 		fWaitVSync
		);

Description:
	フレームバッファの表示を開始します。
Arguments:

	IN	pPrimarySurfaceDesc		表示に使用するSurfaceのSurface構造体です。 
								kmCreateFrameBufferSurface でSurfaceを確保した時点で得られた
								Surface構造体を設定してください。

	IN	pBackBufferSurfaceDesc	レンダリング対象SurfaceのSurface構造体です。

	IN	bStripBuffer			StripBufferを使用する場合TRUEを指定します。
	IN	bWaitVSync				Surfaceの表示をVsyncまでWaitするかどうかを指定します。
								TRUEの場合本関数はVsyncタイミングまでウェイトし、
								表示を開始します。


Result:
	KMSTATUS_SUCCESS			表示切り替え成功

--*/

KMSTATUS KMAPI
kmActivateFrameBuffer(
		IN	PKMSURFACEDESC	pPrimarySurfaceDesc,
		IN	PKMSURFACEDESC	pBackBufferSufaceDesc, 
		IN	KMBOOLEAN		fStripBuffer,
		IN	KMBOOLEAN		fWaitVSync
	);

/*++
kmFlipFrameBuffer

proto type:

	KMSTATUS
	kmFlipFrameBuffer( KMVOID );

Description:
	フレームバッファをダブルバッファリングした場合に、表示用のPrimarySurfaceと
	レンダリングターゲットの BackBuffer を入れ替えます。
	Flipコマンドはキューイングされ、Flipが実行された次のVsyncタイミングで BackBuffer への
	レンダリングが終了している場合、Flipが実行されます。
	なお、StripBuffer使用時には、ソフトウェアによるFlipは必要ありません。

Arguments:
		none

Result:
		KMSTATUS_SUCCESS			Flipコマンド発行成功
		KMSTATUS_CANT_FLIP_SURFACE 	Flipコマンド発行失敗

--*/
KMSTATUS KMAPI
kmFlipFrameBuffer( KMVOID );

/*++
kmSetWaitVsyncCount

proto type:

	KMSTATUS
	kmSetWaitVsyncCount( KMINT32 nCount );

Description:
		

Arguments:
		IN	nCount		V-Sync を待つ回数を指定します。前回の Flip後、
						次にFlip 可能になるまでのV-Sync数を指定します。

Result:
		KMSTATUS_SUCCESS			成功
--*/
KMSTATUS KMAPI
kmSetWaitVsyncCount(
		IN	KMINT32 nCount 
		);


/*++
kmSetCullingRegister

proto type:

	KMSTATUS
	kmSetCullingRegister(
			KMFLOAT fCullVal
		);

Description:
	小さいポリゴンに対するカリングのスレッショルド値指定を行います。

Arguments:
		IN	fCullVal	平面パラメータのデタミナント値を設定します。

Result:
		KMSTATUS_SUCCESS			Flipコマンド発行成功
		KMSTATUS_CANT_FLIP_SURFACE 	Flipコマンド発行失敗

--*/

KMSTATUS KMAPI
kmSetCullingRegister(
		IN	KMFLOAT fCullVal
	);


/*++
kmSetColorClampValue

proto type:

	KMSTATUS
	kmSetColorClampValue(
			KMPACKEDARGB MaxVal,
			KMPACKEDARGB MinVal 
		);

Description:
	カラーのクランプ値を指定します。カラークランプはフォグの前段で掛けられます。
	レンダリング中にクランプ色を変更するときには、
	必ずレンダリング終了のコールバック関数内などで変更を行ってください。
	それ以外のタイミングで変更を行った場合、画面イメージが不正となる場合が有ります。

Arguments:
	IN	MaxVal			Packedの ARGB 32bitカラーで、クランプの最大値を指定します。
						輝度128でRGB色を指定する場合は0x00808080のように指定します。

	IN	MinVal			Packedの ARGB 32bitカラーで、クランプの最大値を指定します。
						輝度20でRGB色を指定する場合は0x00141414のように指定します。

Result:
	KMSTATUS_SUCCESS		設定成功

--*/

KMSTATUS KMAPI
kmSetColorClampValue(
		IN	KMPACKEDARGB MaxVal,
		IN	KMPACKEDARGB MinVal 
	);

/*++
kmSetFogTableColor

proto type:

	KMSTATUS
	kmSetFogTableColor(
			KMPACKEDARGB FogTableColor
		);

Description:
	フォグカラーを指定します。HOLLYではFogVertex、FogTableに別々のフォグカラーを指定できますが、
	ARC1では同一のためFogVertex、FogTableに別々の値を設定しても、後から設定された値が有効となります。
	レンダリング中にフォグカラーを変更するときには、必ずレンダリング終了のコールバック関数内などで変更を
	行ってください。それ以外のタイミングで変更を行った場合、画面イメージが不正となる場合があります。

Arguments:
	IN	FogTableColor		FogTable に使用するPackedの32bitカラーです。

Result:
	KMSTATUS_SUCCESS		設定成功

--*/

KMSTATUS KMAPI
kmSetFogTableColor(
		KMPACKEDARGB FogTableColor
	);

/*++
kmSetFogVertexColor

proto type:

	KMSTATUS 
	kmSetFogVertexColor(
			KMPACKEDARGB FogVertexColor
		);

Description:
	フォグカラーを指定します。HOLLYではFogVertex、FogTableに別々のフォグカラーを指定できますが、
	ARC1では同一のためFogVertex、FogTableに別々の値を設定しても、後から設定された値が有効となります。
	レンダリング中にフォグカラーを変更するときには、必ずレンダリング終了のコールバック関数内などで変更を
	行ってください。それ以外のタイミングで変更を行った場合、画面イメージが不正となる場合があります。

Arguments:
	IN	FogVertexColor		FogVertexに使用するPackedの32bitカラーです。

Result:
	KMSTATUS_SUCCESS		設定成功

--*/

KMSTATUS  KMAPI
kmSetFogVertexColor(
		IN	KMPACKEDARGB FogVertexColor
	);

/*++
kmSetFogTable

proto type:

	KMSTATUS
	kmSetFogTable(
			PKMFLOAT pfFogTable
		);

Description:
	FogTableを登録します。256段階のfloat値の格納された配列へのポインタを引数として渡します。
	

Arguments:
	IN	pfFogTable	フォグテーブル値配列へのポインタ。256段階のパラメータを指定します。

Result:
	KMSTATUS_SUCCESS		設定成功

--*/

KMSTATUS KMAPI
kmSetFogTable(
		IN	PKMFLOAT pfFogTable
	);

/*++
kmSetFogDensity

proto type:

	KMSTATUS
	kmSetFogDensity(KMDWORD fogDensity)

Description:
	TSP Fog の係数を与える。

Arguments:
	IN	fogDensity			TSP Fog の係数

Result:
	KMSTATUS_SUCCESS		設定成功

--*/
KMSTATUS	KMAPI
kmSetFogDensity(
		IN	KMDWORD fogDensity
	);

/*++
kmSetPaletteMode

proto type:

	KMSTATUS 
	kmSetPaletteMode(	
			KMPALETTEMODE Palettemode
		);

Description:
	オンチップパレットのモード指定をします。

Arguments:
	IN	PaletteMode		パレットの BPP モード
						KM_PALETTE_16BPP	16BPPモード 565, 555, 1555, 4444を使用します。
						KM_PALETTE_32BPP 	32BPPモード 8888を使用します。

Result:
	KMSTATUS_SUCCESS		設定成功

--*/
KMSTATUS  KMAPI
kmSetPaletteMode(	
		IN	KMPALETTEMODE Palettemode
	);

/*++
kmSetPaletteData

proto type:
	KMSTATUS
	kmSetPaletteData(
			PKMPALETTEDATA pPaletteTable
		);

Description:
	オンチップパレットの設定を行います。

Arguments:
	IN	pPaletteTable	Palette設定用配列のポインタを指定します。
						Palette設定用配列の内容は以下のようになります。

Result:
	KMSTATUS_SUCCESS		設定成功

--*/

KMSTATUS KMAPI
kmSetPaletteData(
		IN	PKMPALETTEDATA pPaletteTable
	);

/*++
kmSetBorderColor

proto type:
	KMSTATUS
	kmSetBorderColor(
			KMPACKEDARGB BorderColor
		);

Description:
	ボーダー（表示画面外の部分）カラーの設定を行います。

Arguments:
	IN	BorderColor		PackedのARGBカラーです。

Result:
	KMSTATUS_SUCCESS		設定成功

--*/

KMSTATUS KMAPI
kmSetBorderColor(
		IN	KMPACKEDARGB BorderColor
	);

/*++
kmSetBackGroundRenderState

proto type:
	KMSTATUS
	kmSetBackGroundRenderState(
			PKMVERTEXCONTEXT	pVertexContext
		);

Description:
	kmProcessVertexRenderState で設定した KMVERTEXCONTEXT の、
	GLOBALPARAMBUFFER , ISPPARAMBUFFER , TSPPARAMBUFFER , 
	TexturePARAMBUFFER メンバを、 Background Plane のレンダリング
	パラメータとしてシステムに登録する。これ以降の kmSetBackGroundPlane の設定は、
	ここで設定した KMVERTEXCONTEXT の値が有効になる。

Arguments:
	IN	pVertexContext
						Vertex Context へのポインタを与える。

Result:
	KMSTATUS_SUCCESS	設定成功

--*/

KMSTATUS KMAPI
kmSetBackGroundRenderState(
		PKMVERTEXCONTEXT	pVertexContext
	);

/*++
kmSetBackGroundPlane

proto type:
	KMSTATUS
	kmSetBackGroundPlane(
				PVOID			pVertex[3],
				KMVERTEXTYPE	VertexType,
				KMINT32			StructSize
			);

Description:
	バックグラウンド平面の設定を行います。
	この前に、kmSetBackGroundRenderState を呼び出す必要がある。

Arguments:
	IN	pVertex[3]		バックグラウンドプレーン上の座標を示す頂点データ構造体へのポインタ
						詳細は、 kmSetVertex 参照

	IN	VertexType		頂点データのデータタイプを示す。
						詳細は kmSetVertex 参照
	IN	StructSize		頂点データのデータタイプを示す。
						詳細は kmSetVertex 参照

Result:
	KMSTATUS_SUCCESS			設定成功

--*/

KMSTATUS KMAPI
kmSetBackGroundPlane(
			PVOID			pVertex[3],
			KMVERTEXTYPE	VertexType,
			KMINT32			StructSize
		);

/*++
kmSetAutoSortMode

proto type:
	KMSTATUS
	kmSetAutoSortMode(
			KMBOOLEAN fEnable
		);

Description:
	半透明面のオートソートモードのON/OFFを制御します。

Arguments:
	IN	bEnable		Auto Sort mode の有効化フラグ
				TRUE	半透明面のソートにオートソートモードを設定します。
				FALSE	従来型と同じソフトウェアによるソーティングをエミュレーションします。

Result:
	KMSTATUS_SUCCESS		設定成功

--*/

KMSTATUS KMAPI
kmSetAutoSortMode(
		IN	KMBOOLEAN fEnable
	);

/*++
kmSetPixelClipping

proto type:
	KMSTATUS
	kmSetPixelClipping(
				KMINT32	Xmin,
				KMINT32	Ymin,
				KMINT32	Xmax,
				KMINT32	Ymax
			);

Description:
	フレームバッファへのレンダリングの出力に対する、ピクセル単位のクリッピングを設定します。

Arguments:
	IN	Xmin, Ymin, Xmax, Ymax
				ピクセル単位のクリッピング領域の左上、右下座標を指定します。
				(Xmin,Ymin)-(Xmax,Ymax)は、画面サイズより小さくなければいけません。
				また、画面モードが24bppの時は、クリッピング領域の座標は偶数でなければいけません
				（すなわち２ピクセル単位でしかクリッピング領域を設定できません）。
				偶数でなかった場合には、(Xmin,Ymin)に対しては指定より１大きい値、
										(Xmax,Ymax)に対しては指定より１小さい値が設定されます。

Result:
	KMSTATUS_SUCCESS		設定成功
	KMSTATUS_INVALID_PARAMETER	パラメータが不正

--*/

KMSTATUS KMAPI
kmSetPixelClipping(
		IN	KMINT32	Xmin,
		IN	KMINT32	Ymin,
		IN	KMINT32	Xmax,
		IN	KMINT32	Ymax
	);

/*++
kmSetPixelClipping

proto type:
	KMSTATUS
	kmSetStrideWidth(
			KMINT32 nWidth
		);

Description:
	ストライドテクスチャのストライドサイズを指定します。ストライドサイズは、
	３２の倍数でなければならない。

Arguments:
	IN	nWidth		ストライドサイズを入力する。
					ストライドサイズは 32の倍数でなければならない。

Result:
	KMSTATUS_SUCCESS			設定成功
	KMSTATUS_INVALID_PARAMETER	パラメータが不正

--*/

KMSTATUS KMAPI
kmSetStrideWidth(
		KMINT32 nWidth
	);


/*++
kmSetForwardClipping

proto type:

	KMSTATUS
	kmSetForwardClipping(
			IN	KMFLOAT fDepth
		);

Description:
	前面クリッピングを設定します。 fDepth の値が負の場合には、
	値は無視され、クリッピングは行われない。また、1/w が IEEE 754
	の精度限界を超える領域でのクリッピングは行われません。
	本設定はニアクリップを行うものではありませんので、頂点の 1/w の
	座標値が非常に大きいところのニアクリップは、アプリケーションで
	行う必要がある。

Arguments:
	IN	fDepth
		前面クリッピングの Depth値を設定します。

Result:

	KMSTATUS_SUCCESS				成功

--*/
KMSTATUS KMAPI
kmSetForwardClipping(
		IN	KMFLOAT fDepth
		);



/*++
kmResetRenderer

proto type:

	KMSTATUS
	kmResetRenderer( VOID );

Description:
	レンダリングパイプラインのソフトウェアリセットを行う。

	使用する場合：
		・StripBuffer使用時にストリップ内のデータを描ききれなかった
		  場合の強制リセットする。

Arguments:
	NONE

Result:

	KMSTATUS_SUCCESS				成功

--*/
KMSTATUS KMAPI
kmResetRenderer( VOID );

/*++
kmProcessVertexRenderState

proto type:
	KMSTATUS
	kmProcessVertexRenderState(
				PKMVERTEXCONTEXT pVertexContext
			);

Description:
	頂点（ストリップ）ごとに有効となるレンダリングパラメータを設定します。
	pVertexContextで設定された設定値をシステムに登録するための前処理を行います。
	頂点Stripの登録を行う前に必ず行ってください。
	本関数を呼び出すことで、KMVERTEXCONTEXTの各メンバから
			Global Parameter, 
			Combined ISP/TSP Instruction Word, 
			TSP Control Word, 
			Texture Control Bitsを生成し、同じ

	KMVERTEXCONTEXT内の
		GLOBALPARAMBUFFER, 
		ISPPARAMBUFFER, 
		TSPPARAMBUFFER, 
		TexturePARAMBUFFER
	メンバに設定します。この関数を呼び出した後で
	kmSetVertexRenderStateを呼び出すことでこれらの値をシステムに登録します。

Arguments:
	IN	pVertexContext		コンテキストへのポインタを設定します。

Result:
	KMSTATUS_SUCCESS		設定成功
	KMSTATUS_INVALIDSETTING	許可されていないモード設定

--*/

KMSTATUS KMAPI
kmProcessVertexRenderState(
		IN	PKMVERTEXCONTEXT pVertexContext
	);

/*++
kmSetVertexRenderState

proto type:

	KMSTATUS
	kmSetVertexRenderState (
			PKMVERTEXCONTEXT pVertexContext
		);

Description:
	kmProcessVertexRenderStateで設定した KMVERTEXCONTEXT 内の以下のメンバを、システムに登録します。
	これ以降の頂点Strip登録では、ここで指定したKMVERTEXCONTEXTが有効となります。
					- GLOBALPARAMBUFFER
					- ISPPARAMBUFFER
					- TSPPARAMBUFFER
					- TexturePARAMBUFFER

Arguments:
	IN	pVertexContext		コンテキストへのポインタを設定します。

Result:
	KMSTATUS_SUCCESS		レンダリングパラメータ登録成功

--*/


KMSTATUS KMAPI
kmSetVertexRenderState (
		IN	PKMVERTEXCONTEXT pVertexContext
	);

/*++
kmSetModifierRenderState

proto type:
	KMSTATUS
	kmSetModifierRenderState(
			PKMVERTEXCONTEXT	pVertexContext
		);

Description:
	kmProcessVertexRenderStateで設定したKMVERTEXCONTEXT内の 
	以下のメンバを、モデファイアボリュームを使用するポリゴンの、
	２番目のレンダリングパラメータとしてシステムに登録します。
			TSPPARAMBUFFER
			TexturePARAMBUFFER

	これ以降のモデファイアボリュームを使用するポリゴンの頂点Strip登録では、
	ここで指定したKMVERTEXCONTEXTが２番目のレンダリングパラメータとして使用されます。

		KMVERTEXCONTEXT構造体のうち以下のメンバは無効となります。
		(kmSetVertexRenderStateでの設定値が有効となります)
		// for Global Parameter
		KMPARAMTYPE			ParamType			// Parameter Type
		KMLISTTYPE			ListType			// List Type
		KMCOLORTYPE			ColorType			// Color Type
		KMUVFORMAT			UVFormat			// UV format

		// for ISP/TSP Instruction Word
		KMDEPTHMODE			DepthMode;			// DepthMode指定
		KMCULLINGMODE		CullingMode;		// Culling Mode
		KMSCREENCORDINATION	ScreenCoordination;	// Screen Coordination
		KMSHADINGMODE		ShadingMode;		// Shading Mode
		KMMODIFIER			SelectModifier;		// Modifier Volume Valiant
		KMBOOLEAN			fZWriteDisable;		// Z Write Disable

Arguments:
	IN	pVertexContext		レンダリングコンテキストへのポインタを設定します。

Result:
	KMSTATUS_SUCCESS		レンダリングパラメータ登録成功


--*/

KMSTATUS KMAPI
kmSetModifierRenderState(
		IN	PKMVERTEXCONTEXT	pVertexContext
	);

/*++
kmSetGlobalClipping

proto type:
	KMSTATUS
	kmSetGlobalClipping(
				KMINT32 nWidth, 
				KMINT32 nHeight
			);
Description:
	グローバルクリッピング領域を指定します。0,0オリジンでWidth、Heightで指定された
	領域以外のところにはレンダリングされません。

Arguments:
	IN	nWidth, nHeight				タイルサイズの倍数を指定します。
									HOLLYの場合は32x32のタイルサイズのため、
									たとえば128x64の領域を指定したい場合には Width = 4,Height= 2とします。
									ARC1の場合は32x8のタイルサイズですが、 
									HOLLYでのパラメータ指定を神威内部でARC1に合わせて変換(Height×4)します。

Result:
	KMSTATUS_SUCCESS					設定成功
	KMSTATUS_INVALID_PARAMETER			設定失敗

--*/

KMSTATUS KMAPI
kmSetGlobalClipping(
		IN	KMINT32 nWidth, 
		IN	KMINT32 nHeight
	);

/*++
kmUseAnotherModifier

proto type:
	KMSTATUS
	kmUseAnotherModifier(
			KMLISTTYPE kmModifierListType
			);

Description:
	kmModifierListType で指定した Modifier を他方の 
	Modifier としても使用する。

Arguments:
	IN	kmModifierListType		KM_OPAQUE_MODIFIER	Opaque Modifier を Trans Modifier  として使用する。
								KM_TRANS_MODIFIER	Trans Modifier  を Opaque Modifier として使用する。

Result:
	KMSTATUS_SUCCESS				設定成功
	KMSTATUS_INVALID_LIST_TYPE		設定失敗

--*/

KMSTATUS KMAPI
kmUseAnotherModifier(
		IN	KMLISTTYPE kmModifier
			);

/*++
kmSetCheapShadowMode

proto type:
	KMSTATUS
	kmSetCheapShadowMode(
			KMFLOAT fIntensity
			);

Description:
	チープシャドウモードを選択します。この関数で値が設定された後、すべてのModifierVolume設定はチープシャドウモード
	に設定されます。２パラメータボリュームとの共存はできません。CheapShadowModeを終了させるには引数に負の値を入れて、
	この関数を呼び出す必要があります。

Arguments:
	IN	fIntensity				モデファイアボリューム内に入ったポリゴンの輝度を設定します。0.25、0.5、0.75の値を入力
								することができます。それ以外の正の値が入力された場合には、その値を超えない、上記の値に丸められます。
								また、負の値を入力した場合、CheapShadowModeの設定を終了し、通常の２パラメータポリゴンが有効になります。

Result:
	KMSTATUS_SUCCESS					設定成功
	KMSTATUS_INVALID_PARAMETER			パラメータが不正

--*/

KMSTATUS KMAPI
kmSetCheapShadowMode(
		IN	KMFLOAT fIntensity
			);

/*++
kmSetStripLength

proto type:
	KMSTATUS
	kmSetStripLength(
			KMLISTTYPE		ListType,
			KMSTRIPLENGTH	StripLength
		);

Description:
	入力された頂点ストリップデータを、ハードウェア内部で、
	何ポリゴンずつのストリップに分解するかを指定します。
	これ以降の頂点Strip登録では、ここで指定したストリップ長が有効となります。
	ARC1では、ハードウェア内部では、常にストリップ長１に分割されます。
	（内部的には、この関数が発行された後の、指定されたリストタイプでの最初の頂点データ登録時に、
	そのグローバルパラメータのStrip_Lenを設定します。）
Arguments:
	IN	ListType		頂点データリストを指定します。以下のいずれかが指定できます。
						KMLISTTYPE		KM_OPAQUE_POLYGON	= 0	// 不透明ポリゴン
										KM_OPAQUE_MODIFIER	= 1	// 不透明モデファイアボリューム
										KM_TRANS_POLYGON	= 2	// 半透明／透明ポリゴン
										KM_TRANS_MODIFIER	= 3	// 半透明／透明モデファイアボリューム

	IN	StripLength		以下のいずれかが指定できます。
						KMSTRIPLENGTH
							KM_STRIP_01		= 0		// ストリップ長1に分割します。
							KM_STRIP_02 	= 1 	// ストリップ長2に分割します。
							KM_STRIP_04		= 2 	// ストリップ長4に分割します。
							KM_STRIP_06 	= 3		// ストリップ長6に分割します。

Result:
	KMSTATUS_SUCCESS		設定成功

--*/

KMSTATUS KMAPI
kmSetStripLength(
		IN	KMLISTTYPE		ListType,
		IN	KMSTRIPLENGTH	StripLength
	);

/*++
kmSetUserClipping

proto type:
	KMSTATUS
	kmSetUserClipping(
			KMLISTTYPE ListType,
			KMUSERCLIPMODE ClipMode,
			KMINT32	Xmin,
			KMINT32	Ymin,
			KMINT32	Xmax,
			KMINT32 Ymax 
		);

Description:
	ユーザークリッピング領域を設定します。これ以降の頂点Strip登録では、
	ここで指定したユーザークリッピング領域が有効となります
	（内部的にはUser Tile ClipのControl Parameterを、
	指定されたリストタイプの頂点データバッファに積みます）。

注意： kmStartVertexStripとkmSetVertexの間で、 kmSetUserClippingを発行してはいけません。

Arguments:
	IN	ListType		頂点データリストを指定します。以下のいずれかが指定できます。
						KMLISTTYPE	KM_OPAQUE_POLYGON	= 0	// 不透明ポリゴン
									KM_OPAQUE_MODIFIER	= 1	// 不透明モデファイアボリューム
									KM_TRANS_POLYGON	= 2	// 半透明／透明ポリゴン
									KM_TRANS_MODIFIER	= 3	// 半透明／透明モデファイアボリューム

	IN	ClipMode		以下のいずれかが指定できます。
						KMUSERCLIPMODE	KM_USERCLIP_DISABLE	= 0	// ユーザークリップを無効にします。
										KM_USERCLIP_RESERVE	= 1	// これは指定しないでください。
										KM_USERCLIP_INSIDE	= 2	// 指定した領域の内側のみ有効となります。
										KM_USERCLIP_OUTSIDE	= 3	// 指定した領域の外側のみ有効となります。

	IN	Xmin, Ymin, Xmax, Ymax
						ユーザークリップ領域の左上、右下座標を指定します。 
						ここで指定する値はタイル単位です。(1 = 32pixel)
						Xmin,Xmaxは、下位7bitのみ有効です。
						Ymin,Ymaxは、下位4bitのみ有効です。

Result:
	KMSTATUS_SUCCESS		設定成功

--*/

KMSTATUS KMAPI
kmSetUserClipping(
		IN	KMLISTTYPE 		ListType,
		IN	KMUSERCLIPMODE	ClipMode,
		IN	KMINT32			Xmin,
		IN	KMINT32			Ymin,
		IN	KMINT32			Xmax,
		IN	KMINT32			Ymax
	);

/*++
kmSetUserClippingDirect

proto type:
	KMSTATUS
	kmSetUserClippingDirect(
			KMUSERCLIPMODE ClipMode,
			KMINT32	Xmin, 
			KMINT32	Ymin,
			KMINT32	Xmax, 
			KMINT32	Ymax
		);

Description:
	ユーザークリッピング領域を設定します。これ以降の頂点Strip登録では、
	ここで指定したユーザークリッピング領域が有効となります。 
	kmSetUserClippingとの違いについては3.6章を参照してください。
	（内部的にはUser Tile ClipのControl Parameterを、 ＨＷ（タイルアクセラレータ）へ直接書き込みます。）

注意： kmStartVertexStripDirectとkmSetVertexDirectの間で、 kmSetUserClippingDirectを発行してはいけません。

Arguments:
	IN	ClipMode		以下のいずれかが指定できます。
						KMUSERCLIPMODE	KM_USERCLIP_DISABLE	= 0	// ユーザークリップを無効にします。
										KM_USERCLIP_RESERVE	= 1	// これは指定しないでください。
										KM_USERCLIP_INSIDE	= 2	// 指定した領域の内側のみ有効となります。
										KM_USERCLIP_OUTSIDE	= 3	// 指定した領域の外側のみ有効となります。

	IN	Xmin, Ymin, Xmax, Ymax
						ユーザークリップ領域の左上、右下座標を指定します。 
						ここで指定する値はタイル単位です。(1 = 32pixel)
						Xmin,Xmaxは、下位7bitのみ有効です。
						Ymin,Ymaxは、下位4bitのみ有効です。

Result:
	KMSTATUS_SUCCESS		設定成功

--*/

KMSTATUS KMAPI
kmSetUserClippingDirect(
		IN	KMUSERCLIPMODE ClipMode,
		IN	KMINT32	Xmin, 
		IN	KMINT32	Ymin,
		IN	KMINT32	Xmax, 
		IN	KMINT32	Ymax
	);

/*++
kmGetCurrentVertexOffset

proto type:
	KMDWORD
	kmGetCurrentVertexOffset(
			KMLISTTYPE ListType
		);

Description:
	現在、指定のリストタイプのVertexBuffer中で頂点データがストアされている32ビットワード数を返り値として返します。
	本関数で得た値を、kmChangeVertexOffsetやkmChangeVertexPCWと組み合わせて使用することにより、VertexBuffer中の値を
	変更することができます。

Arguments:
	IN	ListType		頂点データリストを指定します。以下のいずれかが指定できます。
						KMLISTTYPE	KM_OPAQUE_POLYGON	= 0	// 不透明ポリゴン
									KM_OPAQUE_MODIFIER	= 1	// 不透明モデファイアボリューム
									KM_TRANS_POLYGON	= 2	// 半透明／透明ポリゴン
									KM_TRANS_MODIFIER	= 3	// 半透明／透明モデファイアボリューム

Result:
	指定リストタイプの現在の書き込み位置を返します。値は指定リストタイプのVertexBufferの、最初のポインタからの
	32bitワードオフセット値(現在の指定リストタイプVertexBufferの使用容量)です。

--*/

KMDWORD KMAPI
kmGetCurrentVertexOffset(
		KMLISTTYPE ListType
	);

/*++
kmChangeVertexOffset

proto type:
	KMSTATUS
	kmChangeVertexOffset(
			KMLISTTYPE ListType,
			KMDWORD    VertexOffset
		);

Description:
	指定リストタイプのVertexBufferの、現在の書き込み位置を変更します。
	
Arguments:
	IN	ListType		頂点データリストを指定します。以下のいずれかが指定できます。
						KMLISTTYPE	KM_OPAQUE_POLYGON	= 0	// 不透明ポリゴン
									KM_OPAQUE_MODIFIER	= 1	// 不透明モデファイアボリューム
									KM_TRANS_POLYGON	= 2	// 半透明／透明ポリゴン
									KM_TRANS_MODIFIER	= 3	// 半透明／透明モデファイアボリューム

	IN	VertexOffset	指定リストタイプの書き込み位置を指定します。kmGetCurrentVertexOffsetなどで取得した値を使用します。

Result:
	KMSTATUS_SUCCESS		設定成功
	KMSTATUS_INVALID_VALUE	指定できない値を設定した

--*/

KMSTATUS KMAPI
kmChangeVertexOffset(
		KMLISTTYPE ListType,
		KMDWORD    VertexOffset
	);

/*++
kmChangeVertexPCW

proto type:
	KMSTATUS
	kmChangeVertexPCW(
			KMLISTTYPE ListType,
			KMDWORD    VertexPCW,
			KMDWORD    IncPtr
		);

Description:
	指定のリストタイプVertexBufferの、現在の書き込み位置にVertexPCWで指定された値を書き込みます。この場合
	VertexBufferのポインタはIncPtrだけ、インクリメントされます。三角形のストリップ定義終了後、途中でストリップを
	中断する場合などに使用します。本関数はVertexBuffer内の整合性を破壊する可能性がありますので使用する場合には十分
	注意してください。また、Vertex定義にDirect系の関数を使用している場合には使用できません。

Arguments:
	IN	ListType		頂点データリストを指定します。以下のいずれかが指定できます。
						KMLISTTYPE	KM_OPAQUE_POLYGON	= 0	// 不透明ポリゴン
									KM_OPAQUE_MODIFIER	= 1	// 不透明モデファイアボリューム
									KM_TRANS_POLYGON	= 2	// 半透明／透明ポリゴン
									KM_TRANS_MODIFIER	= 3	// 半透明／透明モデファイアボリューム

	IN	VertexPCW		頂点定義のParameterControlWordを指定します。
									KM_VERTEXPARAM_NORMAL		= 0xE0000000	// 通常の頂点データ
									KM_VERTEXPARAM_ENDOFSTRIP	= 0xF0000000	// ストリップ終端の頂点データ

	IN	IncPtr			VertexPCWで指定されたパラメータ書き込み後に、VertexBufferのポインタをいくら進めるのかを指定します。
						通常はsizeof(...)/4のように使用しているVertexTypeのサイズを指定します。

Result:
	KMSTATUS_SUCCESS		設定成功

--*/

KMSTATUS KMAPI
kmChangeVertexPCW(
		KMLISTTYPE ListType,
		KMDWORD    VertexPCW,
		KMDWORD    IncPtr
	);

/*++
kmChangeContextColorType

proto type:
	KMSTATUS
	kmChangeContextColorType(
			KMCOLORTYPE Color
		);

Description:
	頂点のカラーフォーマットを変更します。

Arguments:

Result:

--*/

KMSTATUS KMAPI
kmChangeContextColorType(
		KMCOLORTYPE Color
	);

/*++
kmChangeContextDepthMode

proto type:
	KMSTATUS 
	kmChangeContextDepthMode(
			KMDEPTHMODE DepthMode
		);

Description:
	Z値比較モードを選択します。

Arguments:

Result:

--*/

KMSTATUS  KMAPI
kmChangeContextDepthMode(
		KMDEPTHMODE DepthMode
	);

/*++
kmChangeContextCullingMode

proto type:
	KMSTATUS
	kmChangeContextCullingMode(
			KMCULLINGMODE CullingMode
		);

Description:
	カリングモードを選択します。

Arguments:

Result:

--*/

KMSTATUS KMAPI
kmChangeContextCullingMode(
		KMCULLINGMODE CullingMode
	);

/*++
kmChangeContextZwriteDisable

proto type:
	KMSTATUS
	kmChangeContextZwriteDisable(
			KMBOOLEAN fZwriteDisable
		);

Description:
	Z値の更新を禁止/許可します。

Arguments:

Result:

--*/

KMSTATUS KMAPI
kmChangeContextZwriteDisable(
		KMBOOLEAN fZwriteDisable
	);

/*++
kmChangeContextSRCBlendMode

proto type:
	KMSTATUS
	kmChangeContextSRCBlendMode(
			KMBLENDINGMODE SRCBlend
		);

Description:
	ソースのブレンディングモードを選択します。

Arguments:

Result:

--*/

KMSTATUS KMAPI
kmChangeContextSRCBlendMode(
		KMBLENDINGMODE SRCBlend
	);

/*++
kmChangeContextDSTBlendMode

proto type:
	KMSTATUS
	kmChangeContextDSTBlendMode(
			KMBLENDINGMODE DSTBlend
		);

Description:
	ディステネーションのブレンディングモードを選択します。

Arguments:

Result:

--*/

KMSTATUS KMAPI
kmChangeContextDSTBlendMode(
		KMBLENDINGMODE DSTBlend
	);

/*++
kmChangeContextFogMode

proto type:
	KMSTATUS
	kmChangeContextFogMode(
			KMFOGMODE FogMode
		);

Description:
	フォグモードを選択します。

Arguments:

Result:

--*/


KMSTATUS KMAPI
kmChangeContextFogMode(
		KMFOGMODE FogMode
	);

/*++
kmChangeContextFlipUV

proto type:
	KMSTATUS
	kmChangeContextFlipUV(
			KMFLIPMODE FlipMode
		);

Description:
	テクスチャのFlipを設定します。

Arguments:

Result:

--*/

KMSTATUS KMAPI
kmChangeContextFlipUV(
		KMFLIPMODE FlipMode
	);

/*++
kmChangeContextClampUV

proto type:
	KMSTATUS
	kmChangeContextClampUV(
			KMCLAMPMODE ClampMode
		);

Description:
	テクスチャのClampを設定します。

Arguments:

Result:

--*/

KMSTATUS KMAPI
kmChangeContextClampUV(
		KMCLAMPMODE ClampMode
	);

/*++
kmChangeContextFilterMode

proto type:
	KMSTATUS
	kmChangeContextFilterMode(
			KMFILTERMODE FilterMode
		);

Description:
	テクスチャフィルタを設定します。

Arguments:

Result:

--*/

KMSTATUS KMAPI
kmChangeContextFilterMode(
		KMFILTERMODE FilterMode
	);

/*++
kmChangeContextSuperSample

proto type:
	KMSTATUS
	kmChangeContextSuperSample(
			KMBOOLEAN fEnable
		);

Description:
	引数がTRUEの場合anisotoropic Filterを使用します。

Arguments:

Result:

--*/

KMSTATUS KMAPI
kmChangeContextSuperSample(
		KMBOOLEAN fEnable
	);

/*++
kmChangeContextTextureShadingMode

proto type:
	KMSTATUS
	kmChangeContextTextureShadingMode(
			KMTEXTURESHADINGMODE TexShadingmode
		);

Description:
	テクスチャブレンディングモードを指定します。

Arguments:

Result:

--*/

KMSTATUS KMAPI
kmChangeContextTextureShadingMode(
		KMTEXTURESHADINGMODE TexShadingmode
	);

/*++
kmChangeContextColorClamp

proto type:
	KMSTATUS
	kmChangeContextColorClamp(
			KMBOOLEAN fColorClamp
		);

Description:
	引数がTRUEの場合グローバルレジスタの値に従って色がクランプされます。

Arguments:

Result:

--*/

KMSTATUS KMAPI
kmChangeContextColorClamp(
		KMBOOLEAN fColorClamp
	);

/*++
kmChangeContextPaletteBank

proto type:
	KMSTATUS
	kmChangeContextPaletteBank(
			KMDWORD Bank
		);

Description:
	現在のパレットバンクを変更します。

Arguments:

Result:

--*/

KMSTATUS KMAPI
kmChangeContextPaletteBank(
		KMDWORD Bank
	);

/*++
kmCreateVertexBuffer

proto type:
	KMSTATUS
	kmCreateVertexBuffer(
			PKMVERTEXBUFFDESC pBufferDesc,
			KMINT32 OpaquePolygonBuffer,
			KMINT32 OpaqueModifierBuffer,
			KMINT32 TransPolygonBuffer,
			KMINT32 TransModifierBuffer
		);

Description:
	メインメモリ上に、頂点データ登録に使用する４つのバッファ（ダブルバッファ）を確保します。
	また、これに見合う適切なサイズの、タイルアクセラレータ出力用バッファ(Native Data Buffer)を
	フレームバッファメモリ上に確保します。
	この場合の頂点データ登録は、 kmStartVertexStrip, kmSetVertex, kmRenderを使用して
	４つのバッファへ１シーン分のデータを登録した後、まとめてＨＷへ送ることによって実現します。
	ひとつのアプリケーション内でkmCreateVertexBufferとkmCreateTABufferを同時に使用することはできません。

Arguments:
	I/O	pBufferDesc		PKMVERTEXBUFFDESC型の、頂点バッファデスクリプタへのポインタを入力します。
						頂点バッファデスクリプタの各メンバには、ここでアロケートされた
						４つのバッファの先頭アドレスが返されます。

	IN	OpaquePolygonBuffer
						不透明ポリゴンを積み上げる頂点データバッファのサイズ（バイト数）。

	IN	OpaqueModifierBuffer
						不透明モデファイアボリュームを積み上げる頂点データバッファのサイズ（バイト数）。

	IN	TransPolygonBuffer
						半透明／透明ポリゴンを積み上げる頂点データバッファのサイズ（バイト数）。

	IN	TransModifierBuffer
						半透明／透明モデファイアボリュームを積み上げる頂点データバッファのサイズ（バイト数）。


Result:
	KMSTATUS_SUCCESS			頂点データバッファ確保成功
	KMSTATUS_NOT_ENOUGH_MEMORY	メモリ容量が足りない

--*/

KMSTATUS KMAPI
kmCreateVertexBuffer(
		IN	PKMVERTEXBUFFDESC pBufferDesc,
		IN	KMINT32 OpaquePolygonBuffer,
		IN	KMINT32 OpaqueModifierBuffer,
		IN	KMINT32 TransPolygonBuffer,
		IN	KMINT32 TransModifierBuffer
	);

/*++
kmDiscardVertexBuffer

prototype:
KMSTATUS KMAPI
kmDiscardVertexBuffer(
		PKMVERTEXBUFFDESC pBufferDesc
	);

Description:
	kmCreateVertexBuffer で、確保した頂点データ登録用の４つのバッファ(Double Buffer)を
	開放します。また、これと同時に、確保されたタイルアクセラレータ出力用バッファも
	(Native Data Buffer)開放します。

Argument:
	I/O pBufferDesc
		PKMVERTEXBUFFER 型の頂点バッファデスクリプタへのポインタ

Result:
	KMSTATUS_SUCCESS	頂点バッファ開放成功

--*/
KMSTATUS KMAPI
kmDiscardVertexBuffer(
		PKMVERTEXBUFFDESC pBufferDesc
	);


/*++
kmCreateTABuffer

proto type:
	KMSTATUS
	kmCreateTABuffer(
		IN	PKMVERTEXBUFFDESC pBufferDesc,
		IN	KMINT32 TABuffer
		);

Description:
	タイルアクセラレータ出力用バッファ(Native Data Buffer)を、フレームバッファメモリ上に確保します。
	この場合の頂点データ登録は、 kmStartVertexStripDirect, kmSetVertexDirect, kmRenderDirectを使用して
	タイルアクセラレータへ直接データを書き込むことによって実現します。
	ひとつのアプリケーション内で kmCreateVertexBuffer と kmCreateTABuffer を同時に使用することはできません。
Arguments:
	IN	TABuffer	タイルアクセラレータ出力（PowerVRネイテイブデータ）を保存するバッファのサイズ（バイト数）。
			
Result:
	KMSTATUS_SUCCESS			頂点データバッファ確保成功
	KMSTATUS_NOT_ENOUGH_MEMORY	メモリ容量が足りない

--*/

KMSTATUS KMAPI
kmCreateTABuffer(
		IN	PKMVERTEXBUFFDESC pBufferDesc,
		IN	KMINT32 TABuffer
	);

/*++
kmFlushVertexBuffer

proto type:
	KMSTATUS
	kmFlushVertexBuffer(
		IN	KMLISTTYPE ListType,
		);

Description:
	指定リストタイプのVertexBufferをFlushします。内部的には指定リストのDMA転送を開始します。
	本関数は、例えばCLX1でリストがOpaqueから送られることを利用し、少しずつリストを送ることで、Opaqueリストに
	使用されるVertexBufferの容量を節約する場合などに使用します。本関数は、VertexDirect系の関数と併用することは
	できません。また、本関数が呼ばれた時点で、まだ前回のDMA転送が終了していない場合、DMA終了の待ち合わせが発生します。
	使用のときはなるべく待ち合わせが発生しないように注意してください。
	
Arguments:
	IN	ListType		頂点データリストを指定します。以下のいずれかが指定できます。
						KMLISTTYPE	KM_OPAQUE_POLYGON	= 0	// 不透明ポリゴン
									KM_OPAQUE_MODIFIER	= 1	// 不透明モデファイアボリューム
									KM_TRANS_POLYGON	= 2	// 半透明／透明ポリゴン
									KM_TRANS_MODIFIER	= 3	// 半透明／透明モデファイアボリューム

Result:
	KMSTATUS_SUCCESS	設定成功

--*/

KMSTATUS KMAPI
kmFlushVertexBuffer(
		IN	KMLISTTYPE ListType
		);

/*++
kmStartVertexStrip

proto type:
	KMSTATUS
	kmStartVertexStrip( 
			PKMVERTEXBUFFDESC pBufferDesc
		);

Description:
	kmSetVertexRenderState及びkmSetModifierRenderStateで設定されたKMVERTEXCONTEXTから
	グローバルパラメータを生成し、４種の頂点データバッファのいずれかへ書き込みます。
	書き込む頂点データバッファは、 KMVERTEXCONTEXTのListTypeメンバから決定されます。

	注意：ここで書き込むグローバルパラメータの形式はkmSetVertexRenderStateで設定した
		  KMVERTEXCONTEXTから決定されます。ここで書き込んだグローバルパラメータと、
		  これに続くkmSetVertexで書き込む頂点パラメータの	形式の組み合わせが正しくない場合の
		  動作は保証しません。

	<本関数は高速性を要求されるためInline展開されるマクロとして定義されます。>

Arguments:
	IN	pBufferDesc

Result:
	KMSTATUS_SUCCESS		グローバルパラメータ書き込み成功
	KMSTATUS_NOT_ENOUGH_MEMORY	頂点データバッファの容量が足りない

--*/
KMSTATUS KMAPI
kmStartVertexStrip( 
		IN	PKMVERTEXBUFFDESC pBufferDesc
	);

/*++
kmStartVertexStripDirect

proto type:
	KMSTATUS
	kmStartVertexStripDirect(VOID);

Description:
	kmSetVertexRenderState及びkmSetModifierRenderStateで設定された
	KMVERTEXCONTEXTからグローバルパラメータを生成して、ＨＷ（タイルアクセラレータ）へ直接書き込みます。
	ＨＷ（タイルアクセラレータ）に対しては、同一シーンの中では、グローバルパラメータと頂点データは、
	頂点の種類(Opaque Polygon, Opaque Modifier, Translucent Polygon, Translucent Modifier)毎に
	まとめて入力する必要があります。

	注意：	ここで書き込むグローバルパラメータの形式はkmSetVertexRenderStateで設定した 
			KMVERTEXCONTEXTから決定されます。ここで書き込んだグローバルパラメータと、
			これに続くkmSetVertexで書き込む頂点パラメータの形式の組み合わせが正しくない場合の動作は
			保証しません。

		<本関数は高速性を要求されるためInline展開されるマクロとして定義されます。>

Arguments:
	IN	pBufferDesc		KMVERTEXBUFFDESC型の頂点バッファデスクリプタへのポインタです。

Result:
	KMSTATUS_SUCCESS		グローバルパラメータ書き込み成功

--*/

KMSTATUS KMAPI
kmStartVertexStripDirect(VOID);

/*++
kmSetVertex

proto type:
	KMSTATUS
	kmSetVertex(
			PKMVERTEXBUFFDESC pBufferDesc,
			PVOID pVertex,
			KMVERTEXTYPE VertexType,
			KMINT32 StructSize
		);

Description:
	pVertexで指定された頂点データ構造体の各頂点データを、４種の頂点データバッファのいずれかへ書き込みます。
	書き込む頂点データバッファは、 KMVERTEXCONTEXTのListTypeメンバから決定されます。

	<本関数は高速性を要求されるためInline展開されるマクロとして定義されます。>

Arguments:
	IN	pBufferDesc		KMVERTEXBUFFDESC型の頂点バッファデスクリプタへのポインタです。
	IN	pVertex			頂点データ構造体へのポインタです。
	IN	VertexType		頂点データのデータタイプを示します。下記のいずれかを指定します。
						KM_VERTEXTYPE_00			// 頂点データ Type 0
						KM_VERTEXTYPE_01			// 頂点データ Type 1
						KM_VERTEXTYPE_02			// 頂点データ Type 2
						KM_VERTEXTYPE_03			// 頂点データ Type 3
						KM_VERTEXTYPE_04			// 頂点データ Type 4
						KM_VERTEXTYPE_05			// 頂点データ Type 5
						KM_VERTEXTYPE_06			// 頂点データ Type 6
						KM_VERTEXTYPE_07			// 頂点データ Type 7
						KM_VERTEXTYPE_08			// 頂点データ Type 8
						KM_VERTEXTYPE_09			// 頂点データ Type 9
						KM_VERTEXTYPE_10			// 頂点データ Type 10
						KM_VERTEXTYPE_11			// 頂点データ Type 11
						KM_VERTEXTYPE_12			// 頂点データ Type 12
						KM_VERTEXTYPE_13			// 頂点データ Type 13
						KM_VERTEXTYPE_14			// 頂点データ Type 14
						KM_VERTEXTYPE_15			// 頂点データ Type 15
						KM_VERTEXTYPE_16			// 頂点データ Type 16

						＃KMVERTEX?? をコメントにかいておけば良いのに．．．

	IN	StructSize		頂点データのデータタイプサイズを示します。頂点データに使用するタイプに合わせて、
						sizeof(KMVERTEX01)の様に指定してください。


Result:
	KMSTATUS_SUCCESS		頂点データ書き込み成功
	KMSTATUS_NOT_ENOUGH_MEMORY	頂点データバッファの容量が足りない

--*/

KMSTATUS KMAPI
kmSetVertex(
		IN	PKMVERTEXBUFFDESC pBufferDesc,
		IN	PVOID pVertex,
		IN	KMVERTEXTYPE VertexType,
		IN	KMINT32 StructSize
	);

/*++
kmSetVertexDirect

proto type:
	KMSTATUS
	kmSetVertexDirect(
			PVOID pVertex,
			KMVERTEXTYPE VertexType,
			KMINT32 StructSize
		);

Description:
	pVertexで指定された頂点データ構造体の各頂点データを、ＨＷ（タイルアクセラレータ）へ直接書き込みます。
	ＨＷ（タイルアクセラレータ）に対しては、同一シーンの中では、グローバルパラメータと頂点データは、
	頂点の種類(Opaque Polygon, Opaque Modifier, Translucent Polygon, Translucent Modifier)毎に
	まとめて入力する必要があります。

	注意：	ここで書き込む頂点パラメータの形式と、この前のkmSetVertexRenderStateで設定したグローバルパラメータの形式の
			組み合わせが正しくない場合の動作は保証しない。

		<本関数は高速性を要求されるためInline展開されるマクロとして定義されます。>

Arguments:
	IN	pVertex			頂点データ構造体へのポインタです。
	IN	VertexType		頂点データのデータタイプを示します。下記のいずれかを指定します。
						KM_VERTEXTYPE_00			// 頂点データ Type 0
						KM_VERTEXTYPE_01			// 頂点データ Type 1
						KM_VERTEXTYPE_02			// 頂点データ Type 2
						KM_VERTEXTYPE_03			// 頂点データ Type 3
						KM_VERTEXTYPE_04			// 頂点データ Type 4
						KM_VERTEXTYPE_05			// 頂点データ Type 5
						KM_VERTEXTYPE_06			// 頂点データ Type 6
						KM_VERTEXTYPE_07			// 頂点データ Type 7
						KM_VERTEXTYPE_08			// 頂点データ Type 8
						KM_VERTEXTYPE_09			// 頂点データ Type 9
						KM_VERTEXTYPE_10			// 頂点データ Type 10
						KM_VERTEXTYPE_11			// 頂点データ Type 11
						KM_VERTEXTYPE_12			// 頂点データ Type 12
						KM_VERTEXTYPE_13			// 頂点データ Type 13
						KM_VERTEXTYPE_14			// 頂点データ Type 14
						KM_VERTEXTYPE_15			// 頂点データ Type 15
						KM_VERTEXTYPE_16			// 頂点データ Type 16

						＃KMVERTEX?? をコメントにかいておけば良いのに．．．

	IN	StructSize		頂点データのデータタイプサイズを示します。頂点データに使用するタイプに合わせて、
						sizeof(KMVERTEX01)の様に指定してください。
Result:
	KMSTATUS_SUCCESS		頂点データ書き込み成功

--*/

KMSTATUS KMAPI
kmSetVertexDirect(
		IN	PVOID 				pVertex,
		IN	KMVERTEXTYPE		VertexType,
		IN	KMINT32				StructSize
	);


/*++
kmSetEndOfListDirect

proto type:
	KMSTATUS
	kmSetEndOfListDirect( VOID );

Description:
	特定の種類のリストの終了を、HW(タイルアクセラレータ)へ直接通知します。HW(タイルアクセラレータ)に対しては、
	同一シーンの中では、グローバルパラメータと頂点データは、頂点の種類(OpaquePolygon,OpaqueModifier
	TranslucentPolygon,TranslucentModifier)毎にまとめて入力する必要があります。これら４種の頂点の、それぞれの最後に
	kmSetEndOfListDirectを発行して、現在登録中の頂点の種類が終了したことを通知します。
	これは、kmSetVertexを使用して頂点登録を行っている場合は必要ありません。

Arguments:
	None

Result:
	KMSTATUS_SUCCESS		通知成功

--*/

KMSTATUS KMAPI
kmSetEndOfListDirect( VOID );


/*++
kmRender

proto type:
	KMSTATUS
	kmRender( VOID );

Description:
	４種の頂点データバッファすべてに対して、１シーン分の頂点データの登録が終了したことを神威に通知します。
	神威は、バックバッファに対するレンダリングを開始します
	（内部的には、４つの頂点データバッファと"End Of List"のControl Parameterを、順にDMAによって
	ＨＷ（タイルアクセラレータ）へ送り込みます）。

Arguments:
	None

Result:
	KMSTATUS_SUCCESS		通知成功

--*/

KMSTATUS KMAPI
kmRender( VOID );

/*++
kmRenderDirect

proto type:
	KMSTATUS
	kmRenderDirect(VOID);

Description:
	ＨＷ（タイルアクセラレータ）に対して、１シーン分の頂点データの登録が終了したことを神威に通知します。
	神威は、バックバッファに対するレンダリングを開始します（内部的には、"End Of List"のControl Parameterを
	タイルアクセラレータへ送り込みます）。

Arguments:
	None

Result:
	KMSTATUS_SUCCESS		通知成功

--*/

KMSTATUS KMAPI
kmRenderDirect(VOID);

/*++
kmRenderTexture

proto type:
	KMSTATUS
	kmRenderTexture(	
			PKMSURFACEDESC pTextureSurface
		);

Description:
	４種の頂点データバッファすべてに対して、１シーン分の頂点データの登録が終了したことを神威に通知します。
	神威は、指定されたテクスチャに対するレンダリングを開始します。（内部的には、４つの頂点データバッファと
	"End Of List"のControl Parameterを、順にDMAによってＨＷ（タイルアクセラレータ）へ送り込みます。）
	なお、描画先に指定するテクスチャは、Rectangle/Stride形式でなければなりません。

Arguments:
	OUT	pTextureSurface		レンダリング結果を格納するテクスチャです。

Result:
	KMSTATUS_SUCCESS			通知成功
	KMSTATUS_INVALID_TEXTURE	無効なテクスチャを指定した

--*/

KMSTATUS KMAPI
kmRenderTexture(
		PKMSURFACEDESC pTextureSurface
	);

/*++
kmRenderTextureDirect

proto type:
	KMSTATUS
	kmRenderTextureDirect(
			PKMSURFACEDESC pTextureSurface
		);

Description:
	ＨＷ（タイルアクセラレータ）に対して、１シーン分の頂点データの登録が終了したことを神威に通知します。
	神威は、指定されたテクスチャに対するレンダリングを開始します（内部的には、"End Of List"の
	Control Parameterをタイルアクセラレータへ送り込みます）。
	なお、指定するテクスチャは、Rectangle/Stride形式でなければなりません。

Arguments:
	OUT	pTextureSurface		レンダリング結果を格納するテクスチャです。

Result:
	KMSTATUS_SUCCESS		通知成功
	KMSTATUS_INVALID_TEXTURE	無効なテクスチャを指定した

--*/

KMSTATUS KMAPI
kmRenderTextureDirect(
		PKMSURFACEDESC pTextureSurface
	);

/*++
kmSetEORCallback

proto type:

	KMSTATUS 
	kmSetEORCallback(
			PKMCALLBACKFUNC pEORCallback,
			PVOID pCallbackArguments
		);

Description:
	レンダリング終了時に呼ばれるコールバック関数を登録します。
	コールバック関数は、以下の形式でコーディングしてください。

		VOID EORCallbackFunc(PVOID pCallbackArguments);

	pCallbackArguments（入力）：登録時に指定されたパラメータへのポインタです。

Arguments:
	IN	pEORCallback	レンダリング終了時に呼ばれる関数のポインタを指定します。
	IN	pCallbackArguments
						callback 時に呼出される関数へ渡す、引数へのポインタを指定します。


Result:
	KMSTATUS_SUCCESS		登録成功

--*/

KMSTATUS  KMAPI
kmSetEORCallback(
		PKMCALLBACKFUNC pEORCallback,
		PVOID 			pCallbackArguments
	);

/*++
kmSetVSyncCallback

proto type:
	KMSTATUS
	kmSetVSyncCallback(
			PKMCALLBACKFUNC pVSyncCallback,
			PVOID pCallbackArguments
		);

Description:
	垂直帰線区間（Vsync）突入時に呼び出されるコールバック関数を登録します。
	コールバック関数は、以下の形式でコーディングしてください。

		VOID VSyncCallbackFunc(PVOID pCallbackArguments);

	pCallbackArguments（入力）：登録時に指定されたパラメータへのポインタです。

Arguments:
	IN	pVSyncCallback	Vsync突入時に呼ばれる関数のポインタを指定します。
	IN	pCallbackArguments
						callback 時に呼出される関数へ渡す、引数へのポインタを指定します。

Result:
	KMSTATUS_SUCCESS		登録成功

--*/

KMSTATUS KMAPI
kmSetVSyncCallback(
		PKMCALLBACKFUNC pVSyncCallback,
		PVOID 			pCallbackArguments
	);

/*++
kmSetHSyncCallback

proto type:
	KMSTATUS
	kmSetHSyncCallback(
			PKMCALLBACKFUNC pHSyncCallback,
			PVOID pCallbackArguments
		);

Description:
	水平帰線区間（Hsync）突入時に呼び出されるコールバック関数を登録します。
	コールバック関数は、以下の形式でコーディングしてください。

	VOID HSyncCallbackFunc(PVOID pCallbackArguments);

	pCallbackArguments（入力）：登録時に指定されたパラメータへのポインタです。

Arguments:
	IN	pHSyncCallback		Hsync突入時に呼ばれる関数のポインタを指定します。

	pCallbackArguments		callback 時に呼出される関数へ渡す、引数へのポインタを指定します。
							KmSetHSyncLine で指定したライン番号は渡されないので、
							kmSetHSyncLine で設定した値をこのポインタが示す領域に保持するか、
							または、kmGetCurrentScanline()を使用して、現在の Scanline 数を取得してください。

Result:
	KMSTATUS_SUCCESS		登録成功

--*/

KMSTATUS KMAPI
kmSetHSyncCallback(
		PKMCALLBACKFUNC pHSyncCallback,
		PVOID pCallbackArguments
	);

/*++
kmSetHSyncLine

proto type:
	KMSTATUS
	kmSetHSyncLine(
			KMINT32 nInterruptLine
		);

Description:
	表示何ライン目で割り込みを起こすかを指定します。 

Arguments:
	IN	nInterruptLine	何ライン目で割り込みを起こすか指定します。0〜240/480の値を設定してください。 

Result:
	KMSTATUS_SUCCESS			設定成功
	KMSTATUS_ILLEGAL_PARAMETER	値が不正

--*/

KMSTATUS KMAPI
kmSetHSyncLine(
		KMINT32 nInterruptLine
	);

/*++
kmGetCurrentScanline

proto type:
	KMSTATUS
	kmGetCurrentScanline(
			PKMINT32 pScanline
		);

Description:
	現在のH-Syncラインを読み出します。 

Arguments:
	OUT	pScanline	現在のH-Syncラインを格納するKMINT32へのポインタです。 

Result:
	KMSTATUS_SUCCESS			設定成功

--*/

KMSTATUS KMAPI
kmGetCurrentScanline(
		PKMINT32 pScanline
	);

/*++
kmSetTexOverflowCallback

proto type:
	KMSTATUS
	kmSetTexOverflowCallback(
			PKMCALLBACKFUNC pTexOverflowCallback,
			PVOID pCallbackArguments
		);

Description:
	テクスチャメモリが残っていない状態で、テクスチャを登録しようとした場合に呼ばれるコールバック関数を
	登録します。コールバック関数は、以下の形式でコーディングしてください。

		VOID TexOverflowCallbackFunc(PVOID pCallbackArguments);

	pCallbackArguments（入力）：登録時に指定されたパラメータへのポインタです。

Arguments:
	IN	pTexOverflowCallback	テクスチャオーバーフロー時のコールバック関数へのポインタを指定します。
	IN	pCallbackArguments		callback 時に呼出される関数へ渡す、引数へのポインタを指定します。
	
Result:
	KMSTATUS_SUCCESS		登録成功

--*/

KMSTATUS KMAPI
kmSetTexOverflowCallback(
		PKMCALLBACKFUNC pTexOverflowCallback,
		PVOID pCallbackArguments
	);

/*++
kmSetStripOverRunCallback

proto type:
	KMSTATUS
	kmSetStripOverRunCallback (
			PKMCALLBACKFUNC	pStripOverRunCallback,
			PVOID			pCallbackArguments
		);

Description:
	StripBufferの縦サイズの表示期間中に次のStripのレンダリングが終了しなかった場合に呼ばれる
	コールバック関数を登録します。コールバック関数は、以下の形式でコーディングしてください。

			VOID StripOverRunCallbackFunc(PVOID pCallbackArguments);

	pCallbackArguments（入力）：登録時に指定されたパラメータへのポインタです。

Arguments:
	IN	pStripOverRunCallback	コールバック関数へのポインタを指定します。
	IN	pCallbackArguments		callback 時に呼出される関数へ渡す、引数へのポインタを指定します。

Result:
	KMSTATUS_SUCCESS		登録成功

--*/

KMSTATUS KMAPI
kmSetStripOverRunCallback (
		PKMCALLBACKFUNC	pStripOverRunCallback,
		PVOID			pCallbackArguments
	);

/*++
kmSetEndOfVertexCallback

proto type:
	KMSTATUS
	kmSetEndOfVertexCallback (
			PKMCALLBACKFUNC pEndOfVertexCallback,
			PKMVOID			pCallbackArguments
		);

Description:
	神威からレンダリングハードウェアへの、１シーンのデータ転送が終了した場合に呼ばれるコールバック関数を
	登録します。コールバック関数は、以下の形式でコーディングしてください。

			VOID EndOfVertexCallbackFunc(PVOID pCallbackArguments);

	pCallbackArguments（入力）：登録時に指定されたパラメータへのポインタです。

Arguments:
	IN	pEndOfVertexCallback	コールバック関数へのポインタを指定します。
	IN	pCallbackArguments		callback 時に呼出される関数へ渡す、引数へのポインタを指定します。

Result:
	KMSTATUS_SUCCESS		登録成功

--*/

KMSTATUS KMAPI
kmSetEndOfVertexCallback (
		PKMCALLBACKFUNC pEndOfVertexCallback,
		PKMVOID 		pCallbackArguments
	);

/*++
kmStopDisplayFrameBuffer

proto type:
	KMSTATUS
	kmStopDisplayFrameBuffer ( VOID )

Description:
	Frame Bufferの表示を停止します。但し、CRTコントローラが表示を止めるだけですので、
	Frame Bufferの状態は変化しません。

Arguments:
	None
Result:
	KMSTATUS_SUCCESS		成功

--*/
KMSTATUS KMAPI
kmStopDisplayFrameBuffer ( VOID );

/*++
kmGetVersionInfo

proto type:
	KMSTATUS
	kmGetVersionInfo(
			PKMVERSIONINFO pVersionInfo
		);

Description:
	ライブラリのバージョン情報を取得します。
	バージョン情報構造体の内容については別途構造体一覧をご覧ください。

Arguments:
	OUT	pVersionInfo	あらかじめ確保しておいたKMVERSIONINFO構造体へのポインタを示します。

Result:
	KMSTATUS_SUCCESS		成功

--*/
KMSTATUS KMAPI
kmGetVersionInfo(
		PKMVERSIONINFO pVersionInfo
	);

/*++
kmLoadTexture

proto type:

	KMSTATUS
	kmLoadTexture(
			PKMSURFACEDESC pSurfaceDesc,
			PKMDWORD pTexture,
			KMBOOLEAN fAutoMipMap,
			KMBOOLEAN fDither
		);

Description:
	kmCreateTextureSurfaceでアロケートしたテクスチャメモリ上の領域に、 
	pTextureで指定されたメインメモリ上のテクスチャを読み込みます。

Arguments:
	OUT	pSurfaceDesc	kmCreateTextureSurfaceでアロケートしたテクスチャサーフェスです。
	IN	pTexture		メインメモリ上のテクスチャを示すポインタです。
	IN	bAutoMipMap		自動的にMIPMAPを生成するかどうかを指定します。
						TRUEが指定された場合には自動的にMIPMAPを生成します。
	IN	bDither			MIPMAPの自動生成を指定した場合に、自動生成中にディザをかけてMIPMAPを
						生成するかどうかを指定します。TRUEが指定された場合はディザをかけます。
						このフラグはbAutoMipMapにTRUEが指定されたときのみ有効です。

Result:
	KMSTATUS_SUCCESS					読み込み成功
	KMSTATUS_INVALID_TEXTURE_TYPE		無効なテクスチャタイプを指定した
	KMSTATUS_INVALID_MIPMAPED_TEXTURE	MIPMAPできないテクスチャに
										MIPMAPを使用しようとした

--*/
KMSTATUS KMAPI
kmLoadTexture(
		PKMSURFACEDESC pSurfaceDesc,
		PKMDWORD pTexture,
		KMBOOLEAN fAutoMipMap,
		KMBOOLEAN fDither
	);

/*++
kmFreeTexture

proto type:
	KMSTATUS
	kmFreeTexture(
			PKMSURFACEDESC pSurfaceDesc
		);

Description:
	指定したテクスチャサーフェスを解放します。

Arguments:
	I/O	pSurfaceDesc	kmCreateTextureSurfaceでアロケートしたテクスチャサーフェスです。

Result:
	KMSTATUS_SUCCESS				解放成功
	KMSTATUS_INVALID_PARAMETER		解放失敗、テクスチャの指定が不正

--*/

KMSTATUS KMAPI
kmFreeTexture(
		PKMSURFACEDESC pSurfaceDesc
	);


/*++
kmGetFreeTextureMem

proto type:
	KMSTATUS
	kmGetFreeTextureMem(
		PKMUINT32 pSizeOfTexture,
		PKMUINT32 pMaxBlockSizeOfTexture
		);

Description:
	テクスチャメモリの残容量を返します。

Arguments:
	OUT	pSizeOfTexture
			テクスチャメモリの残容量を返すKMDWORD領域へのポインタです。
	OUT	pMaxBlockSizeOfTexture
			テクスチャメモリの空きブロックの最大容量を返すKMDWORD領域へのポインタです。
Result:
	KMSTATUS_SUCCESS		成功

--*/

KMSTATUS KMAPI
kmGetFreeTextureMem(
		PKMUINT32 pSizeOfTexture,
		PKMUINT32 pMaxBlockSizeOfTexture
	);

/*++
kmReLoadMipmap

proto type:
	KMSTATUS
	kmReLoadMipmap(
			PKMSURFACEDESC 	pSurfaceDesc,
			PKMVOID	 		pTexture,
			KMINT32	 		nMipmapCount
		);

Description:
	kmCreateTextureSurfaceでアロケートしたテクスチャメモリ上の領域に、 
	pTextureで指定されたメインメモリ上のミップマップテクスチャを上書き読み込みします。

Arguments:
	I/O	pSurfaceDesc	kmCreateTextureSurfaceでアロケートしたテクスチャサーフェスです。
						＜Reload先です＞

	IN	pTexture		メインメモリ上のミップマップテクスチャを示すポインタです。
						＜Reload元です＞

	IN	nMipmapCount	読み込むミップマップテクスチャのレベルを指定します。
						下記のいずれかを指定することができます。

						nMipmapCount			Texture Size
						KM_MAPSIZE_1x1				   1x1
						KM_MAPSIZE_2x2				   2x2
						KM_MAPSIZE_4x4				   4x4
						KM_MAPSIZE_8x8				   8x8
						KM_MAPSIZE_16x16			  16x16
						KM_MAPSIZE_32x32			  32x32
						KM_MAPSIZE_64x64			  64x64
						KM_MAPSIZE_128x128			 128x128
						KM_MAPSIZE_256x256			 256x256
						KM_MAPSIZE_512x512			 512x512
						KM_MAPSIZE_1024x1024		1024x1024
	

Result:
	KMSTATUS_SUCCESS			成功
	KMSTATUS_INVALID_PARAMETER	パラメータが不正
	KMSTATUS_INVALID_TEXTURE	無効なテクスチャを指定した

--*/
KMSTATUS KMAPI
kmReLoadMipmap(
		PKMSURFACEDESC 	pSurfaceDesc,
		PKMVOID		 	pTexture,
		KMINT32	 		nMipmapCount
	);

/*++
kmGetTexture

proto type:

	KMSTATUS
	kmGetTexture(
		PKMDWORD		pTexture,
		PKMSURFACEDESC	pSurfaceDesc
		);

Description:
	pSurfaceDescで指定したテクスチャメモリ上のテクスチャを、 
	pTextureで指定されたメインメモリ上に読み出します。
	出力には、KAMUIテクスチャフォーマットに従った16バイトのヘッダが付加されます。

Arguments:
	OUT	pTexture		メインメモリ上のテクスチャを保存する領域を示すポインタです。
	IN	pSurfaceDesc	テクスチャが保存されているテクスチャサーフェスです。

Result:
	KMSTATUS_SUCCESS					読み出し成功
	KMSTATUS_INVALID_ADDRESS			指定されたテクスチャサーフェスは
										アロケートされていない

--*/

KMSTATUS KMAPI
kmGetTexture(
		PKMDWORD		pTexture,
		PKMSURFACEDESC	pSurfaceDesc
	);


/*++
kmGarbageCollectTexture

proto type:

	KMSTATUS
	kmGarbageCollectTexture(VOID);

Description:
	フレームバッファメモリのガベージコレクションを行います。

Arguments:

Result:
	KMSTATUS_SUCCESS					ガベージコレクション成功
	KMSTATUS_NOT_ENOUGH_MEMORY			メモリ容量が足りない

--*/

KMSTATUS KMAPI
kmGarbageCollectTexture(KMVOID);



/*++
kmSetFramebufferTexture

proto type:
	KMSTATUS 
	kmSetFramebufferTexture(
		IN	OUT	PKMSURFACEDESC	pSurfaceDesc
	);

Description:
	フレームバッファの情報を、テクスチャ用のSurfaceDescに読み出します。
	直前のフレームバッファの内容が、Stride-Rectanglar-TextureとしてSurfaceDescに設定されます。
	このSurfaceDescを使用してテクスチャマップすることにより、直前のフレームバッファ
	の内容をテクスチャとして使用することができます。
	テクスチャとして使用しようとするフレームバッファは、下記の設定である必要があります。
	・kmSetDisplayModeで、BitDepthとして、KM_DSPBPP_ARGB1555,KM_DSPBPP_ARGB4444,KM_DSPBPP_RGB565
	　のいづれかが指定されていること。

Arguments:
	IN	OUT	pSurfaceDesc	KMSURFACEDESC 構造体の領域を示すポインタです。
							フレームバッファの情報が返されます。

Result:
		KMSTATUS_SUCCESS				フレームバッファの情報読み出し成功
		KMSTATUS_INVALID_TEXTURE_TYPE	現在のフレームバッファの設定はテクスチャとして使用できない

Sample:
	kmSetStrideWidth(nScreenWidth);					// Set screen width
	....(Setup vertex)....
	kmRender();										// Generate previous Frame-Buffer
	kmSetFramebufferTexture(pSurfaceDesc);			// Get Framebuffer information
	VertexContext.pTextureSurfaceDesc	= &pSurfaceDesc;
	kmProcessVertexRenderState(&VertexContext);		// Use Framebuffer as texture
	kmSetVertexRenderState(&VertexContext);			// Set new vertex-context
	....(Setup vertex)....
	kmRender();										// Render!!

--*/

KMSTATUS KMAPI
kmSetFramebufferTexture(
		PKMSURFACEDESC	pSurfaceDesc
	);


/*++
kmLoadVQCodebook

proto type:

	KMSTATUS
	kmLoadVQCodebook(
			PKMSURFACEDESC pSurfaceDesc,
			PKMDWORD pTexture
		);

Description:
	pSurfaceDescで指定されたVQテクスチャサーフェスに、pTextureで指定された
	メインメモリ上のVQテクスチャのコードブック部分のみを読み込みます。
	ロード済みのVQテクスチャの、コードブック(800hバイト)のみを書き換えて
	カラーパレット効果を出したいときに使用します。

Arguments:
	OUT	pSurfaceDesc	kmCreateTextureSurfaceでアロケートしたテクスチャサーフェスです。
						このサーフェスのカテゴリは、KM_TEXTURE_VQまたはKM_TEXTURE_VQ_MM
						のどちらかでなければなりません。
	IN	pTexture		メインメモリ上のテクスチャ（コードブック）を示すポインタです。
						これは完全なVQテクスチャである必要はありませんが、
						少なくとも先頭に800hバイトのコードブックを含んでいる必要があります。

Result:
	KMSTATUS_SUCCESS					読み込み成功
	KMSTATUS_INVALID_TEXTURE_TYPE		無効なテクスチャタイプを指定した

--*/

KMSTATUS KMAPI
kmLoadVQCodebook(
		PKMSURFACEDESC	pSurfaceDesc,
		PKMDWORD		pTexture
	);


/*++
kmCreateContiguousTextureSurface

proto type:
	KMSTATUS 
	kmCreateContiguousTextureSurface(
			PPKMSURFACEDESC	ppSurfaceDesc,
			KMINT32			nTexture,
			KMINT32			nWidth, 
			KMINT32			nHeight, 
			KMTEXTURETYPE	nTextureType
		);

Description:
	フレームバッファの連続したアドレス領域に、同時に複数のテクスチャ用Surfaceを確保します。
	これは、Tile AcceleratorのYUVコンバータを使用して、連続して複数のYUV422形式のテクスチャ
	を読み込むときに使用します。(kmLoadYUVTextureをご参照ください)
	YUV422以外のテクスチャ用Surfaceの確保にも使用することができます。

	なお、ARC1では、このAPIでVQ,VQ-mipmap,Twiddled-mipmapのサーフェスを確保する
	ことはできません。

Arguments:
	IN	OUT	ppSurfaceDesc		KMSURFACEDESC 構造体へのポインタ配列のポインタです。
								確保した Texture Surface の情報が返されます。
								KMSTATUS にKMSTATUS_NOT_ENOUGH_MEMORYが返された場合には不定となります。

	IN	nTexture				連続して確保する Texture Surface の数を指定します。

	IN	nWidth, nHeight			テクスチャの横サイズ、縦サイズを指定します。
								nWidth, nHeightに指定する値は,8, 16, 32, 64, 128, 256, 512, 1024の
								いずれかでなければなりません。

	IN	nTextureType			テクスチャの形式を指定します。
								以下のカテゴリコード、ピクセルフォーマットコードから
								一つずつ選び出し、論理和(or)して与えます

								-カテゴリコード
									KM_TEXTURE_TWIDDLED				// Twiddledフォーマット
									KM_TEXTURE_TWIDDLED_MM			// TwiddledフォーマットMipmapあり(ARC1では指定できません)
									KM_TEXTURE_TWIDDLED_RECTANGLE	// Twiddled-Rectangle			(ARC1では使用できません)
									KM_TEXTURE_VQ					// VQ圧縮フォーマット			(ARC1では指定できません)
									KM_TEXTURE_VQ_MM				// VQ圧縮フォーマットMipmapあり	(ARC1では指定できません)
									KM_TEXTURE_PALETTIZE4			// 4bppパレット形式				(ARC1では使用できません)
									KM_TEXTURE_PALETTIZE4_MM		// 4bppパレット形式Mipmapあり	(ARC1では使用できません)
									KM_TEXTURE_PALETTIZE8			// 8bppパレット形式				(ARC1では使用できません)
									KM_TEXTURE_PALETTIZE8_MM		// 8bppパレット形式Mipmapあり	(ARC1では使用できません)
									KM_TEXTURE_RECTANGLE			// 矩形
									KM_TEXTURE_STRIDE				// 矩形（ストライド指定有り）

								- ピクセルフォーマットコード
									KM_TEXTURE_ARGB1555
									KM_TEXTURE_RGB565
									KM_TEXTURE_ARGB4444
									KM_TEXTURE_YUV422				//	(ARC1では使用できません)
									KM_TEXTURE_BUMP					//	(ARC1では使用できません)

Result:
		KMSTATUS_SUCCESS					テクスチャメモリ確保成功
		KMSTATUS_INVALID_TEXTURE_TYPE		無効なテクスチャタイプを指定した
		KMSTATUS_NOT_ENOUGH_MEMORY			メモリ容量が足りない

--*/

KMSTATUS KMAPI
kmCreateContiguousTextureSurface(
	IN	OUT	PPKMSURFACEDESC	ppSurfaceDesc,
	IN		KMINT32			nTexture,
	IN		KMINT32			nWidth,
	IN		KMINT32			nHeight,
	IN		KMTEXTURETYPE	nTextureType
	);


/*++
kmLoadYUVTexture

proto type:

	KMSTATUS
	kmLoadYUVTexture(
		PPKMSURFACEDESC	ppSurfaceDesc,
		PKMDWORD		pTexture,
		KMINT32			nTexture,
		KMINT32			nFormat
		);

Description:
	kmCreateTextureSurface/kmCreateCombinedTextureSurface/kmCreateContiguousTextureSurface
	でアロケートしたテクスチャメモリ上の領域に、pTextureで指定されたメインメモリ上の
	YUV420-data/YUV422-dataを、Non-Twiddled YUV422テクスチャに変換して読み込みます。
	CLX1の Tile Accelerator に内蔵されている YUV-data converter を使用して、変換しながら
	読み込みます。

	YUV-data converter の出力は Non-Twiddled であるため、このAPIで指定する読み込み先の
	Texture Surface の形式は、以下のいずれかでなければなりません。
		KM_TEXTURE_RECTANGLE | KM_TEXTURE_YUV422	// 矩形
		KM_TEXTURE_STRIDE    | KM_TEXTURE_YUV422	// 矩形（ストライド指定有り）

	複数のYUV-dataを、一度に連続して読み込む場合(nTexture > 1 の時)は、個々のテクスチャの
	サイズは16x16テクセルでなければなりません。このAPIで指定する読み込み先のTexture Surface
	のサイズ指定にご注意ください。
	また、この場合は、読み込み先のTexture Surfaceはフレームバッファ上で連続したアドレスに
	アロケートされていることが必要です。"kmCreateContiguousTextureSurface" APIを使用して
	アロケートしたTexture Surfaceを指定してください。

Arguments:
	IN	ppSurfaceDesc	アロケート済みのテクスチャサーフェスを示すKMSURFACEDESC 構造体への
						ポインタ配列のポインタです。
	IN	pTexture		メインメモリ上のYUV420-data/YUV422-dataを示すポインタです。
	IN	nTexture		連続して読み込む Texture の数を指定します。
						指定できる値は、１から６４のいずれかです。
	IN	nFormat			読み込むデータの形式を指定します。以下のいずれかを指定します。
						KM_TEXTURE_YUV420		入力データがYUV420-dataであることを示します。
						KM_TEXTURE_YUV422		入力データがYUV422-dataであることを示します。

Result:
	KMSTATUS_SUCCESS					読み込み成功
	KMSTATUS_INVALID_TEXTURE_TYPE		無効なテクスチャタイプを指定した

--*/

KMSTATUS KMAPI
kmLoadYUVTexture(
		PPKMSURFACEDESC	ppSurfaceDesc,
		PKMDWORD		pTexture,
		KMINT32			nTexture,
		KMINT32			nFormat
		);


#ifdef __cplusplus
}
#endif 

#endif
