/*---------------------------------------------------------------------------

    NN Draw Primitive Library for DXG20

    Copyright (C) 2002, 2003 SEGA Corporation Creative Center Graphics Sect.
    All Rights Reserved.

    Module  : NN Draw Primitive Library for DXG20
    File    : nnldrawprimxe.h
    Create  : 2003/06/05
    Modify  : 2003/06/05
    Modify  : 2003/07/14 Xbox,PC共通化向けの修正
	Modify  : 2009/01/27 nnSetPrimitive2DAlphaTestDXG20 関数を追加。
	                     nnSetPrimitive2DAlphaFuncDXG20 関数を追加。
						 nnSetPrimitive2DDepthTestDXG20 関数を追加。
						 nnSetPrimitive2DDepthFuncDXG20 関数を追加。
						 nnSetPrimitive2DDepthMaskDXG20 関数を追加。
						 nnSetPrimitive3DAlphaTestDXG20 関数を追加。
						 nnSetPrimitive3DAlphaFuncDXG20 関数を追加。
						 nnSetPrimitive3DDepthTestDXG20 関数を追加。
						 nnSetPrimitive3DDepthFuncDXG20 関数を追加。
						 nnSetPrimitive3DDepthMaskDXG20 関数を追加。
	Modify  : 2009/04/14 nnSetPrimitive2DBlendDXG20 関数を追加。
	                     nnSetPrimitive3DBlendDXG20 関数を追加。
	Modify  : 2009/05/12 ヘッダ整理
    Version : 0.01.03
    Note    : 

---------------------------------------------------------------------------*/
#ifndef __NNLDRAWPRIMDXG20_H__
#define __NNLDRAWPRIMDXG20_H__

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

typedef enum {
    // 
	NNE_PRIM2D_VTX_DECL_TYPE_PC,
	NNE_PRIM2D_VTX_DECL_TYPE_PCT,
    // 
	NNE_PRIM3D_VTX_DECL_TYPE_P,
	NNE_PRIM3D_VTX_DECL_TYPE_PC,
	NNE_PRIM3D_VTX_DECL_TYPE_PCT,
	NNE_PRIM3D_VTX_DECL_TYPE_PN,
	NNE_PRIM3D_VTX_DECL_TYPE_PNT,
	NNE_PRIM3D_VTX_DECL_TYPE_PT,
	NNE_PRIM3D_VTX_DECL_TYPE_PTT,
	NNE_PRIM3D_VTX_DECL_TYPE_PCTT,
	NNE_PRIM3D_VTX_DECL_TYPE_PNTT,
	NNE_PRIM_VTX_DECL_TYPE_MAX
} NNE_PRIM_VTX_DECL_TYPE;

/* 内部関数 */
void nnSetFvfPrimitive( NNE_PRIM_VTX_DECL_TYPE type );
/**/

/* 2Dプリミティブのアルファテスト有効／無効 */
void nnSetPrimitive2DAlphaTestDXG20( NNE_BOOL enb );
/* 2Dプリミティブのアルファテスト設定 */
void nnSetPrimitive2DAlphaFuncDXG20( NNE_CMPFUNC func, Uint32 ref );
/* 2Dプリミティブのデプステスト有効／無効 */
void nnSetPrimitive2DDepthTestDXG20( NNE_BOOL enb );
/* 2Dプリミティブのデプステスト設定 */
void nnSetPrimitive2DDepthFuncDXG20( NNE_CMPFUNC func );
/* 2Dプリミティブのデプスマスク設定 */
void nnSetPrimitive2DDepthMaskDXG20( NNE_BOOL enb );
/* 2Dプリミティブのブレンドモードの設定 */
void nnSetPrimitive2DBlendDXG20( NNE_BLENDMODE srcFunc, NNE_BLENDMODE dstFunc, NNE_BLENDOP op);

/* 3Dプリミティブのアルファテスト有効／無効 */
void nnSetPrimitive3DAlphaTestDXG20( NNE_BOOL enb );
/* 3Dプリミティブのアルファテスト設定 */
void nnSetPrimitive3DAlphaFuncDXG20( NNE_CMPFUNC func, Uint32 ref );
/* 3Dプリミティブのデプステスト有効／無効 */
void nnSetPrimitive3DDepthTestDXG20( NNE_BOOL enb );
/* 3Dプリミティブのデプステスト設定 */
void nnSetPrimitive3DDepthFuncDXG20( NNE_CMPFUNC func );
/* 3Dプリミティブのデプスマスク設定 */
void nnSetPrimitive3DDepthMaskDXG20( NNE_BOOL enb );
/* 3Dプリミティブのブレンドモードの設定 */
void nnSetPrimitive3DBlendDXG20( NNE_BLENDMODE srcFunc, NNE_BLENDMODE dstFunc, NNE_BLENDOP op);

/* 2008.08.06 */
/**/
void nnGetRegModeDrawPrimitiveDXG20(void);	/* nnBeginDrawPrimitive_***_DXG20 の前に必ず呼ぶ */
void nnSetRegModeDrawPrimitiveDXG20(void);	/* nnEndDrawPrimitive_***_DXG20 の後に必ず呼ぶ */

/* 2D */
void nnBeginDrawPrimitive2DDXG20( NNE_PRIM2D_FMT fmt, NNE_PRIM_ALPHABLEND blend );
void nnEndDrawPrimitive2DDXG20( void );

/* 3D */
void nnBeginDrawPrimitive3DDXG20( NNE_PRIM3D_FMT fmt, NNE_PRIM_ALPHABLEND blend, NNE_PRIM_LIGHT light, NNE_PRIM_CULL cull );
void nnEndDrawPrimitive3DDXG20( void );

/* 2D Line */
void nnBeginDrawPrimitiveLine2DDXG20( const NNS_RGBA *col, NNE_PRIM_ALPHABLEND blend );
void nnEndDrawPrimitiveLine2DDXG20( void );

/* 3D Line */
void nnBeginDrawPrimitiveLine3DDXG20( const NNS_RGBA *col, NNE_PRIM_ALPHABLEND blend );
void nnEndDrawPrimitiveLine3DDXG20( void );

/* 2D Point */
void nnBeginDrawPrimitivePoint2DDXG20( NNE_PRIM2D_POINT_FMT fmt, const NNS_RGBA *col, NNE_PRIM_ALPHABLEND blend );
void nnEndDrawPrimitivePoint2DDXG20( void );

/* 3D Point */
void nnBeginDrawPrimitivePoint3DDXG20( NNE_PRIM3D_POINT_FMT fmt, const NNS_RGBA *col, NNE_PRIM_ALPHABLEND blend );
void nnEndDrawPrimitivePoint3DDXG20( void );
/**/

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* __NNLDRAWPRIMDXG20_H__ */

/* End of file */
