Files
Blocks3D/TextureHandler.h
2020-03-13 16:28:12 -07:00

87 lines
1.9 KiB
C++

#pragma once
#include <G3DAll.h>
#include <map>
class TextureHandler
{
public:
TextureHandler(void);
~TextureHandler(void);
static int getTextureVolatile(std::string str)
{
if(!volTex[str].isNull())
{
volExp[str] = G3D::System::time();
return volTex[str]->openGLID();
}
else
{
G3D::TextureRef tex = G3D::Texture::fromFile(str);
volExp[str] = G3D::System::time();
volTex[str] = tex;
return tex->openGLID();
}
}
static int getTexturePermanent(std::string str)
{
if(!permTex[str].isNull())
{
return permTex[str]->openGLID();
}
else
{
G3D::TextureRef tex = G3D::Texture::fromFile(str);
permTex[str] = tex;
return tex->openGLID();
}
}
static void flushVolatile()
{
std::map<std::string, G3D::RealTime>::iterator it;
for (it=volExp.begin(); it!=volExp.end(); ++it)
{
if(it->second < G3D::System::time() - 3)
{
volTex[it->first]->~Texture();
volTex.erase(it->first);
volExp.erase(it->first);
//it->second->~ReferenceCountedPointer();
}
}
}
static void dispose()
{
std::map<std::string, G3D::TextureRef>::iterator it;
for (it=volTex.begin(); it!=volTex.end(); ++it)
{
it->second->~Texture();
//it->second->~ReferenceCountedPointer();
}
for (it=permTex.begin(); it!=permTex.end(); ++it)
{
it->second->~Texture();
//it->second->~ReferenceCountedPointer();
}
permTex.clear();
volTex.clear();
}
static void remove(std::string str)
{
if(!volTex[str].isNull())
{
volTex[str]->~Texture();
//volTex[str]->~ReferenceCountedPointer();
volTex.erase(str);
}
if(!permTex[str].isNull())
{
permTex[str]->~Texture();
//permTex[str]->~ReferenceCountedPointer();
permTex.erase(str);
}
}
private:
static std::map<std::string, G3D::TextureRef> volTex;
static std::map<std::string, G3D::RealTime> volExp;
static std::map<std::string, G3D::TextureRef> permTex;
};