Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 5262 in orxonox.OLD for trunk/src/lib/graphics/shader.cc


Ignore:
Timestamp:
Sep 26, 2005, 11:33:55 PM (19 years ago)
Author:
bensch
Message:

orxonox/trunk: file-parsing works

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/lib/graphics/shader.cc

    r5261 r5262  
    1818#include "shader.h"
    1919
     20#include "array.h"
     21#include "stdlibincl.h"
     22#include <stdio.h>
     23#include "debug.h"
     24
     25
     26#ifndef PARSELINELENGHT
     27#define PARSELINELENGHT     512       //!< how many chars to read at once
     28#endif
     29
    2030using namespace std;
    2131
     
    2434 * standard constructor
    2535*/
    26 Shader::Shader (SHADER_TYPE type, ...)
     36Shader::Shader (const char* vertexShaderFile, const char* fragmentShaderFile)
    2737{
    2838   this->setClassID(CL_SHADER, "Shader");
     
    3545   this->vertexShader = 0;
    3646   this->fragmentShader = 0;
     47
     48   if (vertexShaderFile != NULL)
     49     this->loadShaderProgramm(SHADER_VERTEX, vertexShaderFile);
     50   if (fragmentShaderFile != NULL)
     51     this->loadShaderProgramm(SHADER_FRAGMENT, fragmentShaderFile);
    3752}
    3853
     
    4459{
    4560  // delete what has to be deleted here
    46   delete[] this->fragmentShaderFile;
    47   delete[] this->vertexShaderFile;
    48   delete[] this->fragmentShaderSource;
    49   delete[] this->vertexShaderSource;
    50 
     61  this->deleteProgram(SHADER_VERTEX);
     62  this->deleteProgram(SHADER_FRAGMENT);
    5163  // DELETE THE PROGRAMS
    5264/*  this->shaderProgram = 0;
     
    5870bool Shader::loadShaderProgramm(SHADER_TYPE type, const char* fileName)
    5971{
    60   if (type != SHADER_VERTEX || type != SHADER_FRAGMENT)
     72  if (type != SHADER_VERTEX && type != SHADER_FRAGMENT)
    6173    return false;
     74  this->deleteProgram(type);
     75
     76  FILE*    stream;           //< The stream we use to read the file.
     77
     78  if( (stream = fopen (fileName, "r")) == NULL)
     79  {
     80    PRINTF(1)("Shader could not open %s\n", fileName);
     81    return false;
     82  }
     83  Array<char*>* program = new Array<char*>;
     84  if (type == SHADER_VERTEX)
     85  {
     86    this->vertexShaderFile = new char[strlen(fileName)+1];
     87    strcpy(this->vertexShaderFile, fileName);
     88    this->vertexShaderSource = program;
     89  }
     90  else
     91  {
     92    this->fragmentShaderFile = new char[strlen(fileName)+1];
     93    strcpy(this->fragmentShaderFile, fileName);
     94    this->fragmentShaderSource = program;
     95  }
     96
     97  char lineBuffer[PARSELINELENGHT];
     98  char* addString;
     99  while( !feof( stream))
     100  {
     101      // get next line
     102    fgets (lineBuffer, PARSELINELENGHT, stream);
     103    if (strchr(lineBuffer, '\n'))
     104    {
     105      addString = new char[strlen(lineBuffer)];
     106      strncpy(addString, lineBuffer, strlen (lineBuffer)-1);
     107      addString[strlen(lineBuffer)-1] ='\0';
     108    }
     109    else
     110    {
     111      addString = new char[strlen(lineBuffer)+1];
     112      strcpy(addString, lineBuffer);
     113    }
     114    program->addEntry(addString);
     115
     116    printf(lineBuffer);
     117  }
     118  fclose(stream);
     119
     120  program->finalizeArray();
    62121
    63122
     123//  this->shaderProgram = glCreateProgramObjectARB();
     124  this->vertexShader =1;
    64125}
    65126
     
    68129
    69130}
     131
     132
     133void Shader::deleteProgram(SHADER_TYPE type)
     134{
     135  Array<char*>* deleteArray = NULL;
     136  if (type == SHADER_VERTEX)
     137  {
     138    deleteArray = this->vertexShaderSource;
     139    this->vertexShaderSource = NULL;
     140    delete[] this->vertexShaderFile;
     141    this->vertexShaderFile = NULL;
     142  }
     143  else if (type == SHADER_FRAGMENT)
     144  {
     145    deleteArray = this->fragmentShaderSource;
     146    this->fragmentShaderSource = NULL;
     147    delete[] this->fragmentShaderFile;
     148    this->fragmentShaderFile = NULL;
     149  }
     150  else
     151    return;
     152
     153  if (deleteArray == NULL)
     154    return;
     155  else
     156  {
     157    deleteArray->finalizeArray();
     158    for (unsigned int i = 0; i < deleteArray->getCount(); i++)
     159    {
     160      delete[] deleteArray->getEntry(i);
     161    }
     162    delete deleteArray;
     163  }
     164}
     165
     166void Shader::debug() const
     167{
     168  PRINT(3)("Shader info: (SHADER: %d)\n", this->shaderProgram);
     169  if (this->vertexShader != 0)
     170  {
     171    PRINT(3)("VertexShaderProgramm: number=%d, file='%s'\n", this->vertexShader, this->vertexShaderFile);
     172    if (this->vertexShaderSource != NULL)
     173      for (unsigned int i = 0; i < this->vertexShaderSource->getCount(); i++)
     174        PRINT(3)("%d: %s\n", i, this->vertexShaderSource->getEntry(i));
     175  }
     176  if (this->fragmentShader != 0)
     177  {
     178    PRINT(3)("FragmentShaderProgramm: number=%d, file='%s'\n", this->fragmentShader, this->fragmentShaderFile);
     179    if (this->fragmentShaderSource != NULL)
     180      for (unsigned int i = 0; i < this->fragmentShaderSource->getCount(); i++)
     181        PRINT(3)("%d: %s\n", i, this->fragmentShaderSource->getEntry(i));
     182  }
     183
     184
     185}
     186
Note: See TracChangeset for help on using the changeset viewer.