Files
firestorm/Gameleap/code/mw4/Libraries/mlr/MLRTexture.cpp
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

225 lines
4.7 KiB
C++

#include "MLRHeaders.hpp"
//#############################################################################
//############################ MLRTexture ###############################
//#############################################################################
DECLARE_TIMER(static, Texture_Loading);
MLRTexture::ClassData*
MLRTexture::DefaultData = NULL;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
MLRTexture::InitializeClass()
{
Verify(!DefaultData);
Verify(gos_GetCurrentHeap() == StaticHeap);
DefaultData =
new ClassData(
MLRTextureClassID,
"MidLevelRenderer::MLRTexture",
Plug::DefaultData
);
Register_Object(DefaultData);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
MLRTexture::TerminateClass()
{
Unregister_Object(DefaultData);
delete DefaultData;
DefaultData = NULL;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
MLRTexture::MLRTexture(MemoryStream *stream, ClassData *class_data):
Plug(class_data)
{
Verify(gos_GetCurrentHeap() == TexturePoolHeap);
Check_Pointer(this);
Check_Object(stream);
hint = 0;
proxyNumber = 0;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
MLRTexture::MLRTexture(
MLRTexturePool *tp,
const char* texName,
int _instance,
int handle,
int _hint,
ClassData *class_data
):
Plug(class_data)
{
Verify(gos_GetCurrentHeap() == TexturePoolHeap);
thePool = tp;
textureHandle = handle;
textureName = texName;
textureNameHashValue = textureName.GetHashValue();
instance = _instance;
textureMatrix = NULL;
textureMatrixIsIdentity = true;
if(_instance>-1)
{
image = thePool->GetImage(textureName);
}
else
{
instance = 0;
image = NULL;
}
hint = _hint;
proxyNumber = 0;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
MLRTexture::MLRTexture(
MLRTexturePool *tp,
GOSImage *_image,
int handle,
int _hint,
ClassData *class_data
):
Plug(class_data)
{
Verify(gos_GetCurrentHeap() == TexturePoolHeap);
thePool = tp;
textureHandle = handle;
image = _image;
textureName = image->GetName();
textureNameHashValue = textureName.GetHashValue();
instance = 0;
textureMatrix = NULL;
textureMatrixIsIdentity = true;
hint = _hint;
proxyNumber = 0;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
MLRTexture::TestInstance() const
{
Verify((*thePool)[textureHandle]);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
MLRTexture::MLRTexture(const MLRTexture& tex, ClassData *class_data):
Plug(class_data)
{
Check_Object(&tex);
Verify(gos_GetCurrentHeap() == TexturePoolHeap);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
MLRTexture::~MLRTexture()
{
thePool->Remove(this);
if((image!=NULL) && (NULL==thePool->GetImage(image->GetName())))
{
Unregister_Object(image);
delete image;
image = NULL;
}
if(textureMatrix!=NULL)
{
textureMatrixIsIdentity = true;
Unregister_Object(textureMatrix);
delete textureMatrix;
textureMatrix = NULL;
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
MLRTexture*
MLRTexture::Make(MemoryStream *stream)
{
Check_Object(stream);
gos_PushCurrentHeap(TexturePoolHeap);
MLRTexture *texture = new MLRTexture(stream);
gos_PopCurrentHeap();
return texture;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
MLRTexture::Save(MemoryStream *stream)
{
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
int
MLRTexture::GetImageNumber()
{
Check_Object(this);
return ((textureHandle-1) >> (thePool->GetInstanceDepth()));
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
int
MLRTexture::GetInstanceNumber()
{
Check_Object(this);
return ((textureHandle-1) & ~((1<<thePool->GetInstanceDepth())-1));
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
MLRTexture::LoadImageGOS(GOSImagePool *imagePool)
{
Check_Object(this);
MLR_RENDER("Load Image");
Start_Timer(Texture_Loading);
if (image && !image->IsLoaded())
{
Check_Object(image);
if (!imagePool->LoadImageGOS(image, hint))
{
#ifdef LAB_ONLY
SPEWALWAYS(("0","Cannot load texture: %s!", (const char *)(textureName)));
#ifdef _ARMOR
PAUSE(("Cannot load texture: %s!", (const char *)(textureName)));
#endif
#endif
}
}
Stop_Timer(Texture_Loading);
}