blitz3d/cachedtexture: Rename class to Factory, Rep to CachedTexture

This commit is contained in:
Michael Fabian 'Xaymar' Dirks
2019-01-17 17:01:06 +01:00
parent 737454eeac
commit 0f1d127726
4 changed files with 33 additions and 33 deletions
+19 -19
View File
@@ -7,17 +7,17 @@ int active_texs;
extern gxRuntime *gx_runtime; extern gxRuntime *gx_runtime;
extern gxGraphics *gx_graphics; extern gxGraphics *gx_graphics;
set<CachedTexture::Rep*> CachedTexture::rep_set; set<CachedTextureFactory::CachedTexture*> CachedTextureFactory::rep_set;
static string path; static string path;
struct CachedTexture::Rep{ struct CachedTextureFactory::CachedTexture{
int ref_cnt; int ref_cnt;
string file; string file;
int flags,w,h,first; int flags,w,h,first;
vector<gxCanvas*> frames; vector<gxCanvas*> frames;
Rep( int w,int h,int flags,int cnt ): CachedTexture( int w,int h,int flags,int cnt ):
ref_cnt(1),flags(flags),w(w),h(h),first(0){ ref_cnt(1),flags(flags),w(w),h(h),first(0){
++active_texs; ++active_texs;
while( cnt-->0 ){ while( cnt-->0 ){
@@ -27,7 +27,7 @@ struct CachedTexture::Rep{
} }
} }
Rep( const string &f,int flags,int w,int h,int first,int cnt ): CachedTexture( const string &f,int flags,int w,int h,int first,int cnt ):
ref_cnt(1),file(f),flags(flags),w(w),h(h),first(first){ ref_cnt(1),file(f),flags(flags),w(w),h(h),first(first){
++active_texs; ++active_texs;
if( !(flags & gxCanvas::CANVAS_TEX_CUBE) ){ if( !(flags & gxCanvas::CANVAS_TEX_CUBE) ){
@@ -87,16 +87,16 @@ struct CachedTexture::Rep{
gx_graphics->freeCanvas( t ); gx_graphics->freeCanvas( t );
} }
~Rep(){ ~CachedTexture(){
--active_texs; --active_texs;
for( int k=0;k<frames.size();++k ) gx_graphics->freeCanvas( frames[k] ); for( int k=0;k<frames.size();++k ) gx_graphics->freeCanvas( frames[k] );
} }
}; };
CachedTexture::Rep *CachedTexture::findRep( const string &f,int flags,int w,int h,int first,int cnt ){ CachedTextureFactory::CachedTexture *CachedTextureFactory::findRep( const string &f,int flags,int w,int h,int first,int cnt ){
set<Rep*>::const_iterator it; set<CachedTexture*>::const_iterator it;
for( it=rep_set.begin();it!=rep_set.end();++it ){ for( it=rep_set.begin();it!=rep_set.end();++it ){
Rep *rep=*it; CachedTexture *rep=*it;
if( rep->file==f && rep->flags==flags && rep->w==w && rep->h==h && rep->first==first && rep->frames.size()==cnt ){ if( rep->file==f && rep->flags==flags && rep->w==w && rep->h==h && rep->first==first && rep->frames.size()==cnt ){
++rep->ref_cnt;return rep; ++rep->ref_cnt;return rep;
} }
@@ -104,17 +104,17 @@ CachedTexture::Rep *CachedTexture::findRep( const string &f,int flags,int w,int
return 0; return 0;
} }
CachedTexture::CachedTexture( int w,int h,int flags,int cnt ): CachedTextureFactory::CachedTextureFactory( int w,int h,int flags,int cnt ):
rep(new Rep(w,h,flags,cnt)){ rep(new CachedTexture(w,h,flags,cnt)){
} }
CachedTexture::CachedTexture( const string &f_,int flags,int w,int h,int first,int cnt ){ CachedTextureFactory::CachedTextureFactory( const string &f_,int flags,int w,int h,int first,int cnt ){
string f=f_; string f=f_;
if( f.substr(0,2)==".\\" ) f=f.substr(2); if( f.substr(0,2)==".\\" ) f=f.substr(2);
if( path.size() ){ if( path.size() ){
string t=path+tolower( filenamefile( f ) ); string t=path+tolower( filenamefile( f ) );
if( rep=findRep( t,flags,w,h,first,cnt ) ) return; if( rep=findRep( t,flags,w,h,first,cnt ) ) return;
rep=new Rep( t,flags,w,h,first,cnt ); rep=new CachedTexture( t,flags,w,h,first,cnt );
if( rep->frames.size() ){ if( rep->frames.size() ){
rep_set.insert( rep ); rep_set.insert( rep );
return; return;
@@ -123,23 +123,23 @@ CachedTexture::CachedTexture( const string &f_,int flags,int w,int h,int first,i
} }
string t=tolower( fullfilename( f ) ); string t=tolower( fullfilename( f ) );
if( rep=findRep( t,flags,w,h,first,cnt ) ) return; if( rep=findRep( t,flags,w,h,first,cnt ) ) return;
rep=new Rep( t,flags,w,h,first,cnt ); rep=new CachedTexture( t,flags,w,h,first,cnt );
rep_set.insert( rep ); rep_set.insert( rep );
} }
CachedTexture::CachedTexture( const CachedTexture &t ): CachedTextureFactory::CachedTextureFactory( const CachedTextureFactory &t ):
rep(t.rep){ rep(t.rep){
++rep->ref_cnt; ++rep->ref_cnt;
} }
CachedTexture::~CachedTexture(){ CachedTextureFactory::~CachedTextureFactory(){
if( !--rep->ref_cnt ){ if( !--rep->ref_cnt ){
rep_set.erase( rep ); rep_set.erase( rep );
delete rep; delete rep;
} }
} }
CachedTexture &CachedTexture::operator=( const CachedTexture &t ){ CachedTextureFactory &CachedTextureFactory::operator=( const CachedTextureFactory &t ){
++t.rep->ref_cnt; ++t.rep->ref_cnt;
if( !--rep->ref_cnt ){ if( !--rep->ref_cnt ){
rep_set.erase( rep ); rep_set.erase( rep );
@@ -149,15 +149,15 @@ CachedTexture &CachedTexture::operator=( const CachedTexture &t ){
return *this; return *this;
} }
string CachedTexture::getName()const{ string CachedTextureFactory::getName()const{
return rep->file; return rep->file;
} }
const vector<gxCanvas*> &CachedTexture::getFrames()const{ const vector<gxCanvas*> &CachedTextureFactory::getFrames()const{
return rep->frames; return rep->frames;
} }
void CachedTexture::setPath( const string &t ){ void CachedTextureFactory::setPath( const string &t ){
path=tolower(t); path=tolower(t);
if( int sz=path.size() ){ if( int sz=path.size() ){
if( path[sz-1]!='/' && path[sz-1]!='\\' ) path+='\\'; if( path[sz-1]!='/' && path[sz-1]!='\\' ) path+='\\';
+11 -11
View File
@@ -4,30 +4,30 @@
#include "../gxruntime/gxcanvas.h" #include "../gxruntime/gxcanvas.h"
class CachedTexture{ class CachedTextureFactory{
public: public:
CachedTexture( int w,int h,int flags,int cnt ); CachedTextureFactory( int w,int h,int flags,int cnt );
CachedTexture( const string &f,int flags,int w,int h,int first,int cnt ); CachedTextureFactory( const string &f,int flags,int w,int h,int first,int cnt );
CachedTexture( const CachedTexture &t ); CachedTextureFactory( const CachedTextureFactory &t );
~CachedTexture(); ~CachedTextureFactory();
CachedTexture &operator=( const CachedTexture &t ); CachedTextureFactory &operator=( const CachedTextureFactory &t );
string getName()const; string getName()const;
const vector<gxCanvas*> &getFrames()const; const vector<gxCanvas*> &getFrames()const;
bool operator<( const CachedTexture &t )const{ return rep<t.rep; } bool operator<( const CachedTextureFactory &t )const{ return rep<t.rep; }
static void setPath( const string &t ); static void setPath( const string &t );
private: private:
struct Rep; struct CachedTexture;
Rep *rep; CachedTexture *rep;
Rep *findRep( const string &f,int flags,int w,int h,int first,int cnt ); CachedTexture *findRep( const string &f,int flags,int w,int h,int first,int cnt );
static set<Rep*> rep_set; static set<CachedTexture*> rep_set;
}; };
#endif #endif
+2 -2
View File
@@ -32,7 +32,7 @@ static int filterFile(const string &t, int flags) {
struct Texture::Rep { struct Texture::Rep {
int ref_cnt; int ref_cnt;
CachedTexture cached_tex; CachedTextureFactory cached_tex;
vector<gxCanvas*> tex_frames; vector<gxCanvas*> tex_frames;
int tex_blend, tex_flags; int tex_blend, tex_flags;
@@ -154,7 +154,7 @@ int Texture::getCanvasFlags()const {
return rep && rep->tex_frames.size() ? rep->tex_frames[0]->getFlags() : 0; return rep && rep->tex_frames.size() ? rep->tex_frames[0]->getFlags() : 0;
} }
CachedTexture *Texture::getCachedTexture()const { CachedTextureFactory *Texture::getCachedTexture()const {
return rep ? &rep->cached_tex : 0; return rep ? &rep->cached_tex : 0;
} }
+1 -1
View File
@@ -30,7 +30,7 @@ public:
const gxScene::Matrix *getMatrix()const; const gxScene::Matrix *getMatrix()const;
int getBlend()const; int getBlend()const;
int getFlags()const; int getFlags()const;
CachedTexture *getCachedTexture()const; CachedTextureFactory *getCachedTexture()const;
bool isTransparent()const; bool isTransparent()const;
bool operator<( const Texture &t )const; bool operator<( const Texture &t )const;