X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=plugins%2Fimage%2Fimage.cpp;h=4f3e07a8790d45716441d958796601ad7b95564e;hb=a68115c805c158e21a4b6574026a91e0ae58bfac;hp=34dd67098eecacfecb1d9fa734b8663fa592ff43;hpb=0975f4af11cca8c722f692c09cb69df514284237;p=xonotic%2Fnetradiant.git diff --git a/plugins/image/image.cpp b/plugins/image/image.cpp index 34dd6709..4f3e07a8 100644 --- a/plugins/image/image.cpp +++ b/plugins/image/image.cpp @@ -1,133 +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. -*/ - -// -// Image loading plugin -// -// Leonardo Zide (leo@lokigames.com) -// - -#include + 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 "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 } }; - -#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 - // 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; + +#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 +{ +_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; + +ImagePCXModule g_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; +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(); }