Changeset 7835 in orxonox.OLD for branches/water
- Timestamp:
- May 24, 2006, 8:55:03 PM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/water/src/lib/graphics/shader.h
r7834 r7835 15 15 16 16 17 17 18 //! A class for ... 18 19 class Shader : public BaseObject 19 20 { 21 public: 22 class Uniform 23 { 20 24 public: 25 Uniform(const Shader* shader, const std::string& location) { glGetUniformLocationARB(shader->getProgram(), location.c_str()) ; } 26 Uniform(const Shader& shader, const std::string& location) { glGetUniformLocation(shader.getProgram(), location.c_str()) ; }; 27 Uniform(GLhandleARB shaderProgram, const std::string& location) { glGetUniformLocation(shaderProgram, location.c_str()) ; }; 28 29 void set(float v0) const { glUniform1f(this->uniform, v0); } 30 void set(float v0, float v1) const { glUniform2f(this->uniform, v0, v1); } 31 void set(float v0, float v1, float v2) const { glUniform3f(this->uniform, v0, v1, v2); } 32 void set(float v0, float v1, float v2, float v3) const { glUniform4f(this->uniform, v0, v1, v2, v3); } 33 34 void set(int v0) const { glUniform1i(this->uniform, v0); } 35 void set(int v0, int v1) const { glUniform2i(this->uniform, v0, v1); } 36 void set(int v0, int v1, int v2) const { glUniform3i(this->uniform, v0, v1, v2); } 37 void set(int v0, int v1, int v2, int v3) const { glUniform4i(this->uniform, v0, v1, v2, v3); } 38 39 void setV(unsigned int count, float* vv) const 40 { 41 switch (count) 42 { 43 case 1: 44 glUniform1fv(this->uniform, 1, vv); 45 break; 46 case 2: 47 glUniform2fv(this->uniform, 2, vv); 48 break; 49 case 3: 50 glUniform3fv(this->uniform, 3, vv); 51 break; 52 case 4: 53 glUniform4fv(this->uniform, 4, vv); 54 break; 55 } 56 } 57 void setV(unsigned int count, int* vv) const 58 { 59 switch (count) 60 { 61 case 1: 62 glUniform1iv(this->uniform, 1, vv); 63 break; 64 case 2: 65 glUniform2iv(this->uniform, 2, vv); 66 break; 67 case 3: 68 glUniform3iv(this->uniform, 3, vv); 69 break; 70 case 4: 71 glUniform4iv(this->uniform, 4, vv); 72 break; 73 } 74 } 75 private: 76 GLint uniform; 77 }; 78 21 79 typedef enum 22 80 { … … 26 84 27 85 Program = 4, 28 } Type; 86 } 87 Type; 29 88 30 89 public: 31 90 Shader(const std::string& vertexShaderFile = "", const std::string& fragmentShaderFile = ""); 32 91 virtual ~Shader(); … … 39 98 static void deactivateShader(); 40 99 100 Shader::Uniform getUniform(const std::string& location) { return Shader::Uniform(this, location); } 41 101 42 102 bool loadShaderProgramm(Shader::Type type, const std::string& fileName); … … 49 109 50 110 51 111 inline static bool shaderActive() { return (Shader::storedShader != NULL)? true : false; }; 52 112 inline static Shader* getActiveShader() { return Shader::storedShader; }; 53 113 inline static void suspendShader() { Shader* currShader = storedShader; if (storedShader!= NULL) { Shader::deactivateShader(); Shader::storedShader = currShader;} }; 54 114 inline static void restoreShader() { if (storedShader != NULL) storedShader->activateShader(); storedShader = NULL; }; 115 116 55 117 56 118 … … 64 126 65 127 66 67 68 128 private: 129 std::string fragmentShaderFile; 130 std::string vertexShaderFile; 69 131 70 132 GLhandleARB shaderProgram; 71 133 72 73 134 GLhandleARB vertexShader; 135 GLhandleARB fragmentShader; 74 136 75 137 76 138 static Shader* storedShader; 77 139 }; 78 140
Note: See TracChangeset
for help on using the changeset viewer.