Changeset 9818 in orxonox.OLD for branches/new_class_id/src/lib/graphics/shader_data.cc
- Timestamp:
- Sep 25, 2006, 12:10:07 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/new_class_id/src/lib/graphics/shader_data.cc
r9806 r9818 38 38 * standard constructor 39 39 */ 40 Shader ::Shader (const std::string& vertexShaderFile, const std::string& fragmentShaderFile)41 { 42 this->registerObject(this, Shader ::_objectList);40 ShaderData::ShaderData () 41 { 42 this->registerObject(this, ShaderData::_objectList); 43 43 this->shaderProgram = 0; 44 44 this->vertexShader = 0; 45 45 this->fragmentShader = 0; 46 46 } 47 48 49 /// TODO fix that shaders are unloaded first. then loaded 50 bool ShaderData::load(const std::string& vertexShaderFile, const std::string& fragmentShaderFile) 51 { 47 52 if (GLEW_ARB_shader_objects && GLEW_ARB_shading_language_100) 48 53 { … … 50 55 51 56 if (!vertexShaderFile.empty()) 52 this->loadShaderProgramm(Shader ::Vertex, vertexShaderFile);57 this->loadShaderProgramm(ShaderData::Vertex, vertexShaderFile); 53 58 if (!fragmentShaderFile.empty()) 54 this->loadShaderProgramm(Shader ::Fragment, fragmentShaderFile);59 this->loadShaderProgramm(ShaderData::Fragment, fragmentShaderFile); 55 60 56 61 this->linkShaderProgram(); … … 62 67 } 63 68 } 64 65 69 66 70 /** 67 71 * standard deconstructor 68 72 */ 69 Shader ::~Shader()73 ShaderData::~ShaderData () 70 74 { 71 75 if (this->shaderProgram == glGetHandleARB(GL_PROGRAM_OBJECT_ARB)) 72 Shader::deactivateShader();76 glUseProgramObjectARB(0); 73 77 74 78 // delete what has to be deleted here 75 this->deleteProgram(Shader ::Vertex);76 this->deleteProgram(Shader ::Fragment);79 this->deleteProgram(ShaderData::Vertex); 80 this->deleteProgram(ShaderData::Fragment); 77 81 78 82 if (this->fragmentShader != 0) … … 98 102 } 99 103 100 Shader* Shader::storedShader = NULL; 101 102 103 bool Shader::loadShaderProgramm(Shader::Type type, const std::string& fileName) 104 bool ShaderData::loadShaderProgramm(ShaderData::Type type, const std::string& fileName) 104 105 { 105 106 GLhandleARB shader = 0; 106 107 107 if (type != Shader ::Vertex && type != Shader::Fragment)108 if (type != ShaderData::Vertex && type != ShaderData::Fragment) 108 109 return false; 109 110 this->deleteProgram(type); … … 114 115 return false; 115 116 116 if (type == Shader ::Vertex && GLEW_ARB_vertex_shader)117 if (type == ShaderData::Vertex && GLEW_ARB_vertex_shader) 117 118 { 118 119 this->vertexShaderFile = fileName; … … 121 122 } 122 123 123 if (type == Shader ::Fragment && GLEW_ARB_fragment_shader)124 if (type == ShaderData::Fragment && GLEW_ARB_fragment_shader) 124 125 { 125 126 this->fragmentShaderFile = fileName; … … 146 147 147 148 148 void Shader ::linkShaderProgram()149 void ShaderData::linkShaderProgram() 149 150 { 150 151 GLint status = 0; … … 158 159 159 160 160 bool Shader ::readShader(const std::string& fileName, std::string& output)161 bool ShaderData::readShader(const std::string& fileName, std::string& output) 161 162 { 162 163 char lineBuffer[PARSELINELENGTH]; … … 180 181 } 181 182 182 183 184 void Shader::activateShader() 185 { 186 if (likely (this->shaderProgram != 0)) 187 { 188 glUseProgramObjectARB(this->shaderProgram); 189 Shader::storedShader = this; 190 } 191 } 192 193 void Shader::bindShader(const char* name, const float* value, size_t size) 183 void ShaderData::bindShader(const char* name, const float* value, size_t size) 194 184 { 195 185 if (likely (this->shaderProgram != 0)) … … 210 200 } 211 201 212 void Shader::deactivateShader() 213 { 214 if (storedShader != NULL) 215 glUseProgramObjectARB(0); 216 Shader::storedShader = NULL; 217 } 218 219 220 void Shader::deleteProgram(Shader::Type type) 202 void ShaderData::deleteProgram(ShaderData::Type type) 221 203 { 222 204 GLint status = 0; 223 if (type == Shader ::Vertex && this->vertexShader != 0)205 if (type == ShaderData::Vertex && this->vertexShader != 0) 224 206 { 225 207 this->vertexShaderFile = ""; … … 228 210 glGetObjectParameterivARB(this->vertexShader, GL_OBJECT_DELETE_STATUS_ARB, &status); 229 211 if (status == GL_INVALID_VALUE || status == GL_INVALID_OPERATION) 230 Shader ::printError(this->vertexShader);212 ShaderData::printError(this->vertexShader); 231 213 this->vertexShader = 0; 232 214 } 233 else if (type == Shader ::Fragment && this->fragmentShader != 0)215 else if (type == ShaderData::Fragment && this->fragmentShader != 0) 234 216 { 235 217 this->fragmentShaderFile = ""; … … 238 220 glGetObjectParameterivARB(this->fragmentShader, GL_OBJECT_DELETE_STATUS_ARB, &status); 239 221 if (status == GL_INVALID_VALUE || status == GL_INVALID_OPERATION) 240 Shader ::printError(this->fragmentShader);222 ShaderData::printError(this->fragmentShader); 241 223 this->fragmentShader = 0; 242 224 } … … 246 228 247 229 248 void Shader ::printError(GLhandleARB program)230 void ShaderData::printError(GLhandleARB program) 249 231 { 250 232 if (program == 0) … … 267 249 } 268 250 269 bool Shader::checkShaderAbility() 270 { 271 if (GLEW_ARB_shader_objects && 272 GLEW_ARB_shading_language_100 && 273 GLEW_ARB_vertex_shader && 274 GLEW_ARB_fragment_shader) 275 return true; 276 else 277 return false; 278 } 279 280 void Shader::debug() const 281 { 282 PRINT(3)("Shader info: (SHADER: %d)\n", this->shaderProgram); 251 void ShaderData::debug() const 252 { 253 PRINT(3)("ShaderData info: (SHADER: %d)\n", this->shaderProgram); 283 254 if (this->vertexShader != 0) 284 255 {
Note: See TracChangeset
for help on using the changeset viewer.