Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Sep 25, 2006, 12:10:07 PM (18 years ago)
Author:
bensch
Message:

Switching to new Shader layout, with Shader and ShaderData. Shaders do not render for the time being

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/new_class_id/src/lib/graphics/shader_data.cc

    r9806 r9818  
    3838 * standard constructor
    3939*/
    40 Shader::Shader (const std::string& vertexShaderFile, const std::string& fragmentShaderFile)
    41 {
    42   this->registerObject(this, Shader::_objectList);
     40ShaderData::ShaderData ()
     41{
     42  this->registerObject(this, ShaderData::_objectList);
    4343  this->shaderProgram = 0;
    4444  this->vertexShader = 0;
    4545  this->fragmentShader = 0;
    46 
     46}
     47
     48
     49/// TODO fix that shaders are unloaded first. then loaded
     50bool ShaderData::load(const std::string& vertexShaderFile, const std::string& fragmentShaderFile)
     51{
    4752  if (GLEW_ARB_shader_objects && GLEW_ARB_shading_language_100)
    4853  {
     
    5055
    5156    if (!vertexShaderFile.empty())
    52       this->loadShaderProgramm(Shader::Vertex, vertexShaderFile);
     57      this->loadShaderProgramm(ShaderData::Vertex, vertexShaderFile);
    5358    if (!fragmentShaderFile.empty())
    54       this->loadShaderProgramm(Shader::Fragment, fragmentShaderFile);
     59      this->loadShaderProgramm(ShaderData::Fragment, fragmentShaderFile);
    5560
    5661    this->linkShaderProgram();
     
    6267  }
    6368}
    64 
    6569
    6670/**
    6771 * standard deconstructor
    6872 */
    69 Shader::~Shader ()
     73ShaderData::~ShaderData ()
    7074{
    7175  if (this->shaderProgram == glGetHandleARB(GL_PROGRAM_OBJECT_ARB))
    72     Shader::deactivateShader();
     76    glUseProgramObjectARB(0);
    7377
    7478  // 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);
    7781
    7882  if (this->fragmentShader != 0)
     
    98102}
    99103
    100 Shader* Shader::storedShader = NULL;
    101 
    102 
    103 bool Shader::loadShaderProgramm(Shader::Type type, const std::string& fileName)
     104bool ShaderData::loadShaderProgramm(ShaderData::Type type, const std::string& fileName)
    104105{
    105106  GLhandleARB shader = 0;
    106107
    107   if (type != Shader::Vertex && type != Shader::Fragment)
     108  if (type != ShaderData::Vertex && type != ShaderData::Fragment)
    108109    return false;
    109110  this->deleteProgram(type);
     
    114115    return false;
    115116
    116   if (type == Shader::Vertex && GLEW_ARB_vertex_shader)
     117  if (type == ShaderData::Vertex && GLEW_ARB_vertex_shader)
    117118  {
    118119    this->vertexShaderFile = fileName;
     
    121122  }
    122123
    123   if (type == Shader::Fragment && GLEW_ARB_fragment_shader)
     124  if (type == ShaderData::Fragment && GLEW_ARB_fragment_shader)
    124125  {
    125126    this->fragmentShaderFile = fileName;
     
    146147
    147148
    148 void Shader::linkShaderProgram()
     149void ShaderData::linkShaderProgram()
    149150{
    150151  GLint status = 0;
     
    158159
    159160
    160 bool Shader::readShader(const std::string& fileName, std::string& output)
     161bool ShaderData::readShader(const std::string& fileName, std::string& output)
    161162{
    162163  char lineBuffer[PARSELINELENGTH];
     
    180181}
    181182
    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)
     183void ShaderData::bindShader(const char* name, const float* value, size_t size)
    194184{
    195185  if (likely (this->shaderProgram != 0))
     
    210200}
    211201
    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)
     202void ShaderData::deleteProgram(ShaderData::Type type)
    221203{
    222204  GLint status = 0;
    223   if (type == Shader::Vertex && this->vertexShader != 0)
     205  if (type == ShaderData::Vertex && this->vertexShader != 0)
    224206  {
    225207    this->vertexShaderFile = "";
     
    228210    glGetObjectParameterivARB(this->vertexShader, GL_OBJECT_DELETE_STATUS_ARB, &status);
    229211    if (status == GL_INVALID_VALUE || status == GL_INVALID_OPERATION)
    230       Shader::printError(this->vertexShader);
     212      ShaderData::printError(this->vertexShader);
    231213    this->vertexShader = 0;
    232214  }
    233   else if (type == Shader::Fragment && this->fragmentShader != 0)
     215  else if (type == ShaderData::Fragment && this->fragmentShader != 0)
    234216  {
    235217    this->fragmentShaderFile = "";
     
    238220    glGetObjectParameterivARB(this->fragmentShader, GL_OBJECT_DELETE_STATUS_ARB, &status);
    239221    if (status == GL_INVALID_VALUE || status == GL_INVALID_OPERATION)
    240       Shader::printError(this->fragmentShader);
     222      ShaderData::printError(this->fragmentShader);
    241223    this->fragmentShader = 0;
    242224  }
     
    246228
    247229
    248 void Shader::printError(GLhandleARB program)
     230void ShaderData::printError(GLhandleARB program)
    249231{
    250232  if (program == 0)
     
    267249}
    268250
    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);
     251void ShaderData::debug() const
     252{
     253  PRINT(3)("ShaderData info: (SHADER: %d)\n", this->shaderProgram);
    283254  if (this->vertexShader != 0)
    284255  {
Note: See TracChangeset for help on using the changeset viewer.