#ifndef SHADOWMAPPINGSHADER_H
#define SHADOWMAPPINGSHADER_H
#include <Cg/cg.h>
#include <Cg/cgGL.h>
#include <Shader.h>
namespace Graphics
{
class ShadowMappingShader : public Shader
{
public:
ShadowMappingShader();
virtual ~ShadowMappingShader();
virtual bool Initialize(const char* pVertexShaderPath, const char* pPixelShaderPath, const char* pShadowShaderPath);
void BeginShadowPass( FBRenderOptions* pRenderOptions, FBShaderModelInfo* pShaderModelInfo,
FBRenderingPass pPass );
void EndShadowPass();
protected:
void BindShadowPrograms();
void UploadShadowParams( FBRenderOptions* pRenderOptions, FBShaderModelInfo* pShaderModelInfo );
void UnbindShadowPrograms();
void UploadParameters( FBRenderOptions* pRenderOptions, FBShaderModelInfo* pShaderModelInfo, FBArrayTemplate<FBLight*>* pAffectingLightList =
NULL);
void UnsetTextures();
private:
int mShadowSize;
int mShadowPCFKernelSize;
GLuint mFrameBuffer;
GLuint mDepthRenderBuffer;
GLuint mShadowMap;
CGprogram mShadowProjVertexShader;
CGparameter mParamShadowProjMVP;
CGparameter mParamShadowMVP;
CGparameter mParamShadowMap;
CGparameter mParamShadowMapSize;
CGparameter mParamShadowPCFKernelSize;
CGparameter mParamShadowPCFKernelStep;
CGparameter mParamShadowCaster;
int mShadowCaster;
FBMatrix mLightViewMatrix;
FBMatrix mPerspectiveMatrix;
};
}
#endif // SHADOWMAPPINGSHADER_H