/*
This file is part of OpenTexMod.
OpenTexMod is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenTexMod is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with OpenTexMod. If not, see .
*/
#include "OTM_Main.h"
OTM_FileHandler::OTM_FileHandler(void)
{
Message("OTM_FileHandler(void): %lu\n", this);
Number = 0;
FieldCounter = 0;
Files = NULL;
}
OTM_FileHandler::~OTM_FileHandler(void)
{
Message("~OTM_FileHandler(void): %lu\n", this);
if (Files!=NULL)
{
for (int i=0; iReference>=0) return (RETURN_UPDATE_ALLREADY_ADDED);
if (Number/FieldLength==FieldCounter)
{
TextureFileStruct*** temp = NULL;
try {temp = new TextureFileStruct**[FieldCounter+10];}
catch (...)
{
gl_ErrorState |= OTM_ERROR_MEMORY | OTM_ERROR_TEXTURE;
return (RETURN_NO_MEMORY);
}
for (int i=0; iReference = Number++;
return (RETURN_OK);
}
int OTM_FileHandler::Remove(TextureFileStruct* file)
{
Message("OTM_FileHandler::Remove(%lu): %lu\n", file, this);
if (gl_ErrorState & OTM_ERROR_FATAL) return (RETURN_FATAL_ERROR);
int ref = file->Reference;
if (ref<0) return (RETURN_OK); // returning if no Reference is set
file->Reference = -1;
if (ref<(--Number))
{
Files[ref/FieldLength][ref%FieldLength] = Files[Number/FieldLength][Number%FieldLength];
Files[ref/FieldLength][ref%FieldLength]->Reference = ref;
}
return (RETURN_OK);
}
OTM_TextureHandler::OTM_TextureHandler(void)
{
Message("OTM_TextureHandler(void): %lu\n", this);
Number = 0;
FieldCounter = 0;
Textures = NULL;
}
OTM_TextureHandler::~OTM_TextureHandler(void)
{
Message("~OTM_TextureHandler(void): %lu\n", this);
if (Textures!=NULL)
{
for (int i=0; iReference>=0) return (RETURN_TEXTURE_ALLREADY_ADDED);
if (Number/FieldLength==FieldCounter)
{
OTM_IDirect3DTexture9*** temp = NULL;
try {temp = new OTM_IDirect3DTexture9**[FieldCounter+10];}
catch (...)
{
gl_ErrorState |= OTM_ERROR_MEMORY | OTM_ERROR_TEXTURE;
return (RETURN_NO_MEMORY);
}
for (int i=0; iReference = Number++;
return (RETURN_OK);
}
int OTM_TextureHandler::Remove(OTM_IDirect3DTexture9* pTexture) //will be called, if a texture is completely released
{
Message("OTM_TextureHandler::Remove( %lu): %lu\n", pTexture, this);
if (gl_ErrorState & OTM_ERROR_FATAL) return (RETURN_FATAL_ERROR);
int ref = pTexture->Reference;
if (ref<0) return (RETURN_OK); // returning if no TextureHandlerRef is set
if (ref<(--Number))
{
Textures[ref/FieldLength][ref%FieldLength] = Textures[Number/FieldLength][Number%FieldLength];
Textures[ref/FieldLength][ref%FieldLength]->Reference = ref;
}
return (RETURN_OK);
}
/*
int OTM_TextureHandler::RemoveAll(void) //only for deleting all fake textures
{
Message("OTM_TextureHandler::RemoveAll() %d: %lu\n", Number, this);
for (int i=0; iRelease();
Number=0;
return (RETURN_OK);
}
*/