00001 00008 #ifndef SHADER_H 00009 #define SHADER_H 00010 00011 #include <gl/glew.h> 00012 00018 class PixelShader 00019 { 00020 public: 00024 PixelShader(); 00025 00029 ~PixelShader(); 00030 00038 bool Load(const char *file); 00039 00047 bool LoadFromMemory(const char *src); 00048 00052 GLuint GetShaderID() const { return shader; } 00053 00054 protected: 00055 GLuint shader; 00056 }; 00057 00063 class VertexShader 00064 { 00065 public: 00069 VertexShader(); 00070 00074 ~VertexShader(); 00075 00083 bool Load(const char *file); 00084 00092 bool LoadFromMemory(const char *src); 00093 00097 GLuint GetShaderID() const { return shader; } 00098 00099 protected: 00100 GLuint shader; 00101 }; 00102 00108 class ShaderProgram 00109 { 00110 public: 00114 ShaderProgram(); 00115 00119 ~ShaderProgram(); 00120 00129 bool Load(const char *vertexFile, const char *pixelFile); 00130 00139 bool LoadFromMemory(const char *vertexSrc, const char *pixelSrc); 00140 00144 void Attach(); 00145 00149 void Detach(); 00150 00157 void SetTexture(GLuint texID, const char *name); 00158 00167 void SetVector(float x, float y, float z, const char *name); 00168 00175 void SetFloat(float val, const char *name); 00176 00180 VertexShader &GetVertexShader() { return vshader; } 00181 00185 PixelShader &GetPixelShader() { return pshader; } 00186 00187 protected: 00188 00196 bool CreateShaderProgram(); 00197 00198 VertexShader vshader; 00199 PixelShader pshader; 00200 00201 GLuint program; 00202 }; 00203 00204 #endif