#ifndef _SHADERPROGRAM_H__ #define _SHADERPROGRAM_H__ #include "common.h" #include "glInterface.h" #include #include #include #include namespace CHCDemoEngine { class FrameBufferObject; class Vector3; class Camera; class Matrix4x4; class ShadowMap; class DirectionalLight; typedef std::map CGParameterMap; typedef std::vector CGParameterArray; class ShaderProgram { public: ShaderProgram(CGprogram program): mProgram(program) {} ShaderProgram(CGcontext context, const std::string &filename, CGprofile profile, const std::string &functionName); ~ShaderProgram() { if (mProgram != NULL) cgDestroyProgram(mProgram); } void SetValue1f(const std::string &name, float value); void SetValue2f(const std::string &name, float val1, float val2); void SetValue3f(const std::string &name, float val1, float val, float val3); void SetArray1f(const std::string &name, float *vals, int numElements); void SetArray2f(const std::string &name, float *vals, int numElements); void SetArray3f(const std::string &name, float *vals, int numElements); void SetMatrix(const std::string &name, const Matrix4x4 &mat); void SetTexture(const std::string &name, unsigned int tex); void Release(); void Bind(); inline bool IsValid() { return mProgram != NULL; } protected: CGparameter GetOrCreateParameter(const std::string &name); CGParameterMap mParamHash; //CGParameterArray mParameters; CGParameterArray mTextureParams; CGprogram mProgram; }; typedef std::vector ShaderContainer; } // namespace #endif // _ShaderProgram_H__