converted TextureCache to use TextureLoader interface

git-svn-id: svn://anubis/misc/TextureCache@184 bd8a9e45-a331-0410-811e-c64571078777
This commit is contained in:
josh 2009-10-18 16:33:56 +00:00
parent f314a86b77
commit bcbf7759e6
2 changed files with 99 additions and 82 deletions

View File

@ -4,29 +4,42 @@
#include <GL/gl.h> #include <GL/gl.h>
#include <GL/glu.h> #include <GL/glu.h>
#include <iostream> #include <iostream>
#include "TextureCache.hh" #include "TextureCache.h"
#include "TextureLoader/TextureLoader.h"
#include "FileLoader/FileLoader.h"
using namespace std; using namespace std;
GLuint TextureCache::load(const string & filename) GLuint TextureCache::load(const FileLoader::Path & path,
FileLoader & fileLoader, bool mipmaps,
int mode, int quality)
{ {
string filename = path.shortPath;
if (filename == "")
filename = path.fullPath;
if (filename == "")
return 0;
map<string,GLuint>::iterator it = m_cache.find(filename); map<string,GLuint>::iterator it = m_cache.find(filename);
if (it != m_cache.end()) if (it != m_cache.end())
return it->second; return it->second;
GLuint tex = loadTexture(filename.c_str()); GLuint tex = loadTexture(path, fileLoader, mipmaps, mode, quality);
m_cache[filename] = tex; m_cache[filename] = tex;
return tex; return tex;
} }
GLuint TextureCache::loadTexture(const char * filename, GLuint TextureCache::loadTexture(const FileLoader::Path & path,
bool mipmaps, FileLoader & fileLoader, bool mipmaps,
int mode, int mode, int quality)
int quality)
{ {
GLuint texture; GLuint texture;
SDL_Surface * temp = IMG_Load(filename); FileLoader::Buffer buff = fileLoader.load(path);
if (buff.size <= 0)
return 0;
SDL_RWops * ops = SDL_RWFromMem(buff.data, buff.size);
SDL_Surface * temp = IMG_Load_RW(ops, /* TODO: figure out param */ true);
if (!temp) if (!temp)
{ {
cerr << "Failed to load image '" << filename << "'!" << endl; cerr << "Failed to load image ('" << path.fullPath
<< ", " << path.shortPath << ")!" << endl;
return 0; return 0;
} }
@ -47,7 +60,7 @@ GLuint TextureCache::loadTexture(const char * filename,
SDL_FreeSurface(temp); SDL_FreeSurface(temp);
if (!texsurf) if (!texsurf)
{ {
cerr << '\'' << filename << "' was not converted properly!" << endl; cerr << "Image was not converted properly!" << endl;
return 0; return 0;
} }
unsigned int * pixels = new unsigned int[texsurf->w * texsurf->h]; unsigned int * pixels = new unsigned int[texsurf->w * texsurf->h];

View File

@ -2,21 +2,25 @@
#ifndef TEXTURECACHE_H #ifndef TEXTURECACHE_H
#define TEXTURECACHE_H TEXTURECACHE_H #define TEXTURECACHE_H TEXTURECACHE_H
#include <SDL.h>
#include <GL/gl.h> #include <GL/gl.h>
#include <map> #include <map>
#include <string> #include <string>
#include "TextureLoader/TextureLoader.h"
#include "FileLoader/FileLoader.h"
class TextureCache class TextureCache : public TextureLoader
{ {
public: public:
GLuint load(const std::string & filename); virtual GLuint load(const FileLoader::Path & path,
FileLoader & fileLoader, bool mipmaps = true,
int mode = GL_DECAL, int quality = 1);
private: protected:
/* methods */ /* methods */
GLuint loadTexture(const char * filename, GLuint loadTexture(const FileLoader::Path & path,
bool mipmaps = false, FileLoader & fileLoader, bool mipmaps,
int mode = GL_DECAL, int mode, int quality);
int quality = 1);
/* data */ /* data */
std::map< std::string, GLuint > m_cache; std::map< std::string, GLuint > m_cache;