converted TextureCache to use TextureLoader interface
git-svn-id: svn://anubis/misc/TextureCache@184 bd8a9e45-a331-0410-811e-c64571078777
This commit is contained in:
parent
f314a86b77
commit
bcbf7759e6
@ -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];
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user