X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fnetradiant.git;a=blobdiff_plain;f=plugins%2Fimage%2Fimage.cpp;h=4f3e07a8790d45716441d958796601ad7b95564e;hp=e7eced9b64f2228ebbac2bcf02abe653db1bbf42;hb=826fce3cdc0bce78d15c04a2eb0a373dc1b251a3;hpb=830125fad042fad35dc029b6eb57c8156ad7e176 diff --git a/plugins/image/image.cpp b/plugins/image/image.cpp index e7eced9b..4f3e07a8 100644 --- a/plugins/image/image.cpp +++ b/plugins/image/image.cpp @@ -1,126 +1,170 @@ /* - 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. - */ + Copyright (C) 2001-2006, William Joseph. + All Rights Reserved. + + This file is part of GtkRadiant. -// -// Image loading plugin -// -// Leonardo Zide (leo@lokigames.com) -// + 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 #include "image.h" -#include "lbmlib.h" -// ============================================================================= -// global tables +#include "ifilesystem.h" +#include "iimage.h" -_QERFuncTable_1 g_FuncTable; // Radiant function table -_QERFileSystemTable g_FileSystemTable; +#include "jpeg.h" +#include "tga.h" +#include "bmp.h" +#include "pcx.h" +#include "dds.h" +#include "ktx.h" -// ============================================================================= -// SYNAPSE -CSynapseServer* g_pSynapseServer = NULL; -CSynapseClientImage g_SynapseClient; +#include "modulesystem/singletonmodule.h" -static const XMLConfigEntry_t entries[] = +class ImageDependencies : public GlobalFileSystemModuleRef { - { VFS_MAJOR, SYN_REQUIRE, sizeof( g_FileSystemTable ), &g_FileSystemTable }, - { NULL, SYN_UNKNOWN, 0, NULL } }; -#if __GNUC__ >= 4 -#pragma GCC visibility push(default) -#endif -extern "C" CSynapseClient * SYNAPSE_DLL_EXPORT Synapse_EnumerateInterfaces( const char *version, CSynapseServer *pServer ) { -#if __GNUC__ >= 4 -#pragma GCC visibility pop -#endif - 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 - check b_isQuake2 here? - // 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; +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" ); -bool CSynapseClientImage::RequestAPI( APIDescriptor_t *pAPI ){ - 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; +ImageJPGAPI(){ + m_imagejpg.loadImage = LoadJPG; } +_QERPlugImageTable* getTable(){ + return &m_imagejpg; +} +}; + +typedef SingletonModule ImageJPGModule; + +ImageJPGModule g_ImageJPGModule; + + +class ImageBMPAPI +{ +_QERPlugImageTable m_imagebmp; +public: +typedef _QERPlugImageTable Type; +STRING_CONSTANT( Name, "bmp" ); -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; +ImageBMPAPI(){ + m_imagebmp.loadImage = LoadBMP; } +_QERPlugImageTable* getTable(){ + return &m_imagebmp; +} +}; + +typedef SingletonModule ImageBMPModule; + +ImageBMPModule g_ImageBMPModule; + + +class ImagePCXAPI +{ +_QERPlugImageTable m_imagepcx; +public: +typedef _QERPlugImageTable Type; +STRING_CONSTANT( Name, "pcx" ); + +ImagePCXAPI(){ + m_imagepcx.loadImage = LoadPCX32; +} +_QERPlugImageTable* getTable(){ + return &m_imagepcx; +} +}; + +typedef SingletonModule ImagePCXModule; + +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; + +ImageDDSModule g_ImageDDSModule; + + +class ImageKTXAPI +{ +_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; + -#include "version.h" +extern "C" void RADIANT_DLLEXPORT Radiant_RegisterModules( ModuleServer& server ){ + initialiseModule( server ); -const char* CSynapseClientImage::GetInfo(){ - return "image formats JPG TGA PCX BMP module built " __DATE__ " " RADIANT_VERSION; + g_ImageTGAModule.selfRegister(); + g_ImageJPGModule.selfRegister(); + g_ImageBMPModule.selfRegister(); + g_ImagePCXModule.selfRegister(); + g_ImageDDSModule.selfRegister(); + g_ImageKTXModule.selfRegister(); }