/* ========================================================================== * ÀÛ ¼º ÀÚ : À̼ø±Ô * ÀÛ ¼º ÀÏ : 2008.02.03 * ³» ¿ë : ¼ÎÀÌ´õ * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once class cCamera; class cLightSceneNode; /// ¼ÎÀÌ´õ class cShader { public: cShader(); /// ÃʱâÈ­ virtual void Init( LPD3DXEFFECT effect ); /// bool Begin( cCamera* cam, const D3DXMATRIX& worldViewProj ); void End(); /// void CommitChanges(); void SetAmbientLight( NiAmbientLight* ambientLight ); void SetFog( NiFogProperty* fogProp ); //void SetTexture( LPDIRECT3DBASETEXTURE9 tex ); protected: virtual void SetEffect(); protected: cCamera* mCamera; LPD3DXEFFECT mEffect; D3DXHANDLE mHTechnique; D3DXHANDLE mHWorldViewProj; D3DXHANDLE mHAmbientLight; D3DXHANDLE mHFogColor; D3DXHANDLE mHFogEnd; D3DXHANDLE mHFogRange; //D3DXHANDLE mHTexture; }; inline void cShader::CommitChanges() { mEffect->CommitChanges(); } /// ÁöÇü ¼ÎÀÌ´õ class cTerrainShader : public cShader { public: cTerrainShader(); /// ÃʱâÈ­ void Init( LPD3DXEFFECT effect ); /// void SetOrigin( float x, float y ); void SetPointLight( cLightSceneNode* light ); protected: virtual void SetEffect(); protected: D3DXHANDLE mHOrgX; D3DXHANDLE mHOrgY; D3DXHANDLE mHPointLightPos; D3DXHANDLE mHPointLightDiffuse; D3DXHANDLE mHPointLightAtten; }; class cBrightShader { public: cBrightShader(); void Init( LPD3DXEFFECT effect ); bool Begin( const D3DXMATRIX& worldViewProj ); void End(); /// void CommitChanges(); void SetBright( float br ); /// protected: LPD3DXEFFECT mEffect; D3DXHANDLE mHTechnique; D3DXHANDLE mHWorldViewProj; D3DXHANDLE mHBright; }; inline void cBrightShader::CommitChanges() { mEffect->CommitChanges(); } /// ¹ÙÀ̳ʸ® ¼ÎÀÌ´õ #include class cBinaryShader : public NiBinaryShader { public: bool Initialize( const cString& path ); protected: bool LoadVertexShaderProgram( NiD3DPass& pass, const cString& path ); bool LoadPixelShaderProgram( NiD3DPass& pass, const cString& path ); protected: cString mPath; }; /// NSB ¼ÎÀÌ´õ #include class cNSBShader : public NSBShader { public: // Get the BINARY shader NiBinaryShader* GetBinaryShader( NiD3DRenderer* renderer, const cString& path, unsigned int implementation = NiShader::DEFAULT_IMPLEMENTATION ); }; typedef NiPointer cNSBShaderPtr;