X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fnetradiant.git;a=blobdiff_plain;f=plugins%2Fimage%2Fimage.cpp;h=7d767f228426db79a3fb0db5a9b68c819af87433;hp=738c11f0e1cfd98559bfec2ba9ed181ed6f18be8;hb=cd6613e5171544b68d4ae70546c90a15c99b22a5;hpb=b1bfb19ecd5ec8355065b2028a6de0c850197b2d diff --git a/plugins/image/image.cpp b/plugins/image/image.cpp index 738c11f0..7d767f22 100644 --- a/plugins/image/image.cpp +++ b/plugins/image/image.cpp @@ -1,128 +1,168 @@ /* -Copyright (c) 2001, Loki software, inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this list -of conditions and the following disclaimer. - -Redistributions in binary form must reproduce the above copyright notice, this -list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -Neither the name of Loki software nor the names of its contributors may be used -to endorse or promote products derived from this software without specific prior -written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT,INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -// -// Image loading plugin -// -// Leonardo Zide (leo@lokigames.com) -// - -#include -#include "image.h" -#include "lbmlib.h" - -// ============================================================================= -// global tables - -_QERFuncTable_1 g_FuncTable; // Radiant function table -_QERFileSystemTable g_FileSystemTable; - -// ============================================================================= -// SYNAPSE - -CSynapseServer* g_pSynapseServer = NULL; -CSynapseClientImage g_SynapseClient; - -static const XMLConfigEntry_t entries[] = - { - { VFS_MAJOR, SYN_REQUIRE, sizeof(g_FileSystemTable), &g_FileSystemTable }, - { NULL, SYN_UNKNOWN, 0, NULL } }; - -extern "C" CSynapseClient* SYNAPSE_DLL_EXPORT Synapse_EnumerateInterfaces (const char *version, CSynapseServer *pServer) + Copyright (C) 2001-2006, William Joseph. + All Rights Reserved. + + This file is part of GtkRadiant. + + GtkRadiant 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 2 of the License, or + (at your option) any later version. + + GtkRadiant 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 GtkRadiant; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "ifilesystem.h" +#include "iimage.h" + +#include "jpeg.h" +#include "tga.h" +#include "bmp.h" +#include "pcx.h" +#include "dds.h" +#include "ktx.h" + + +#include "modulesystem/singletonmodule.h" + +class ImageDependencies : public GlobalFileSystemModuleRef +{ +}; + +class ImageTGAAPI +{ +_QERPlugImageTable m_imagetga; +public: +typedef _QERPlugImageTable Type; +STRING_CONSTANT( Name, "tga" ); + +ImageTGAAPI(){ + m_imagetga.loadImage = LoadTGA; +} +_QERPlugImageTable* getTable(){ + return &m_imagetga; +} +}; + +typedef SingletonModule ImageTGAModule; + +ImageTGAModule g_ImageTGAModule; + + +class ImageJPGAPI +{ +_QERPlugImageTable m_imagejpg; +public: +typedef _QERPlugImageTable Type; +STRING_CONSTANT( Name, "jpg" ); + +ImageJPGAPI(){ + m_imagejpg.loadImage = LoadJPG; +} +_QERPlugImageTable* getTable(){ + return &m_imagejpg; +} +}; + +typedef SingletonModule ImageJPGModule; + +ImageJPGModule g_ImageJPGModule; + + +class ImageBMPAPI { - if (strcmp(version, SYNAPSE_VERSION)) - { - Syn_Printf("ERROR: synapse API version mismatch: should be '" SYNAPSE_VERSION "', got '%s'\n", version); - return NULL; - } - g_pSynapseServer = pServer; - g_pSynapseServer->IncRef(); - Set_Syn_Printf(g_pSynapseServer->Get_Syn_Printf()); - - g_SynapseClient.AddAPI(IMAGE_MAJOR, "jpg", sizeof(_QERPlugImageTable)); - g_SynapseClient.AddAPI(IMAGE_MAJOR, "tga", sizeof(_QERPlugImageTable)); - // NOTE: these two are for md2 support - // instead of requesting them systematically, we could request them per-config before enabling Q2 support - g_SynapseClient.AddAPI(IMAGE_MAJOR, "pcx", sizeof(_QERPlugImageTable)); - g_SynapseClient.AddAPI(IMAGE_MAJOR, "bmp", sizeof(_QERPlugImageTable)); - g_SynapseClient.AddAPI(RADIANT_MAJOR, NULL, sizeof(_QERFuncTable_1), SYN_REQUIRE, &g_FuncTable); - - if ( !g_SynapseClient.ConfigXML( pServer, NULL, entries ) ) { - return NULL; - } - - return &g_SynapseClient; +_QERPlugImageTable m_imagebmp; +public: +typedef _QERPlugImageTable Type; +STRING_CONSTANT( Name, "bmp" ); + +ImageBMPAPI(){ + m_imagebmp.loadImage = LoadBMP; +} +_QERPlugImageTable* getTable(){ + return &m_imagebmp; } +}; + +typedef SingletonModule ImageBMPModule; + +ImageBMPModule g_ImageBMPModule; + -bool CSynapseClientImage::RequestAPI(APIDescriptor_t *pAPI) +class ImagePCXAPI { - if (!strcmp(pAPI->major_name, "image")) - { - _QERPlugImageTable* pTable= static_cast<_QERPlugImageTable*>(pAPI->mpTable); - if (!strcmp(pAPI->minor_name, "jpg")) - { - pTable->m_pfnLoadImage = &LoadJPG; - return true; - } - if (!strcmp(pAPI->minor_name, "tga")) - { - pTable->m_pfnLoadImage = &LoadImage; - return true; - } - if (!strcmp(pAPI->minor_name, "pcx")) - { - pTable->m_pfnLoadImage = &LoadImage; - return true; - } - if (!strcmp(pAPI->minor_name, "bmp")) - { - pTable->m_pfnLoadImage = &LoadImage; - return true; - } - } - - Syn_Printf("ERROR: RequestAPI( '%s' ) not found in '%s'\n", pAPI->major_name, GetInfo()); - return false; +_QERPlugImageTable m_imagepcx; +public: +typedef _QERPlugImageTable Type; +STRING_CONSTANT( Name, "pcx" ); + +ImagePCXAPI(){ + m_imagepcx.loadImage = LoadPCX32; +} +_QERPlugImageTable* getTable(){ + return &m_imagepcx; } +}; + +typedef SingletonModule ImagePCXModule; -bool CSynapseClientImage::OnActivate() { - if (!g_FileSystemTable.m_nSize) { - Syn_Printf("ERROR: VFS_MAJOR table was not initialized before OnActivate in '%s' - incomplete synapse.config?\n", GetInfo()); - return false; - } - return true; +ImagePCXModule g_ImagePCXModule; + + +class ImageDDSAPI +{ +_QERPlugImageTable m_imagedds; +public: +typedef _QERPlugImageTable Type; +STRING_CONSTANT( Name, "dds" ); + +ImageDDSAPI(){ + m_imagedds.loadImage = LoadDDS; +} +_QERPlugImageTable* getTable(){ + return &m_imagedds; } +}; + +typedef SingletonModule ImageDDSModule; -#include "version.h" +ImageDDSModule g_ImageDDSModule; -const char* CSynapseClientImage::GetInfo() + +class ImageKTXAPI { - return "image formats JPG TGA PCX BMP module built " __DATE__ " " RADIANT_VERSION; +_QERPlugImageTable m_imagektx; +public: +typedef _QERPlugImageTable Type; +STRING_CONSTANT( Name, "ktx" ); + +ImageKTXAPI(){ + m_imagektx.loadImage = LoadKTX; +} +_QERPlugImageTable* getTable(){ + return &m_imagektx; +} +}; + +typedef SingletonModule ImageKTXModule; + +ImageKTXModule g_ImageKTXModule; + + +extern "C" void RADIANT_DLLEXPORT Radiant_RegisterModules( ModuleServer& server ){ + initialiseModule( server ); + + g_ImageTGAModule.selfRegister(); + g_ImageJPGModule.selfRegister(); + g_ImageBMPModule.selfRegister(); + g_ImagePCXModule.selfRegister(); + g_ImageDDSModule.selfRegister(); + g_ImageKTXModule.selfRegister(); }