// managervertexshader.h #ifndef _3DRENDERER_MANAGERVERTEXSHADER_H_ #define _3DRENDERER_MANAGERVERTEXSHADER_H_ #include "managerbase.h" #include "managerd3d.h" #include enum ENUM_VERTEX_SHADER_TYPE { VST_NONE = 0, // --- Unit °ü·Ã VST_NLINK_BONETRANSFORM_FIRST, VST_BONETRANSFORM_FIRST = VST_NLINK_BONETRANSFORM_FIRST, //{ ------------------------------------------------------------- VST_BONETRANSFORM = VST_BONETRANSFORM_FIRST, // À¯´Ö VST_BONETRANSFORM_2L, VST_BONETRANSFORM_UVNORMAL, // Normal À» ÂüÁ¶Çؼ­ uv Àû¿ë VST_BONETRANSFORM_UV1DNORMAL, VST_BONETRANSFORM_MEMBRANE, // Membrane VST_BONETRANSFORM_UVLIGHT, // Light ¹æÇâ ¸¦ ÂüÁ¶Çؼ­ uv Àû¿ë VST_BONETRANSFORM_UVCHAOS, // VST_BONETRANSFORM_SPECULAR, // ½ºÆäŧ·¯ Àû¿ë VST_BONETRANSFORM_SPECULAR_2L, VST_BONETRANSFORM_PSPECULAR, // Çȼ¿´ç ½ºÆäŧ·¯¸Ê Àû¿ë VST_BONETRANSFORM_PSPECULAR_2L, VST_BONETRANSFORM_FOR_NORMALMAP, // Normal map »ç¿ë VST_BONETRANSFORM_FOR_NORMALMAP_2L, // Normal map »ç¿ë ( Light 2 °³ ) VST_BONETRANSFORM_FOR_INORMALMAP, // Normal map with Irradiance »ç¿ë VST_BONETRANSFORM_FOR_INORMALMAP_2L,// ( Light 2 °³ ) VST_BONETRANSFORM_PHONG, // Phong shading ¿ë VST_BONETRANSFORM_HAZE, VST_BONETRANSFORM_REFRACTION_MASK, VST_BONETRANSFORM_INFLATION, VST_BONETRANSFORM_INFLATION_2L, //} ------------------------------------------------------------- VST_BONETRANSFORM_LAST = VST_BONETRANSFORM_INFLATION_2L, // --- Unit 2-Link °ü·Ã VST_2BONETRANSFORM, VST_2BONETRANSFORM_2L, VST_2BONETRANSFORM_UVNORMAL, VST_2BONETRANSFORM_UV1DNORMAL, VST_2BONETRANSFORM_MEMBRANE, VST_2BONETRANSFORM_UVLIGHT, VST_2BONETRANSFORM_UVCHAOS, // VST_2BONETRANSFORM_SPECULAR, // ½ºÆäŧ·¯ Àû¿ë VST_2BONETRANSFORM_SPECULAR_2L, VST_2BONETRANSFORM_PSPECULAR, // Çȼ¿´ç ½ºÆäŧ·¯¸Ê Àû¿ë VST_2BONETRANSFORM_PSPECULAR_2L, VST_2BONETRANSFORM_FOR_NORMALMAP, VST_2BONETRANSFORM_FOR_NORMALMAP_2L, VST_2BONETRANSFORM_FOR_INORMALMAP, VST_2BONETRANSFORM_FOR_INORMALMAP_2L, VST_2BONETRANSFORM_PHONG, // Phong shading ¿ë VST_2BONETRANSFORM_HAZE, VST_2BONETRANSFORM_REFRACTION_MASK, VST_2BONETRANSFORM_INFLATION, VST_2BONETRANSFORM_INFLATION_2L, // --- Unit 2-Link °ü·Ã VST_3BONETRANSFORM, VST_3BONETRANSFORM_2L, VST_3BONETRANSFORM_UVNORMAL, VST_3BONETRANSFORM_UV1DNORMAL, VST_3BONETRANSFORM_MEMBRANE, VST_3BONETRANSFORM_UVLIGHT, VST_3BONETRANSFORM_UVCHAOS, // VST_3BONETRANSFORM_SPECULAR, // ½ºÆäŧ·¯ Àû¿ë VST_3BONETRANSFORM_SPECULAR_2L, VST_3BONETRANSFORM_PSPECULAR, // Çȼ¿´ç ½ºÆäŧ·¯¸Ê Àû¿ë VST_3BONETRANSFORM_PSPECULAR_2L, VST_3BONETRANSFORM_FOR_NORMALMAP, VST_3BONETRANSFORM_FOR_NORMALMAP_2L, VST_3BONETRANSFORM_FOR_INORMALMAP, VST_3BONETRANSFORM_FOR_INORMALMAP_2L, VST_3BONETRANSFORM_PHONG, // Phong shading ¿ë VST_3BONETRANSFORM_HAZE, VST_3BONETRANSFORM_REFRACTION_MASK, VST_3BONETRANSFORM_INFLATION, VST_3BONETRANSFORM_INFLATION_2L, VST_NLINK_BONETRANSFORM_LAST = VST_3BONETRANSFORM_INFLATION_2L, VST_BONETRANSFORM_LIGHTMAP, VST_BONETRANSFORM_LIGHTMAP_2L, VST_BONETRANSFORM_REFRACTION_GLASS, // ±¼Àý¿ë - À¯¸® VST_BONETRANSFORM_REFRACTION_GLASS_2L, VST_BONETRANSFORM_REFRACTION_CHAOS, // ±¼Àý¿ë - ¿ï··¿ï·· VST_BONETRANSFORM_REFRACTION_INVERSE, // ±¼Àý¿ë - ¹ÝÀü VST_BONETRANSFORM_FOR_NORMALMAP_REFRACTION_GLASS, // ³ë¸»¸Ê ±¼Àý¿ë(NoSunLight) - À¯¸® VST_BONETRANSFORM_FOR_INORMALMAP_REFRACTION_GLASS, VST_BONETRANSFORM_FOR_INORMALMAP_REFRACTION_GLASS_2L, // --- ±×¸²ÀÚ °ü·Ã VST_SHADOW_MAP_FIRST, //{ ------------------------------------------------------------- VST_BONETRANSFORM_SHADOW_MAP = VST_SHADOW_MAP_FIRST, VST_BONETRANSFORM_SHADOW_MAP_DRAW, VST_BONETRANSFORM_SHADOW_MAP_DRAW_H, //{ ------------------------------------------------------------- VST_SHADOW_MAP_LAST, VST_2BONETRANSFORM_SHADOW_MAP = VST_SHADOW_MAP_LAST, VST_2BONETRANSFORM_SHADOW_MAP_DRAW, VST_2BONETRANSFORM_SHADOW_MAP_DRAW_H, VST_3BONETRANSFORM_SHADOW_MAP, VST_3BONETRANSFORM_SHADOW_MAP_DRAW, VST_3BONETRANSFORM_SHADOW_MAP_DRAW_H, VST_OCCLUSION_CULL, // --- Instancing °ü·Ã VST_INSTANCING, // --- Effect °ü·Ã VST_EFFECT_REFRACTION_GLASS, // È¿°ú(°Ë±â) ±¼Àý // --- 2D °ü·Ã VST_2D_PCT, // 2D Position/Color/Texture VST_2D_REFRACTION_PCT, // 2D ±¼Àý¿ë Position/Color/Texture // --- Terrain °ü·Ã VST_TERRAIN, // ÁöÇü VST_TERRAIN_LIGHTMAP, // ÁöÇü + ¶óÀÌÆ®¸Ê VST_TERRAIN_SHADOW_MAP_DRAW, VST_TERRAIN_SHADOW_MAP_DRAW_PROJECTED, VST_TERRAIN_WATER, VST_TERRAIN_WATER11, VST_TERRAIN_SPECULAR, VST_TERRAIN_DETAIL, VST_TERRAIN_SPECULAR_DETAIL, VST_TERRAIN_HAZE, VST_TERRAIN_GLOW, VST_TERRAIN_NORMALMAP, // --- Post Effect °ü·Ã // glow VST_POSTEFF_GLOW_COPY_FROM_BACKBUFFER, // Back buffer ¿¡¼­ ¾ò¾î¿È VST_POSTEFF_GLOW_MIXANDMIX, // µÎ ¹öÆÛ¸¦ ÅëÇØ ¼¯±â VST_POSTEFF_GLOW_APPLY_TO_BACKBUFFER, // ¼¯Àº °á°ú¸¦ Back buffer ¿¡ Àû¿ë // motion blur VST_POSTEFF_MOTION_BLUR_COPY_TO_PREVBUFFER, // ÀÌÀü ÇÁ·¹ÀÓ¹öÆÛ¿¡ ÇöÀç ÇÁ·¹ÀÓ º¹»ç VST_POSTEFF_MOTION_BLUR_BLENDING, // ÀÌÀüÇÁ·¹ÀÓ°ú ÇöÀçÇÁ·¹ÀÓÀÇ ºí·»µù // gray scale VST_POSTEFF_GRAYSCALE_FINAL, // Àü ó¸® ¾øÀÌ ¹Ù·Î Back buffer ¿¡ Àû¿ë VST_POSTEFF_UNIT_MOTIONBLUR_BLENDING, // À¯´Ö´ÜÀ§·Î ÀÌÀü ÇÁ·¹ÀÓ°ú ÇöÀç ÇÁ·¹ÀÓÀÇ ºí·»µù VST_POSTEFF_DOF, // vertex shader for DOF VST_SUN_MASKING, VST_STREE_BRANCH, VST_STREE_BRANCH_SHADOW, VST_STREE_LEAF, VST_STREE_LEAF_SHADOW, VST_STREE_BILLBOARD, VST_STREE_BRANCH_SHADOW_MAP_DRAW, #ifdef _NA_007863_20141203_VOLUME_LIGHT_SCATTERING VST_POSTEFF_SUNLIGHT, // º¼·ý¶óÀÌÆ® Scattering #endif // _NA_007863_20141203_VOLUME_LIGHT_SCATTERING NUM_VST }; const int NUM_BONETRANSFORM = (VST_BONETRANSFORM_LAST - VST_BONETRANSFORM_FIRST + 1); const int NUM_NLINK_BONETRANSFORM = (VST_NLINK_BONETRANSFORM_LAST - VST_NLINK_BONETRANSFORM_FIRST + 1); #define IS_BONETRANSFORM( vst ) \ ( VST_BONETRANSFORM_FIRST <= (vst) && VST_BONETRANSFORM_LAST >= (vst) ) #define IS_NLINK_BONETRANSFORM( vst ) \ ( VST_NLINK_BONETRANSFORM_FIRST <= (vst) && VST_NLINK_BONETRANSFORM_LAST >= (vst) ) typedef struct { LPDIRECT3DVERTEXSHADER9 m_lpVS; // vertex shader LPDIRECT3DVERTEXDECLARATION9 m_lpVD; // vertex declaration LPD3DXCONSTANTTABLE m_lpCT; // constant table } St_VertexShaderObject; /// @name Default Vertex Shader Constants #define DVSC_CLIPMATRIX ( 0x00000001) #define DVSC_LIGHT ( 0x00000002) #define DVSC_COLOR ( 0x00000004) #define DVSC_CAMERA ( 0x00000008) #define DVSC_FOG ( 0x00000010) #define DVSC_OTHERS ( 0x00000020) #define DVSC_ALL ( 0x000000FF) class CManagerVertexShader : public CManagerBase, CManagerD3D { public: CManagerVertexShader(void); virtual ~CManagerVertexShader(void); virtual void Clear(); virtual BOOL Create( CDrawBase *pParentDraw, void *pParam); virtual void Destroy(); virtual void OnLostDevice(); virtual void OnResetDevice(); // ÃʱâÈ­ protected: DWORD m_dwVertexShaderVersion; BOOL m_bShaderVersion11; BOOL m_bShaderVersion20; DWORD m_dwNumConstant; BOOL m_bUseFog; BOOL m_bInstancing; public: virtual BOOL CheckShaderVersion( DWORD dwMajor, DWORD dwMinor); //! ºü¸¥Ã¼Å© - »ó¼öÇü ÀÎÀÚ°ª¿¡ ´ëÇÑ CheckShaderVersion() ÇÔ¼ö ¸®ÅϰªÀÏ ¹Ì¸® ÀúÀåÇØ¼­ »ç¿ë. virtual BOOL CheckShaderVersion11() const { return m_bShaderVersion11; } // 1.1 Áö¿ø¿©ºÎ virtual BOOL CheckShaderVersion20() const { return m_bShaderVersion20; } // 2.0 Áö¿ø¿©ºÎ virtual BOOL CheckBoneTransform( int iNumBone); virtual int GetMaxNumBoneToTransform(); virtual BOOL CheckInstancing(){ return m_bInstancing;} // Instancing Áö¿ø ¿©ºÎ // Vertex Shader Object °ü¸® protected: St_VertexShaderObject m_vsoList[NUM_VST]; int m_iVSVersionNumberToUse; // »ç¿ëÇÒ VS ¹öÀü ( 0 - 1.1, 1 - 2.0) void CreateVos( char *lpszShaderPath); void DestroyVos(); void CheckVSVersionNumberToUse(); BOOL CatShaderFileName( char *lpszFilePath, int iIndex, BOOL bHLSL, int iTrial = 0); BOOL CreateVSFromAscii( int iIndex, char *lpszFileName, BOOL bHLSL); BOOL CreateVSFromBinary( int iIndex, char *lpszFileName, BOOL bHLSL); public: virtual BOOL UseVos( int iVst, void* pParam = NULL) { return ( UseVos( ( ENUM_VERTEX_SHADER_TYPE)iVst, pParam)); } BOOL CheckVos( int iVst) { return ( CheckVos( ( ENUM_VERTEX_SHADER_TYPE)iVst)); } virtual BOOL CheckVos( ENUM_VERTEX_SHADER_TYPE eVst); void SetBoneMatrixOnConstant( WzMatrix *pwmTransform, int iNumBone, void* pvParam=NULL); void SetWorldMatrixOnConstantForInstancing( CWzArray* parInstancingInfo, int iArraySize, int iStartIndex ); // ¼³Á¤°ª protected: WzVector m_wvFactorForUVNormal[2]; WzUVVert m_wuvShift; ENUM_SHADING_TYPE m_eShadingType; WzColor m_wcDrawColor; WzColor m_wcAmbient; float m_fSpecular[4]; float m_fRefractionRate; float m_fInflationFactor; float m_fDetailTextureScale; float m_fTweeningFactor[2]; float m_fHazeDist; public: void SetFactorForUVNormal( WzVector *pwvFactorForUVNormal); void SetUVShift( WzUVVert *pwuvShift = NULL); void SetShadingType( ENUM_SHADING_TYPE eShadingType) { m_eShadingType = eShadingType; } void SetDiffuseColor( WzColor wcDrawColor) { m_wcDrawColor = wcDrawColor; } void SetSpecularColor( WzColor wcColor, float fIntensity); void SetAmbientColor( WzColor wcColor) { m_wcAmbient = wcColor; } void SetRefractionRate( float fRefractionRate) { m_fRefractionRate = fRefractionRate; } void SetInflationFector( float fInflationFactor) { m_fInflationFactor = fInflationFactor; } void SetDetailTextureScale( float fScale ){ m_fDetailTextureScale = fScale; } void SetTweeningFactor( int index, float fWeight ) { m_fTweeningFactor[index] = fWeight; } void SetHazeDist( float fHazeDist){ m_fHazeDist = fHazeDist; } public: enum { MAX_DEFAULT_CONSTANT = 20 }; // Ç¥ÁØ Shader ó¸® virtual BOOL UseVos( ENUM_VERTEX_SHADER_TYPE eVst, void* pParam = NULL) { return UseDefaultVos(eVst); } // Ç¥ÁØ ¿Ü Shader 󸮸¦ À§ÇÑ ÇÔ¼ö BOOL SetFog( ENUM_VERTEX_SHADER_TYPE eVst); BOOL SetShaderConstants( const float* pConstants, int iStartIndex, int iVec4Count); BOOL SetShaderConstantsMatrix( const WzMatrix* pwmConstants, int iStartIndex); BOOL SetShaderDeclaration( ENUM_VERTEX_SHADER_TYPE eVst); BOOL SetShader( ENUM_VERTEX_SHADER_TYPE eVst); const float* FillDefaultConstants( DWORD dwFlags = DVSC_ALL, BOOL bHlsl = TRUE); const float* GetDefaultConstants(int iIndex=0) const { return m_fDefaultConstant[iIndex]; } enum { MAX_2D_CONSTANTS = 256 }; int GetNumberOf2DConstants() const { return m_iNum2DConstant; } float* Get2DConstants(int iIndex=0) { return &m_f2DConstant[iIndex][0]; } protected: BOOL UseDefaultVos( ENUM_VERTEX_SHADER_TYPE eVst); protected: union { __m128 m_fDefaultConstantA16[MAX_DEFAULT_CONSTANT]; float m_fDefaultConstant[MAX_DEFAULT_CONSTANT][4]; }; float m_f2DConstant[MAX_2D_CONSTANTS][4]; int m_iNum2DConstant; protected: WzDeclare_Sync( VertexShader); }; #endif // _3DRENDERER_MANAGERVERTEXSHADER_H_