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/glu.h>
#include <iostream>
#include "TextureCache.hh"
#include "TextureCache.h"
#include "TextureLoader/TextureLoader.h"
#include "FileLoader/FileLoader.h"
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);
if (it != m_cache.end())
return it->second;
GLuint tex = loadTexture(filename.c_str());
GLuint tex = loadTexture(path, fileLoader, mipmaps, mode, quality);
m_cache[filename] = tex;
return tex;
}
GLuint TextureCache::loadTexture(const char * filename,
bool mipmaps,
int mode,
int quality)
GLuint TextureCache::loadTexture(const FileLoader::Path & path,
FileLoader & fileLoader, bool mipmaps,
int mode, int quality)
{
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)
{
cerr << "Failed to load image '" << filename << "'!" << endl;
cerr << "Failed to load image ('" << path.fullPath
<< ", " << path.shortPath << ")!" << endl;
return 0;
}
@ -47,7 +60,7 @@ GLuint TextureCache::loadTexture(const char * filename,
SDL_FreeSurface(temp);
if (!texsurf)
{
cerr << '\'' << filename << "' was not converted properly!" << endl;
cerr << "Image was not converted properly!" << endl;
return 0;
}
unsigned int * pixels = new unsigned int[texsurf->w * texsurf->h];

View File

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