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

    NN System library for DXG20

    Copyright (C) 2002 - 2004 SEGA Corporation Creative Center Graphics Sect.
    All Rights Reserved.

    Module  : NN System Library for DXG20
    File    : nnlsystempc.h
    Create  : 2003/06/05
    Modify  : 2003/06/05
    Modify  : 2003/07/14 Xbox,PC共通化向けの修正
    Modify  : 2003/11/27 レンダリングステート設定をNN関数化
    Modify  : 2004/06/16 DX8,DX9版統合
    Modify  : 2005/02/18 nnExitConfigureSystemXB関数の追加
    Modify  : 2008/11/14 nnGetDirect3DDeviceDXG20, nnGetD3DPresentParametersDXG20 関数の追加
	                     nnInitShaderVersionDXG20 関数を削除して nnConfigureSystemDXG20 関数の引数にシェーダバージョン追加
    Modify  : 2008/11/19 nnGetPixelShaderShaderVertexVersionDXG20 関数名を nnGetPixelShaderVersionDXG20 に変更
	                     nnGetVertexShaderVersionStringDXG20 を新規に追加
						 nnGetPixelShaderVersionStringDXG20 を新規に追加
    Modify  : 2009/01/19 nnSetD3DXIncludeDXG20 関数を追加
	                     nnGetD3DXIncludeDXG20 関数を追加
    Modify  : 2009/05/12 ヘッダ整理
    Version : 1.18.46
    Note    :

---------------------------------------------------------------------------*/
#ifndef __NNLSYSTEMDXG20_H__
#define __NNLSYSTEMDXG20_H__

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

/* 2008.08.07〜2008.11.14 */
typedef enum {
	NNE_SHADER_VERSION_2_0,
	NNE_SHADER_VERSION_2_a,
	NNE_SHADER_VERSION_2_b,	/* Pixel Shader のみ指定可能(ただし誤って頂点シェーダにも指定した場合は１つ下のバージョンになる) */
	NNE_SHADER_VERSION_3_0,
	NNE_SHADER_VERSION_DEFAULT,
} NNE_SHADER_VERSION;


/* 2008.08.27〜2008.11.19 */
NNE_SHADER_VERSION nnGetVertexShaderVersionDXG20(void);
NNE_SHADER_VERSION nnGetPixelShaderVersionDXG20(void);
const char *nnGetVertexShaderVersionStringDXG20(void);
const char *nnGetPixelShaderVersionStringDXG20(void);


Sint32 nnConfigureSystemDXG20( const void *d3ddevice, const void *d3dpp, NNE_SHADER_VERSION vsVer, NNE_SHADER_VERSION psVer);
void nnExitConfigureSystemDXG20(void);
const void *nnGetDirect3DDeviceDXG20(void);
const void *nnGetD3DPresentParametersDXG20(void);

void nnSetD3DXIncludeDXG20(const void *d3dinc);
const void *nnGetD3DXIncludeDXG20(void);


/* 内部関数 */
void nnSetBlendModeDXG20( NNE_BOOL bEnable, NNE_BLENDMODE SrcBlend,
						  NNE_BLENDMODE DstBlend, NNE_BLENDOP BlendOp,
						  Uint32 BlendFactor, NNE_BLENDLOGICOP LogicOp );
void nnSetAlphaCompareDXG20( NNE_BOOL bEnable, NNE_CMPFUNC AlphaFunc, Uint32 AlphaRef );
void nnSetZModeDXG20( NNE_BOOL bCompEnable, NNE_CMPFUNC ZFunc, NNE_BOOL bZWriteEnable );
void nnSetCullModeDXG20( NNE_CULLMODE CullMode );
/**/

/* 2008.09.12(ユーザが独自で描画する場合など、DXG20で管理する頂点宣言に違いが出るため、頂点宣言をリセットする必要がある */
void nnResetVertexDeclarationDXG20(void);

/* 内部関数 */
void nnSetRenderState( D3DRENDERSTATETYPE State, DWORD Value);
void nnSetTextureStageState( DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value );
void nnSetSamplerState( DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value );
/**/

/* 内部関数 */
Sint32 nnInitPrimShader(void);
void nnExitPrimShader(void);
/**/


/* DXG20で必要ない定義(2009.05.12) */
#define	_SW16( n )	(n)
#define	_SW32( n )	(n)
#define	_SW_F( a )	(a)

#define nnbSwapEndianObject( pObj )
#define nnbSwapEndianTexture( pTexFileList )
#define nnbSwapEndianMotion( pMotion )
#define nnbSwapEndianMaterialMotion( pMotion )
#define nnbSwapEndianNodeName( pName )
#define nnbSwapEndianMorphTarget( pMorphTarget )
#define nnbSwapEndianCustomShader( pCustomShader )
#define nnbSwapEndianEffectList( pEftLst )
#define nnbSwapEndianLight( pLightPtr )
#define nnbSwapEndianCamera( pCameraPtr )
/**/

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* __NNLSYSTEMDXG20_H__ */

/* End of file */
