Files
firestorm/Gameleap/code/mw4/Libraries/mlr/MLRTexturePool.hpp
T
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

174 lines
3.7 KiB
C++

#pragma once
#define MLR_MLRTEXTUREPOOL_HPP
#include <MLR\MLR.hpp>
#include <MLR\GOSImagePool.hpp>
#include <MLR\MLRMovieTexture.hpp>
namespace MidLevelRenderer {
#undef TEXTURE_HUNT
class MLRTexturePool:
public Stuff::RegisteredClass
{
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Initialization
//
public:
static void
InitializeClass();
static void
TerminateClass();
static ClassData
*DefaultData;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Constructors/Destructors
//
protected:
MLRTexturePool(Stuff::MemoryStream *stream);
public:
// insDep == nr of lower bits used for image instancing
MLRTexturePool(GOSImagePool *image_pool, int insDep=3);
~MLRTexturePool();
static MLRTexturePool*
Make(Stuff::MemoryStream *stream);
void
Save(Stuff::MemoryStream *stream);
MLRTexture*
Add(const char *textureName, int instance=0);
MLRTexture*
AddMovie(const char *textureName, int nrOfFrames, Stuff::Scalar frameTime);
MLRTexture*
Add(GOSImage*);
MLRTexture*
Add(const char* imageName, gos_TextureFormat format, int size, gos_TextureHints hints);
// only removes the texture from the texture pool, it doesnt destroy the texture
void
Remove(MLRTexture*);
void
LoadImageGOS(MLRTexture*);
unsigned
LoadImages();
MLRTexture*
operator() (const char *name, int=0);
MLRTexture*
operator[] (int index)
{
Check_Object(this); Verify(index-1 < MLRState::TextureMask);
if (index<=0)
{
return NULL;
}
#if defined(TEXTURE_HUNT) && defined(LAB_ONLY)
if(textureArray[index-1]==NULL)
{
SPEWALWAYS((0, "Couldnt find Textureindex \"%x\"", index));
}
#endif
return textureArray[index-1];
}
MLRTexture*
operator[] (const MLRStateBase *state)
{
Check_Object(this);
#if defined(TEXTURE_HUNT) && defined(LAB_ONLY)
if(textureArray[state->GetTextureHandle()-1]==NULL)
{
SPEWALWAYS((0, "Couldnt find Textureindex \"%x\"", state->GetTextureHandle()));
}
#endif
return (*this)[state->GetTextureHandle()];
}
GOSImage*
GetImage(const char* imageName)
{ Check_Object(this); return imagePool->GetImage(imageName); }
const GOSImagePool*
GetGOSImagePool()
{ Check_Object(this); return imagePool; }
unsigned
GetLastHandle()
{Check_Object(this); return lastHandle;}
unsigned
GetNumStoredTextures()
{Check_Object(this); return storedTextures;}
int
GetInstanceDepth() const
{ Check_Object(this); return instanceDepth; }
static MLRTexturePool
*Instance;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Skin support
//
typedef const char* (*Skinner)(const char* old_name);
void
SetSkinner(Skinner skinner)
{Check_Object(this); theSkinner = skinner;}
Skinner
GetSkinner()
{Check_Object(this); return theSkinner;}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Testing
//
public:
void
TestInstance() const
{}
Stuff::ChainOf<MLRTexture*>
unloadedTextures;
protected:
int instanceDepth, // bits used for image instancing
instanceMax; // max for image instancing
int handleDepth, // bits used for image instancing
handleMax; // max for image instancing
int lastHandle;
int storedTextures;
Stuff::StaticArrayOf<MLRTexture*, MLRState::TextureMask+1> textureArray;
int *freeHandle;
int firstFreeHandle;
int lastFreeHandle;
GOSImagePool
*imagePool;
Skinner
theSkinner;
};
}