75 lines
2.5 KiB
C++
Executable File
75 lines
2.5 KiB
C++
Executable File
//-----------------------------------------------------------------------------
|
|
// Torque Game Engine
|
|
// Copyright (C) GarageGames.com, Inc.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#ifndef _GCHUNKEDTEXMANAGER_H_
|
|
#define _GCHUNKEDTEXMANAGER_H_
|
|
|
|
#ifndef _GTEXMANAGER_H_
|
|
#include "dgl/gTexManager.h"
|
|
#endif
|
|
|
|
class ChunkedTextureObject
|
|
{
|
|
public:
|
|
ChunkedTextureObject *next;
|
|
StringTableEntry texFileName;
|
|
U32 texWidthCount;
|
|
U32 texHeightCount;
|
|
U32 width;
|
|
U32 height;
|
|
TextureHandle *textureHandles;
|
|
S32 refCount;
|
|
GBitmap *bitmap;
|
|
};
|
|
|
|
class ChunkedTextureManager
|
|
{
|
|
friend class ChunkedTextureHandle;
|
|
static ChunkedTextureObject* loadTexture(const char *textureName);
|
|
static ChunkedTextureObject* registerTexture(const char *textureName, GBitmap *data, bool keep);
|
|
static void freeTexture(ChunkedTextureObject *to);
|
|
static void refresh(ChunkedTextureObject *to);
|
|
public:
|
|
static void makeZombie();
|
|
static void resurrect();
|
|
};
|
|
|
|
class ChunkedTextureHandle
|
|
{
|
|
ChunkedTextureObject *object;
|
|
void lock();
|
|
void unlock();
|
|
public:
|
|
ChunkedTextureHandle() { object = NULL; }
|
|
ChunkedTextureHandle(const ChunkedTextureHandle &th) {
|
|
object = th.object;
|
|
lock();
|
|
}
|
|
ChunkedTextureHandle(const char *textureName)
|
|
{
|
|
object = ChunkedTextureManager::loadTexture(textureName);
|
|
lock();
|
|
}
|
|
ChunkedTextureHandle(const char *textureName, GBitmap *bmp)
|
|
{
|
|
object = ChunkedTextureManager::registerTexture(textureName, bmp, true);
|
|
lock();
|
|
}
|
|
~ChunkedTextureHandle() { unlock(); }
|
|
|
|
ChunkedTextureHandle& operator=(const ChunkedTextureHandle &t) { unlock(); object = t.object; lock(); return *this; }
|
|
void refresh() { if(object) ChunkedTextureManager::refresh(object); }
|
|
operator ChunkedTextureObject*() { return object; }
|
|
const char* getName() const { return (object ? object->texFileName : NULL); }
|
|
U32 getWidth() const { return (object ? object->width : 0UL); }
|
|
U32 getHeight() const { return (object ? object->height : 0UL); }
|
|
GBitmap* getBitmap() { return (object ? object->bitmap : NULL); }
|
|
TextureHandle getSubTexture(U32 x, U32 y);
|
|
U32 getTextureCountWidth() { return (object ? object->texWidthCount : 0UL); };
|
|
U32 getTextureCountHeight(){ return (object ? object->texHeightCount : 0UL); };
|
|
};
|
|
|
|
#endif
|