Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 5323 in orxonox.OLD


Ignore:
Timestamp:
Oct 8, 2005, 5:27:22 PM (19 years ago)
Author:
bensch
Message:

orxonox/trunk: Shaders can now be loaded via the ResourceManager

Location:
trunk/src
Files:
5 edited

Legend:

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

    r5322 r5323  
    2323#include "debug.h"
    2424#include "array.h"
     25
     26#include "resource_manager.h"
    2527
    2628
     
    102104}
    103105
     106Shader* Shader::getShader(const char* vertexShaderFile, const char* fragmentShaderFile)
     107{
     108  return (Shader*)ResourceManager::getInstance()->load(vertexShaderFile, SHADER,  RP_LEVEL, (void*)fragmentShaderFile);
     109}
     110
     111bool Shader::unload(Shader* shader)
     112{
     113  return ResourceManager::getInstance()->unload(shader);
     114}
     115
    104116Shader* Shader::storedShader = NULL;
    105117
  • trunk/src/lib/graphics/shader.h

    r5319 r5323  
    2626class Shader : public BaseObject {
    2727
    28  public:
     28  public:
    2929  Shader(const char* vertexShaderFile = NULL, const char* fragmentShaderFile = NULL);
    3030  virtual ~Shader();
     31  static Shader* getShader(const char* vertexShaderFile, const char* fragmentShaderFile);
     32  static bool unload(Shader* shader);
    3133
    3234  bool loadShaderProgramm(SHADER_TYPE type, const char* fileName);
     
    4143
    4244  inline static bool shaderActive() { return (Shader::storedShader != NULL)?true:false; };
     45  inline static Shader* getActiveShader() { return Shader::storedShader; };
    4346  inline static void suspendShader() { Shader* currShader = storedShader; if (storedShader!= NULL) { Shader::deactivateShader(); Shader::storedShader = currShader;} };
    4447  inline static void restoreShader() { if (storedShader != NULL) storedShader->activateShader(); storedShader = NULL; };
  • trunk/src/util/resource_manager.cc

    r5308 r5323  
    3636#include "ogg_player.h"
    3737#endif /* NO_AUDIO */
     38#ifndef NO_SHADERS
     39#include "shader.h"
     40#endif /* NO_SHADERS */
    3841
    3942#include "list.h"
     
    190193#ifndef NO_MODEL
    191194#define __IF_OK
    192   if (!strncmp(fileName+(strlen(fileName)-4), ".obj", 4))
     195  if (!strncasecmp(fileName+(strlen(fileName)-4), ".obj", 4))
    193196    tmpType = OBJ;
    194197  else if (!strncmp(fileName+(strlen(fileName)-4), ".md2", 4))
    195198    tmpType = MD2;
    196   else if (!strcmp(fileName, "cube") ||
    197            !strcmp(fileName, "sphere") ||
    198            !strcmp(fileName, "plane") ||
    199            !strcmp(fileName, "cylinder") ||
    200            !strcmp(fileName, "cone"))
     199  else if (!strcasecmp(fileName, "cube") ||
     200           !strcasecmp(fileName, "sphere") ||
     201           !strcasecmp(fileName, "plane") ||
     202           !strcasecmp(fileName, "cylinder") ||
     203           !strcasecmp(fileName, "cone"))
    201204    tmpType = PRIM;
    202205#endif /* NO_MODEL */
     
    206209#endif
    207210#define __IF_OK
    208   if (!strncmp(fileName+(strlen(fileName)-4), ".wav", 4))
     211  if (!strncasecmp(fileName+(strlen(fileName)-4), ".wav", 4))
    209212    tmpType = WAV;
    210   else if (!strncmp(fileName+(strlen(fileName)-4), ".mp3", 4))
     213  else if (!strncasecmp(fileName+(strlen(fileName)-4), ".mp3", 4))
    211214    tmpType = MP3;
    212   else if (!strncmp(fileName+(strlen(fileName)-4), ".ogg", 4))
     215  else if (!strncasecmp(fileName+(strlen(fileName)-4), ".ogg", 4))
    213216    tmpType = OGG;
    214217#endif /* NO_AUDIO */
     
    218221#endif
    219222#define __IF_OK
    220  if (!strncmp(fileName+(strlen(fileName)-4), ".ttf", 4))
     223 if (!strncasecmp(fileName+(strlen(fileName)-4), ".ttf", 4))
    221224    tmpType = TTF;
    222225#endif /* NO_TEXT */
     226#ifndef NO_SHADERS
     227#ifdef __IF_OK
     228  else
     229#endif
     230#define __IF_OK
     231 if (!strncasecmp(fileName+(strlen(fileName)-5), ".vert", 5))
     232    tmpType = SHADER;
     233#endif /* NO_SHADERS */
    223234#ifndef NO_TEXTURES
    224235#ifdef __IF_OK
     
    308319              if (param1 != NULL)
    309320                {
    310                   tmpResource->skinFileName = new char[strlen((const char*)param1)+1];
    311                   strcpy(tmpResource->skinFileName, (const char*) param1);
     321                  tmpResource->secFileName = new char[strlen((const char*)param1)+1];
     322                  strcpy(tmpResource->secFileName, (const char*) param1);
    312323                }
    313324              else
    314                 tmpResource->skinFileName = NULL;
    315               tmpResource->pointer = new MD2Data(fullName, tmpResource->skinFileName);
     325                tmpResource->secFileName = NULL;
     326              tmpResource->pointer = new MD2Data(fullName, tmpResource->secFileName);
    316327            }
    317328              break;
     
    372383          break;
    373384#endif /* NO_TEXTURES */
     385#ifndef NO_SHADERS
     386          case SHADER:
     387            if(ResourceManager::isFile(fullName))
     388            {
     389              char* secFullName = NULL;
     390              if (param1 != NULL)
     391              {
     392                secFullName = ResourceManager::getFullName((const char*)param1);
     393                printf("%s\n", secFullName);
     394                if (ResourceManager::isFile(secFullName))
     395                {
     396                  printf("ok:: %s\n", secFullName);
     397                  tmpResource->secFileName = new char[strlen((const char*)param1)+1];
     398                  strcpy(tmpResource->secFileName, (const char*) param1);
     399                }
     400                else
     401                {
     402                  delete[] secFullName;
     403                  secFullName = NULL;
     404                  tmpResource->secFileName = NULL;
     405                }
     406              }
     407              else
     408                tmpResource->secFileName = NULL;
     409              printf("%s::%s\n", fullName, secFullName);
     410              tmpResource->pointer = new Shader(fullName, secFullName);
     411              if (secFullName != NULL)
     412                delete[] secFullName;
     413            }
     414            break;
     415#endif /* NO_SHADERS */
    374416        default:
    375417          tmpResource->pointer = NULL;
     
    458500              break;
    459501#endif /* NO_TEXTURES */
     502#ifndef NO_SHADERS
     503            case SHADER:
     504              delete (Shader*)resource->pointer;
     505              break;
     506#endif /* NO_SHADERS */
    460507            default:
    461508              PRINTF(2)("NOT YET IMPLEMENTED !!FIX FIX!!\n");
     
    537584              if (!param1)
    538585                {
    539                   if (enumRes->skinFileName == NULL)
     586                  if (enumRes->secFileName == NULL)
    540587                    match = true;
    541588                }
    542               else if (!strcmp(enumRes->skinFileName, (const char*)param1))
     589              else if (!strcmp(enumRes->secFileName, (const char*)param1))
    543590                match = true;
    544591              break;
     
    555602              break;
    556603#endif /* NO_TEXT */
     604#ifndef NO_SHADERS
     605              case SHADER:
     606                if (!param1)
     607                {
     608                  if (enumRes->secFileName == NULL)
     609                    match = true;
     610                }
     611                else if (!strcmp(enumRes->secFileName, (const char*)param1))
     612                  match = true;
     613#endif /* NO_SHADERS */
    557614            default:
    558615              match = true;
     
    862919      break;
    863920#endif
     921#ifndef NO_SHADERS
     922    case SHADER:
     923      return "Shader";
     924      break;
     925#endif
    864926    default:
    865927      return "unknown Format";
  • trunk/src/util/resource_manager.h

    r5308 r5323  
    4343#endif /* NO_AUDIO */
    4444#ifndef NO_TEXTURES
    45   IMAGE                 //!< loading an image
     45  IMAGE,                //!< loading an image
    4646#endif /* NO_TEXTURES */
     47#ifndef NO_SHADERS
     48  SHADER,               //!< openGL-shader program
     49#endif /* NO_SHADERS */
    4750};
    4851
     
    7578  float             modelSize;         //!< the size of the model (OBJ/PRIM)
    7679#ifndef NO_MODEL
    77   char*             skinFileName;      //!< skinFileName (MD2)
     80  char*             secFileName;       //!< a seconf fileName
    7881#endif /* NO_MODEL */
    7982#ifndef NO_TEXT
  • trunk/src/world_entities/npc2.cc

    r5313 r5323  
    3232
    3333  this->loadModelWithScale("models/ships/bolido.obj", 3);
    34   this->shader = new Shader("toon.vert", "toon.frag");
    35   this->shader->activateShader();
    36   //exit(-1);
     34  this->shader = Shader::getShader("toon.vert", "toon.frag");
    3735
    3836  this->obj = gluNewQuadric();
     
    4442NPC2::~NPC2 ()
    4543{
    46   delete this->shader;
     44  Shader::unload(this->shader);
    4745  gluDeleteQuadric(this->obj);
    48 
    4946}
    5047
     
    8784  glMultMatrixf((float*)matrix);
    8885
    89   shader->activateShader();
     86  if (this->shader != NULL && this->shader != Shader::getActiveShader())
     87  {
     88    shader->activateShader();
     89  }
    9090  gluSphere(this->obj, 3, 10, 10);
    9191  //shader->deactivateShader();
Note: See TracChangeset for help on using the changeset viewer.