diff options
Diffstat (limited to 'KaplaDemo/samples/sampleViewer3/ShaderShadow.h')
| -rw-r--r-- | KaplaDemo/samples/sampleViewer3/ShaderShadow.h | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/KaplaDemo/samples/sampleViewer3/ShaderShadow.h b/KaplaDemo/samples/sampleViewer3/ShaderShadow.h new file mode 100644 index 00000000..2156c0d7 --- /dev/null +++ b/KaplaDemo/samples/sampleViewer3/ShaderShadow.h @@ -0,0 +1,105 @@ +#ifndef SHADER_SHADOW_DIFFUSE_H +#define SHADER_SHADOW_DIFFUSE_H + +//#define USE_OPTIX 1 +#include "Shader.h" +#include <string> +class ShadowMap; + +class ShaderShadow; +class ShaderShadow : public Shader +{ +public: + // RENDER_DEPTH is for shadow map computation + // RENDER_COLOR is for the usual rendering + // RENDER_DEPTH_NORMAL is for SSAO + enum RenderMode{RENDER_DEPTH, RENDER_COLOR, RENDER_DEPTH_NORMAL}; + static RenderMode renderMode; + static float hdrScale; + static GLuint skyBoxTex; + + enum VS_MODE{VS_DEFAULT, VS_4BONES, VS_8BONES, VS_INSTANCE, VS_TEXINSTANCE, VS_DEFAULT_FOR_3D_TEX, VS_FILE,VS_CROSSHAIR}; + enum PS_MODE{PS_WHITE, PS_SHADE, PS_SHADE3D, PS_FILE, PS_NORMAL, PS_CROSSHAIR}; + enum SHADER3D_CHOICES{SAND_STONE, WHITE_MARBLE, GRAYVEIN_MARBLE, BLUEVEIN_MARBLE, GREEN_MARBLE, GRAY_MARBLE, RED_GRANITE, YELLOW_GRANITE, WOOD, COMBINE}; + + ShaderShadow(VS_MODE vsMode = VS_DEFAULT, PS_MODE psMode = PS_SHADE, SHADER3D_CHOICES shade3D = GRAY_MARBLE); + ~ShaderShadow() {}; + + bool init(); + + void setSpotLight(int nr, const PxVec3 &pos, PxVec3 &dir, float decayBegin = 0.98f, float decayEnd = 0.997f); + void setBackLightDir(const PxVec3 &dir) { mBackLightDir = dir; } + + void updateCamera(float* modelView, float* proj); + + void setShadowMap(int nr, ShadowMap *shadowMap) { mShadowMaps[nr] = shadowMap; } + void setNumShadows(int num) { mNumShadows = num; } + void setShowReflection(bool show) { mShowReflection = show; } + bool getShowReflection() const {return mShowReflection;} + + void setReflectionTexId(unsigned int texId) { mReflectionTexId = texId; } + + virtual void activate(const ShaderMaterial &mat); + virtual void deactivate(); + + void setShadowAmbient(float sa); + + // For fast shader debugging + bool forceLoadShaderFromFile(VS_MODE vsm, PS_MODE psm, const char* vsName = NULL, const char* psName = NULL); + + SHADER3D_CHOICES getMyShade3DChoice() {return myShade3DChoice;} + + PxVec3 getDustColor() { return dustColor; } + + virtual bool setUniform(const char* name, const PxMat33& value); + virtual bool setUniform(const char* name, const PxTransform& value); + virtual bool setUniform(const char *name, PxU32 size, const PxVec3* value); + + virtual bool setUniform1(const char* name, float val); + virtual bool setUniform2(const char* name, float val0, float val1); + virtual bool setUniform3(const char* name, float val0, float val1, float val2); + virtual bool setUniform4(const char* name, float val0, float val1, float val2, float val3); + virtual bool setUniformfv(const GLchar *name, GLfloat *v, int elementSize, int count=1); + + virtual bool setUniform(const char* name, float value); + virtual bool setUniform(const char* name, int value); + virtual bool setUniformMatrix4fv(const GLchar *name, const GLfloat *m, bool transpose); + + virtual GLint getUniformCommon(const char* name); + + virtual bool setAttribute(const char* name, PxU32 size, PxU32 stride, GLenum type, void* data); + +private: + static const int mNumLights = 1; + + ShadowMap *mShadowMaps[mNumLights]; + + PxVec3 mSpotLightPos[mNumLights]; + PxVec3 mSpotLightDir[mNumLights]; + + float mSpotLightCosineDecayBegin[mNumLights]; + float mSpotLightCosineDecayEnd[mNumLights]; + + GLuint mReflectionTexId; + + PxVec3 mBackLightDir; + int mNumShadows; + bool mShowReflection; + + float mCamModelView[16]; + float mCamProj[16]; + float shadowAmbient; + PxVec3 ambientColor; + VS_MODE vsMode; + PS_MODE psMode; + + std::string fragmentShader3DComposite; + SHADER3D_CHOICES myShade3DChoice; + PxVec3 dustColor; + + // For shadow map and SSAO + ShaderShadow* whiteShader; + ShaderShadow* normalShader; +}; + +#endif
\ No newline at end of file |