shader.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00033 #ifndef __shader__header__
00034 #define __shader__header__
00035
00036 #include "gpucalc/bindable.h"
00037
00038 #include "gpucalc/shader_system.h"
00039
00040 namespace gpucalc
00041 {
00053 class _GpuCalcExport Shader: public Bindable
00054 {
00055
00056
00057 OBJ_DISABLE_COPY(Shader)
00058
00059
00060
00061 public:
00062 Shader(const std::string & ShaderClassName, const std::string & ShaderName, ShaderSystem * System):
00063 Object(ShaderClassName, ShaderName), Bindable(ShaderClassName, ShaderName), mDefaultShaderSystem(System)
00064 {
00065 }
00066
00067
00068 virtual ~Shader()
00069 {
00070 }
00071
00072
00078 virtual void setSource(const std::string & ShaderSource) = 0;
00079
00080
00084 virtual std::string getSource() const = 0;
00085
00086
00092 virtual void addUniform(Uniform * uniform) = 0;
00093
00094
00098 virtual void removeUniform(Uniform * uniform) = 0;
00099
00100
00104 virtual void compile(const std::string & Parameters = std::string()) = 0;
00105
00106
00113 virtual void validate() = 0;
00114
00115
00119 virtual void preCompute() = 0;
00120
00121
00125 virtual bool isCompiled() const = 0;
00126
00127
00131 virtual bool isDebugEnabled() const = 0;
00132
00133
00134 bool isActive() const
00135 {
00136 return (this == mDefaultShaderSystem->getActiveShader());
00137 }
00138
00139
00140 void bind()
00141 {
00142 mDefaultShaderSystem->bind(this);
00143 }
00144
00145
00146 void unbind()
00147 {
00148 mDefaultShaderSystem->unbind(this);
00149 }
00150
00151
00152 virtual std::string getLanguageID() const = 0;
00153
00154
00155 private:
00156 ShaderSystem * mDefaultShaderSystem;
00157 };
00158 }
00159
00160 #endif