#ifndef SHADER_H #define SHADER_H #include "common.h" enum ShaderVarType { RAVEN_SHADER_SAMPLER, RAVEN_SHADER_FLOAT1, RAVEN_SHADER_FLOAT2, RAVEN_SHADER_FLOAT3, RAVEN_SHADER_FLOAT4, RAVEN_SHADER_INT1, RAVEN_SHADER_INT2, RAVEN_SHADER_INT3, RAVEN_SHADER_INT4, RAVEN_SHADER_MATRIX_2X2, RAVEN_SHADER_MATRIX_3X3, RAVEN_SHADER_MATRIX_4X4, }; struct ShaderVariable { ShaderVarType type; void *val; char name[1024]; ShaderVariable(): val(NULL), type(RAVEN_SHADER_INT1) {} ShaderVariable(const ShaderVariable &var) { strcpy(this->name,var.name); this->val=var.val; this->type=var.type; } ShaderVariable(const char *name,void *val,ShaderVarType type=RAVEN_SHADER_INT1): val(val), type(type) { strcpy(this->name,name); } }; class ShaderProgram { protected: bool hasfrag; bool is_valid; unsigned int numuniforms; ShaderVariable uniforms[64]; char *vpsrc,*fpsrc; virtual char *LoadShaderFile(const char *filename); public: ShaderProgram(const char *dir,const char *name,bool fragprogram); virtual ~ShaderProgram(); virtual bool IsValid() {return is_valid;} virtual bool AddUniform(const ShaderVariable &var); virtual void ClearUniforms(); virtual void Bind()=0; }; #endif