diff --git a/lib/irrlicht/CMakeLists.txt b/lib/irrlicht/CMakeLists.txt index 5835499ee..823cb817c 100644 --- a/lib/irrlicht/CMakeLists.txt +++ b/lib/irrlicht/CMakeLists.txt @@ -107,7 +107,6 @@ source/Irrlicht/COpenGLCgMaterialRenderer.cpp source/Irrlicht/CIrrDeviceLinux.cpp source/Irrlicht/CIrrDeviceStub.cpp source/Irrlicht/CQ3LevelMesh.cpp -source/Irrlicht/CDMFLoader.cpp source/Irrlicht/CImageWriterPCX.cpp source/Irrlicht/CGUIInOutFader.cpp source/Irrlicht/CGUITreeView.cpp @@ -351,7 +350,6 @@ source/Irrlicht/CZipReader.h source/Irrlicht/CGUIToolBar.h source/Irrlicht/CImageWriterJPG.h source/Irrlicht/IAttribute.h -source/Irrlicht/CDMFLoader.h source/Irrlicht/CNullDriver.h source/Irrlicht/CImageLoaderRGB.h source/Irrlicht/CWriteFile.h diff --git a/lib/irrlicht/include/IrrCompileConfig.h b/lib/irrlicht/include/IrrCompileConfig.h index 639165a43..2a8547a21 100644 --- a/lib/irrlicht/include/IrrCompileConfig.h +++ b/lib/irrlicht/include/IrrCompileConfig.h @@ -327,11 +327,6 @@ B3D, MS3D or X meshes */ #ifdef NO_IRR_COMPILE_WITH_BSP_LOADER_ #undef _IRR_COMPILE_WITH_BSP_LOADER_ #endif -//! Define _IRR_COMPILE_WITH_DMF_LOADER_ if you want to load DeleD files -#define _IRR_COMPILE_WITH_DMF_LOADER_ -#ifdef NO_IRR_COMPILE_WITH_DMF_LOADER_ -#undef _IRR_COMPILE_WITH_DMF_LOADER_ -#endif //! Define _IRR_COMPILE_WITH_LMTS_LOADER_ if you want to load LMTools files #define _IRR_COMPILE_WITH_LMTS_LOADER_ #ifdef NO_IRR_COMPILE_WITH_LMTS_LOADER_ diff --git a/lib/irrlicht/source/Irrlicht/CDMFLoader.cpp b/lib/irrlicht/source/Irrlicht/CDMFLoader.cpp deleted file mode 100644 index b6ed57b3d..000000000 --- a/lib/irrlicht/source/Irrlicht/CDMFLoader.cpp +++ /dev/null @@ -1,436 +0,0 @@ -// Copyright (C) 2002-2012 Nikolaus Gebhardt -// This file is part of the "Irrlicht Engine". -// For conditions of distribution and use, see copyright notice in irrlicht.h -// -// This file was originally written by Salvatore Russo. -// I (Nikolaus Gebhardt) did some minor modifications and changes to it and -// integrated it into Irrlicht. -// Thanks a lot to Salvatore for his work on this and that he gave me -// his permission to add it into Irrlicht using the zlib license. -/* - CDMFLoader by Salvatore Russo (September 2005) - - See the header file for additional information including use and distribution rights. -*/ - -#include "IrrCompileConfig.h" -#ifdef _IRR_COMPILE_WITH_DMF_LOADER_ - -#ifdef _DEBUG -#define _IRR_DMF_DEBUG_ -#include "os.h" -#endif - -#include "CDMFLoader.h" -#include "ISceneManager.h" -#include "IAttributes.h" -#include "SAnimatedMesh.h" -#include "SSkinMeshBuffer.h" -#include "irrString.h" -#include "irrMath.h" -#include "dmfsupport.h" - -namespace irr -{ -namespace scene -{ - -/** Constructor*/ -CDMFLoader::CDMFLoader(ISceneManager* smgr, io::IFileSystem* filesys) -: SceneMgr(smgr), FileSystem(filesys) -{ - #ifdef _DEBUG - IReferenceCounted::setDebugName("CDMFLoader"); - #endif -} - - -void CDMFLoader::findFile(bool use_mat_dirs, const core::stringc& path, const core::stringc& matPath, core::stringc& filename) -{ - // path + texpath + full name - if (use_mat_dirs && FileSystem->existFile(path+matPath+filename)) - filename = path+matPath+filename; - // path + full name - else if (FileSystem->existFile(path+filename)) - filename = path+filename; - // path + texpath + base name - else if (use_mat_dirs && FileSystem->existFile(path+matPath+FileSystem->getFileBasename(filename))) - filename = path+matPath+FileSystem->getFileBasename(filename); - // path + base name - else if (FileSystem->existFile(path+FileSystem->getFileBasename(filename))) - filename = path+FileSystem->getFileBasename(filename); - // texpath + full name - else if (use_mat_dirs && FileSystem->existFile(matPath+filename)) - filename = matPath+filename; - // texpath + base name - else if (use_mat_dirs && FileSystem->existFile(matPath+FileSystem->getFileBasename(filename))) - filename = matPath+FileSystem->getFileBasename(filename); - // base name - else if (FileSystem->existFile(FileSystem->getFileBasename(filename))) - filename = FileSystem->getFileBasename(filename); -} - - -/**Creates/loads an animated mesh from the file. - \return Pointer to the created mesh. Returns 0 if loading failed. - If you no longer need the mesh, you should call IAnimatedMesh::drop(). - See IReferenceCounted::drop() for more information.*/ -IAnimatedMesh* CDMFLoader::createMesh(io::IReadFile* file) -{ - if (!file) - return 0; - video::IVideoDriver* driver = SceneMgr->getVideoDriver(); - - //Load stringlist - StringList dmfRawFile; - LoadFromFile(file, dmfRawFile); - - if (dmfRawFile.size()==0) - return 0; - - SMesh * mesh = new SMesh(); - - u32 i; - - dmfHeader header; - - //load header - core::array materiali; - if (GetDMFHeader(dmfRawFile, header)) - { - //let's set ambient light - SceneMgr->setAmbientLight(header.dmfAmbient); - - //let's create the correct number of materials, vertices and faces - dmfVert *verts=new dmfVert[header.numVertices]; - dmfFace *faces=new dmfFace[header.numFaces]; - - //let's get the materials -#ifdef _IRR_DMF_DEBUG_ - os::Printer::log("Loading materials", core::stringc(header.numMaterials).c_str()); -#endif - GetDMFMaterials(dmfRawFile, materiali, header.numMaterials); - - //let's get vertices and faces -#ifdef _IRR_DMF_DEBUG_ - os::Printer::log("Loading geometry"); -#endif - GetDMFVerticesFaces(dmfRawFile, verts, faces); - - //create a meshbuffer for each material, then we'll remove empty ones -#ifdef _IRR_DMF_DEBUG_ - os::Printer::log("Creating meshbuffers."); -#endif - for (i=0; iMaterial.MaterialType = video::EMT_LIGHTMAP_LIGHTING; - buffer->Material.Wireframe = false; - buffer->Material.Lighting = true; - mesh->addMeshBuffer(buffer); - buffer->drop(); - } - - // Build the mesh buffers -#ifdef _IRR_DMF_DEBUG_ - os::Printer::log("Adding geometry to mesh."); -#endif - for (i = 0; i < header.numFaces; i++) - { -#ifdef _IRR_DMF_DEBUG_ - os::Printer::log("Polygon with #vertices", core::stringc(faces[i].numVerts).c_str()); -#endif - if (faces[i].numVerts < 3) - continue; - - const core::vector3df normal = - core::triangle3df(verts[faces[i].firstVert].pos, - verts[faces[i].firstVert+1].pos, - verts[faces[i].firstVert+2].pos).getNormal().normalize(); - - SSkinMeshBuffer* meshBuffer = (SSkinMeshBuffer*)mesh->getMeshBuffer( - faces[i].materialID); - - const bool use2TCoords = meshBuffer->Vertices_2TCoords.size() || - materiali[faces[i].materialID].lightmapName.size(); - if (use2TCoords && meshBuffer->Vertices_Standard.size()) - meshBuffer->convertTo2TCoords(); - const u32 base = meshBuffer->Vertices_2TCoords.size()?meshBuffer->Vertices_2TCoords.size():meshBuffer->Vertices_Standard.size(); - - // Add this face's verts - if (use2TCoords) - { - // make sure we have the proper type set - meshBuffer->VertexType=video::EVT_2TCOORDS; - for (u32 v = 0; v < faces[i].numVerts; v++) - { - const dmfVert& vv = verts[faces[i].firstVert + v]; - video::S3DVertex2TCoords vert(vv.pos, - normal, video::SColor(255,255,255,255), vv.tc, vv.lc); - if (materiali[faces[i].materialID].textureBlend==4 && - SceneMgr->getParameters()->getAttributeAsBool(DMF_FLIP_ALPHA_TEXTURES)) - { - vert.TCoords.set(vv.tc.X,-vv.tc.Y); - } - meshBuffer->Vertices_2TCoords.push_back(vert); - } - } - else - { - for (u32 v = 0; v < faces[i].numVerts; v++) - { - const dmfVert& vv = verts[faces[i].firstVert + v]; - video::S3DVertex vert(vv.pos, - normal, video::SColor(255,255,255,255), vv.tc); - if (materiali[faces[i].materialID].textureBlend==4 && - SceneMgr->getParameters()->getAttributeAsBool(DMF_FLIP_ALPHA_TEXTURES)) - { - vert.TCoords.set(vv.tc.X,-vv.tc.Y); - } - meshBuffer->Vertices_Standard.push_back(vert); - } - } - - // Now add the indices - // This weird loop turns convex polygons into triangle strips. - // I do it this way instead of a simple fan because it usually - // looks a lot better in wireframe, for example. - u32 h = faces[i].numVerts - 1, l = 0, c; // High, Low, Center - for (u32 v = 0; v < faces[i].numVerts - 2; v++) - { - if (v & 1) // odd - c = h - 1; - else // even - c = l + 1; - - meshBuffer->Indices.push_back(base + h); - meshBuffer->Indices.push_back(base + l); - meshBuffer->Indices.push_back(base + c); - - if (v & 1) // odd - h--; - else // even - l++; - } - } - - delete [] verts; - delete [] faces; - } - - // delete all buffers without geometry in it. -#ifdef _IRR_DMF_DEBUG_ - os::Printer::log("Cleaning meshbuffers."); -#endif - i = 0; - while(i < mesh->MeshBuffers.size()) - { - if (mesh->MeshBuffers[i]->getVertexCount() == 0 || - mesh->MeshBuffers[i]->getIndexCount() == 0) - { - // Meshbuffer is empty -- drop it - mesh->MeshBuffers[i]->drop(); - mesh->MeshBuffers.erase(i); - materiali.erase(i); - } - else - { - i++; - } - } - - - { - //load textures and lightmaps in materials. - //don't worry if you receive a could not load texture, cause if you don't need - //a particular material in your scene it will be loaded and then destroyed. -#ifdef _IRR_DMF_DEBUG_ - os::Printer::log("Loading textures."); -#endif - const bool use_mat_dirs=!SceneMgr->getParameters()->getAttributeAsBool(DMF_IGNORE_MATERIALS_DIRS); - - core::stringc path; - if ( SceneMgr->getParameters()->existsAttribute(DMF_TEXTURE_PATH) ) - path = SceneMgr->getParameters()->getAttributeAsString(DMF_TEXTURE_PATH); - else - path = FileSystem->getFileDir(file->getFileName()); - path += ('/'); - - for (i=0; igetMeshBufferCount(); i++) - { - //texture and lightmap - video::ITexture *tex = 0; - video::ITexture *lig = 0; - - //current buffer to apply material - video::SMaterial& mat = mesh->getMeshBuffer(i)->getMaterial(); - - //Primary texture is normal - if (materiali[i].textureFlag==0) - { - if (materiali[i].textureBlend==4) - driver->setTextureCreationFlag(video::ETCF_ALWAYS_32_BIT,true); - findFile(use_mat_dirs, path, materiali[i].pathName, materiali[i].textureName); - tex = driver->getTexture(materiali[i].textureName); - } - //Primary texture is just a color - else if(materiali[i].textureFlag==1) - { - video::SColor color(axtoi(materiali[i].textureName.c_str())); - - //just for compatibility with older Irrlicht versions - //to support transparent materials - if (color.getAlpha()!=255 && materiali[i].textureBlend==4) - driver->setTextureCreationFlag(video::ETCF_ALWAYS_32_BIT,true); - - video::IImage *immagine= driver->createImage(video::ECF_A8R8G8B8, - core::dimension2d(8,8)); - immagine->fill(color); - tex = driver->addTexture("", immagine); - immagine->drop(); - - //to support transparent materials - if (color.getAlpha()!=255 && materiali[i].textureBlend==4) - { - mat.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; - mat.MaterialTypeParam =(((f32) (color.getAlpha()-1))/255.0f); - } - } - - //Lightmap is present - if (materiali[i].lightmapFlag == 0) - { - findFile(use_mat_dirs, path, materiali[i].pathName, materiali[i].lightmapName); - lig = driver->getTexture(materiali[i].lightmapName); - } - else //no lightmap - { - mat.MaterialType = video::EMT_SOLID; - const f32 mult = 100.0f - header.dmfShadow; - mat.AmbientColor=header.dmfAmbient.getInterpolated(video::SColor(255,0,0,0),mult/100.f); - } - - if (materiali[i].textureBlend==4) - { - mat.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; - mat.MaterialTypeParam = - SceneMgr->getParameters()->getAttributeAsFloat(DMF_ALPHA_CHANNEL_REF); - } - - //if texture is present mirror vertically owing to DeleD representation - if (tex && header.dmfVersion<1.1) - { - const core::dimension2d texsize = tex->getSize(); - void* pp = tex->lock(); - if (pp) - { - const video::ECOLOR_FORMAT format = tex->getColorFormat(); - if (format == video::ECF_A1R5G5B5) - { - s16* p = (s16*)pp; - s16 tmp=0; - for (u32 x=0; xunlock(); - tex->regenerateMipMapLevels(); - } - - //if lightmap is present mirror vertically owing to DeleD rapresentation - if (lig && header.dmfVersion<1.1) - { - const core::dimension2d ligsize=lig->getSize(); - void* pp = lig->lock(); - if (pp) - { - video::ECOLOR_FORMAT format = lig->getColorFormat(); - if (format == video::ECF_A1R5G5B5) - { - s16* p = (s16*)pp; - s16 tmp=0; - for (u32 x=0; xunlock(); - lig->regenerateMipMapLevels(); - } - - mat.setTexture(0, tex); - mat.setTexture(1, lig); - } - } - - // create bounding box - for (i = 0; i < mesh->MeshBuffers.size(); ++i) - { - mesh->MeshBuffers[i]->recalculateBoundingBox(); - } - mesh->recalculateBoundingBox(); - - // Set up an animated mesh to hold the mesh - SAnimatedMesh* AMesh = new SAnimatedMesh(); - AMesh->Type = EAMT_UNKNOWN; - AMesh->addMesh(mesh); - AMesh->recalculateBoundingBox(); - mesh->drop(); - - return AMesh; -} - - -/** \brief Tell us if this file is able to be loaded by this class - based on the file extension (e.g. ".bsp") - \return true if file is loadable.*/ -bool CDMFLoader::isALoadableFileExtension(const io::path& filename) const -{ - return core::hasFileExtension ( filename, "dmf" ); -} - - -} // end namespace scene -} // end namespace irr - -#endif // _IRR_COMPILE_WITH_DMF_LOADER_ - diff --git a/lib/irrlicht/source/Irrlicht/CDMFLoader.h b/lib/irrlicht/source/Irrlicht/CDMFLoader.h deleted file mode 100644 index a314913bd..000000000 --- a/lib/irrlicht/source/Irrlicht/CDMFLoader.h +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright (C) 2002-2012 Nikolaus Gebhardt -// This file is part of the "Irrlicht Engine". -// For conditions of distribution and use, see copyright notice in irrlicht.h -// -// This file was originally written by Salvatore Russo. -// I (Nikolaus Gebhardt) did some minor modifications changes to it and integrated -// it into Irrlicht: -// - removed STL dependency -// - removed log file and replaced it with irrlicht logging -// - adapted code formatting a bit to Irrlicht style -// - removed memory leaks -// Thanks a lot to Salvatore for his work on this and that he gave me -// his permission to add it into Irrlicht. - -/* - CDMFLoader by Salvatore Russo - Version 1.3 - - This loader is used to load DMF files in Irrlicht. - Look at the documentation for a sample application. - - Parts of this code are from Murphy McCauley COCTLoader just like - GetFaceNormal() or indexes creation routines and a routine to add faces. So - please refer to COCTLoader.h to know more about rights granted. - - You can use this software as you wish but you must not remove these notes about license nor - credits to others for parts of this code. -*/ - -#ifndef __C_DMF_LOADER_H_INCLUDED__ -#define __C_DMF_LOADER_H_INCLUDED__ - -#include "IMeshLoader.h" -#include "IReadFile.h" -#include "IFileSystem.h" -#include "SMesh.h" -#include "IVideoDriver.h" -#include "ISceneManager.h" -#include "SAnimatedMesh.h" - -namespace irr -{ -namespace scene -{ - /** A class to load DeleD mesh files.*/ - class CDMFLoader : public IMeshLoader - { - public: - - /** constructor*/ - CDMFLoader(ISceneManager* smgr, io::IFileSystem* filesys); - - //! returns true if the file maybe is able to be loaded by this class - //! based on the file extension (e.g. ".cob") - virtual bool isALoadableFileExtension(const io::path& filename) const; - - /** creates/loads an animated mesh from the file. - \return Pointer to the created mesh. Returns 0 if loading failed. - If you no longer need the mesh, you should call IAnimatedMesh::drop(). - See IReferenceCounted::drop() for more information.*/ - virtual IAnimatedMesh* createMesh(io::IReadFile* file); - - /** loads dynamic lights present in this scene. - Note that loaded lights from DeleD must have the suffix \b dynamic_ and must be \b pointlight. - Irrlicht correctly loads specular color, diffuse color , position and distance of object affected by light. - \return number of lights loaded or 0 if loading failed.*/ - int loadLights(const c8 * filename, ISceneManager* smgr, - ISceneNode* parent = 0, s32 base_id = 1000); - - /** loads water plains present in this scene. - Note that loaded water plains from DeleD must have the suffix \b water_ and must be \b rectangle (with just 1 rectangular face). - Irrlicht correctly loads position and rotation of water plain as well as texture layers. - \return number of water plains loaded or 0 if loading failed.*/ - int loadWaterPlains(const c8 *filename, - ISceneManager* smgr, - ISceneNode * parent = 0, - s32 base_id = 2000, - bool mode = true); - - private: - void findFile(bool use_mat_dirs, const core::stringc& path, const core::stringc& matPath, core::stringc& filename); - - ISceneManager* SceneMgr; - io::IFileSystem* FileSystem; - }; - -} // end namespace scene -} // end namespace irr - -#endif - diff --git a/lib/irrlicht/source/Irrlicht/CSceneManager.cpp b/lib/irrlicht/source/Irrlicht/CSceneManager.cpp index 991eebfe9..8fd67acc8 100644 --- a/lib/irrlicht/source/Irrlicht/CSceneManager.cpp +++ b/lib/irrlicht/source/Irrlicht/CSceneManager.cpp @@ -68,10 +68,6 @@ #include "CMY3DMeshFileLoader.h" #endif -#ifdef _IRR_COMPILE_WITH_DMF_LOADER_ -#include "CDMFLoader.h" -#endif - #ifdef _IRR_COMPILE_WITH_OGRE_LOADER_ #include "COgreMeshFileLoader.h" #endif @@ -250,9 +246,6 @@ CSceneManager::CSceneManager(video::IVideoDriver* driver, io::IFileSystem* fs, #ifdef _IRR_COMPILE_WITH_MY3D_LOADER_ MeshLoaderList.push_back(new CMY3DMeshFileLoader(this, FileSystem)); #endif - #ifdef _IRR_COMPILE_WITH_DMF_LOADER_ - MeshLoaderList.push_back(new CDMFLoader(this, FileSystem)); - #endif #ifdef _IRR_COMPILE_WITH_OGRE_LOADER_ MeshLoaderList.push_back(new COgreMeshFileLoader(FileSystem, Driver)); #endif