Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Mar 29, 2005, 11:50:51 AM (20 years ago)
Author:
bensch
Message:

orxonox/trunk: now ResourceManager has the ability to unload resources by priority

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orxonox/trunk/src/lib/graphics/importer/texture.cc

    r3655 r3660  
    2323
    2424#include "graphics_engine.h"
    25 
    26 // headers only for PathList
    27 #include <unistd.h>
    28 #include <sys/types.h>
    29 #include <sys/stat.h>
    30 #include <stdlib.h>
    31 #include <fstream>
    32 
    33 /**
    34    \brief creates a ned PathList.
    35    
    36    It is a good idea to use this as an initial List,
    37    because if you give on a name the Path will not be checked for its existence.
    38 */
    39 PathList::PathList()
    40 {
    41   this->pathName = NULL;
    42   this->next = NULL;
    43 }
    44 
    45 /**
    46    \brief Creates a new PathList with a Name.
    47    \param pName the Name of The Path.
    48 
    49    This function just adds the Path without checking if it exists.
    50 */
    51 PathList::PathList(char* pName)
    52 {
    53   this->pathName = new char [strlen(pName)+1];
    54   strcpy (this->pathName, pName);
    55   this->next = NULL;
    56 }
    57 
    58 /**
    59    \brief destroys a PathList
    60 
    61    It does this by deleting the Name and then delete its preceding PathList.
    62 */
    63 PathList::~PathList()
    64 {
    65   if (this->pathName)
    66     delete []this->pathName;
    67   if (this->next)
    68     delete this->next;
    69 }
    70 
    71 PathList* PathList::firstPath = NULL;
    72 
    73 /**
    74    \returns A Pointer to the first Path of the Pathlist
    75 */
    76 PathList* PathList::getInstance(void)
    77 {
    78   if (firstPath)
    79     return firstPath;
    80   firstPath = new PathList();
    81 }
    82 /**
    83    \brief Adds a new Pathlist Element.
    84    \param pName
    85    
    86    Adding a Path automatically checks if the Path exists,
    87    and if it does not it will not add it to the List.
    88 */
    89 void PathList::addPath (char* pName)
    90 {
    91   if (pName[0] == '\0')
    92     {
    93       PRINTF(2)("not Adding empty Path to the List.\n");
    94       return;
    95     }
    96   char* tmpPName = new char[strlen(pName)];
    97   strncpy(tmpPName, pName, strlen(pName)-1);
    98   tmpPName[strlen(pName)-1] = '\0';
    99   if (access (tmpPName, F_OK) == 0)
    100     {
    101       struct stat status;
    102       stat(tmpPName, &status);
    103       if (status.st_mode & S_IFDIR)
    104         {
    105           PRINTF(4)("Adding Path %s to the PathList.\n", pName);
    106           PathList* tmpPathList = this;
    107           while (tmpPathList->next)
    108             tmpPathList = tmpPathList->next;
    109           tmpPathList->next = new PathList(pName);
    110         }
    111       else
    112         PRINTF(2)("You tried to add non-folder %s to a PathList.\n", tmpPName);
    113     }
    114   else
    115       PRINTF(2)("You tried to add non-existing folder %s to a PathList.\n", tmpPName);
    116   delete []tmpPName;
    117 }
    118 
    119 
    12025
    12126/**
     
    15459  if (this->texture)
    15560    glDeleteTextures(1, &this->texture);
    156 }
    157 
    158 /**
    159    \brief Searches for a Texture inside one of the defined Paths
    160    \param texName The name of the texture o search for.
    161    \returns pathName+texName if texName was found in the pathList. NULL if the Texture is not found.
    162 */
    163 char* Texture::searchTextureInPaths(const char* texName) const
    164 {
    165   char* tmpName = NULL;
    166   PathList* pList = PathList::getInstance();
    167   while (pList)
    168     {
    169       if (pList->pathName)
    170         {
    171           tmpName = new char [strlen(pList->pathName)+strlen(texName)+1];
    172           strcpy(tmpName, pList->pathName);
    173         }
    174       else
    175         {
    176           tmpName = new char [strlen(texName)+1];
    177           tmpName[0]='\0';
    178         }
    179       strcat(tmpName, texName);
    180       if (access (tmpName, F_OK) == 0)
    181         return tmpName;
    182      
    183       if (tmpName)
    184         delete []tmpName;
    185       tmpName = NULL;
    186       pList = pList->next;
    187     }
    188   return NULL;
    18961}
    19062
     
    231103  if (GraphicsEngine::texturesEnabled)
    232104    {
    233       char* imgNameWithPath = searchTextureInPaths(imageName);
    234       if (imgNameWithPath)
    235         {
    236           this->map=IMG_Load(imgNameWithPath);
     105      if (imageName)
     106        {
     107          this->map=IMG_Load(imageName);
    237108          if(!map)
    238109            {
     
    249120            pImage->format = GL_RGBA;
    250121         
    251           if( !IMG_isPNG(SDL_RWFromFile(imgNameWithPath, "rb")) && !IMG_isJPG(SDL_RWFromFile(imgNameWithPath, "rb")))
     122          if( !IMG_isPNG(SDL_RWFromFile(imageName, "rb")) && !IMG_isJPG(SDL_RWFromFile(imageName, "rb")))
    252123            for (int i=0;i<map->h * map->w *3;i+=3)
    253124              {
     
    268139      else
    269140        {
    270           PRINTF(2)("Image not Found: %s\n", imgNameWithPath);
     141          PRINTF(2)("Image not Found: %s\n", imageName);
    271142          return false;
    272143        }
     
    285156  if (GraphicsEngine::texturesEnabled)
    286157    {
    287       char* imgNameWithPath = searchTextureInPaths(imageName);
    288       if (imgNameWithPath)
    289         {
    290           if (!strncmp(imgNameWithPath+strlen(imgNameWithPath)-4, ".bmp", 4))
     158      if (imageName)
     159        {
     160          if (!strncmp(imageName+strlen(imageName)-4, ".bmp", 4))
    291161            {
    292162              PRINTF(4)("Requested bmp-image. Trying to Import.\n");
    293               return this->loadBMP(imgNameWithPath);
     163              return this->loadBMP(imageName);
    294164            }
    295165         
    296           else if (!strncmp(imgNameWithPath+strlen(imgNameWithPath)-4, ".jpg", 4) || !strncmp(imgNameWithPath+strlen(imgNameWithPath)-5, ".jpg", 5))
     166          else if (!strncmp(imageName+strlen(imageName)-4, ".jpg", 4) || !strncmp(imageName+strlen(imageName)-5, ".jpg", 5))
    297167            {
    298168              PRINTF(4)("Requested jpeg-image. Trying to Import\n");
    299               return this->loadJPG(imgNameWithPath);
    300             }
    301           else if (!strncmp(imgNameWithPath+strlen(imgNameWithPath)-4, ".tga", 4))
     169              return this->loadJPG(imageName);
     170            }
     171          else if (!strncmp(imageName+strlen(imageName)-4, ".tga", 4))
    302172            {
    303173              PRINTF(4)("Requested tga-image. Trying to Import\n");
    304               return this->loadTGA(imgNameWithPath);
    305             }
    306           else if (!strncmp(imgNameWithPath+strlen(imgNameWithPath)-4, ".png", 4))
     174              return this->loadTGA(imageName);
     175            }
     176          else if (!strncmp(imageName+strlen(imageName)-4, ".png", 4))
    307177            {
    308178              PRINTF(4)("Requested png-image. Trying to Import\n");
    309               return this->loadPNG(imgNameWithPath);
     179              return this->loadPNG(imageName);
    310180            }
    311181          else
    312182            {
    313               PRINTF(2)("Requested Image was not recognized in its type. (Maybe a type-Cast-error.)\n FileName: %s", imgNameWithPath);
     183              PRINTF(2)("Requested Image was not recognized in its type. (Maybe a type-Cast-error.)\n FileName: %s", imageName);
    314184              return false;
    315185            }
     
    317187      else
    318188        {
    319           PRINTF(2)("Image not Found: %s\n", imgNameWithPath);
     189          PRINTF(2)("Image not Found: %s\n", imageName);
    320190          return false;
    321191        }
Note: See TracChangeset for help on using the changeset viewer.