/* 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); } */