diff options
Diffstat (limited to 'src/3rdparty/assimp/code/OgreImporter.cpp')
-rw-r--r-- | src/3rdparty/assimp/code/OgreImporter.cpp | 166 |
1 files changed, 84 insertions, 82 deletions
diff --git a/src/3rdparty/assimp/code/OgreImporter.cpp b/src/3rdparty/assimp/code/OgreImporter.cpp index 1760fceea..504f6a96f 100644 --- a/src/3rdparty/assimp/code/OgreImporter.cpp +++ b/src/3rdparty/assimp/code/OgreImporter.cpp @@ -2,11 +2,11 @@ Open Asset Import Library (assimp) ---------------------------------------------------------------------- -Copyright (c) 2006-2012, assimp team +Copyright (c) 2006-2016, assimp team All rights reserved. -Redistribution and use of this software in source and binary forms, -with or without modification, are permitted provided that the +Redistribution and use of this software 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 @@ -23,16 +23,16 @@ following conditions are met: derived from this software without specific prior written permission of the assimp team. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +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 COPYRIGHT +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +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 +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. ---------------------------------------------------------------------- @@ -40,23 +40,25 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef ASSIMP_BUILD_NO_OGRE_IMPORTER -#include "AssimpPCH.h" + #include "OgreImporter.h" #include "OgreBinarySerializer.h" #include "OgreXmlSerializer.h" +#include <assimp/Importer.hpp> +#include <memory> static const aiImporterDesc desc = { - "Ogre3D Mesh Importer", - "", - "", - "", - aiImporterFlags_SupportTextFlavour | aiImporterFlags_SupportBinaryFlavour, - 0, - 0, - 0, - 0, - "mesh mesh.xml" + "Ogre3D Mesh Importer", + "", + "", + "", + aiImporterFlags_SupportTextFlavour | aiImporterFlags_SupportBinaryFlavour, + 0, + 0, + 0, + 0, + "mesh mesh.xml" }; namespace Assimp @@ -66,79 +68,79 @@ namespace Ogre const aiImporterDesc* OgreImporter::GetInfo() const { - return &desc; + return &desc; } void OgreImporter::SetupProperties(const Importer* pImp) { - m_userDefinedMaterialLibFile = pImp->GetPropertyString(AI_CONFIG_IMPORT_OGRE_MATERIAL_FILE, "Scene.material"); - m_detectTextureTypeFromFilename = pImp->GetPropertyBool(AI_CONFIG_IMPORT_OGRE_TEXTURETYPE_FROM_FILENAME, false); + m_userDefinedMaterialLibFile = pImp->GetPropertyString(AI_CONFIG_IMPORT_OGRE_MATERIAL_FILE, "Scene.material"); + m_detectTextureTypeFromFilename = pImp->GetPropertyBool(AI_CONFIG_IMPORT_OGRE_TEXTURETYPE_FROM_FILENAME, false); } bool OgreImporter::CanRead(const std::string &pFile, Assimp::IOSystem *pIOHandler, bool checkSig) const { - if (!checkSig) { - return EndsWith(pFile, ".mesh.xml", false) || EndsWith(pFile, ".mesh", false); - } - - if (EndsWith(pFile, ".mesh.xml", false)) - { - const char* tokens[] = { "<mesh>" }; - return SearchFileHeaderForToken(pIOHandler, pFile, tokens, 1); - } - else - { - /// @todo Read and validate first header chunk? - return EndsWith(pFile, ".mesh", false); - } + if (!checkSig) { + return EndsWith(pFile, ".mesh.xml", false) || EndsWith(pFile, ".mesh", false); + } + + if (EndsWith(pFile, ".mesh.xml", false)) + { + const char* tokens[] = { "<mesh>" }; + return SearchFileHeaderForToken(pIOHandler, pFile, tokens, 1); + } + else + { + /// @todo Read and validate first header chunk? + return EndsWith(pFile, ".mesh", false); + } } void OgreImporter::InternReadFile(const std::string &pFile, aiScene *pScene, Assimp::IOSystem *pIOHandler) { - // Open source file - IOStream *f = pIOHandler->Open(pFile, "rb"); - if (!f) { - throw DeadlyImportError("Failed to open file " + pFile); - } - - // Binary .mesh import - if (EndsWith(pFile, ".mesh", false)) - { - /// @note MemoryStreamReader takes ownership of f. - MemoryStreamReader reader(f); - - // Import mesh - boost::scoped_ptr<Mesh> mesh(OgreBinarySerializer::ImportMesh(&reader)); - - // Import skeleton - OgreBinarySerializer::ImportSkeleton(pIOHandler, mesh.get()); - - // Import mesh referenced materials - ReadMaterials(pFile, pIOHandler, pScene, mesh.get()); - - // Convert to Assimp - mesh->ConvertToAssimpScene(pScene); - } - // XML .mesh.xml import - else - { - /// @note XmlReader does not take ownership of f, hence the scoped ptr. - boost::scoped_ptr<IOStream> scopedFile(f); - boost::scoped_ptr<CIrrXML_IOStreamReader> xmlStream(new CIrrXML_IOStreamReader(scopedFile.get())); - boost::scoped_ptr<XmlReader> reader(irr::io::createIrrXMLReader(xmlStream.get())); - - // Import mesh - boost::scoped_ptr<MeshXml> mesh(OgreXmlSerializer::ImportMesh(reader.get())); - - // Import skeleton - OgreXmlSerializer::ImportSkeleton(pIOHandler, mesh.get()); - - // Import mesh referenced materials - ReadMaterials(pFile, pIOHandler, pScene, mesh.get()); - - // Convert to Assimp - mesh->ConvertToAssimpScene(pScene); - } + // Open source file + IOStream *f = pIOHandler->Open(pFile, "rb"); + if (!f) { + throw DeadlyImportError("Failed to open file " + pFile); + } + + // Binary .mesh import + if (EndsWith(pFile, ".mesh", false)) + { + /// @note MemoryStreamReader takes ownership of f. + MemoryStreamReader reader(f); + + // Import mesh + std::unique_ptr<Mesh> mesh(OgreBinarySerializer::ImportMesh(&reader)); + + // Import skeleton + OgreBinarySerializer::ImportSkeleton(pIOHandler, mesh.get()); + + // Import mesh referenced materials + ReadMaterials(pFile, pIOHandler, pScene, mesh.get()); + + // Convert to Assimp + mesh->ConvertToAssimpScene(pScene); + } + // XML .mesh.xml import + else + { + /// @note XmlReader does not take ownership of f, hence the scoped ptr. + std::unique_ptr<IOStream> scopedFile(f); + std::unique_ptr<CIrrXML_IOStreamReader> xmlStream(new CIrrXML_IOStreamReader(scopedFile.get())); + std::unique_ptr<XmlReader> reader(irr::io::createIrrXMLReader(xmlStream.get())); + + // Import mesh + std::unique_ptr<MeshXml> mesh(OgreXmlSerializer::ImportMesh(reader.get())); + + // Import skeleton + OgreXmlSerializer::ImportSkeleton(pIOHandler, mesh.get()); + + // Import mesh referenced materials + ReadMaterials(pFile, pIOHandler, pScene, mesh.get()); + + // Convert to Assimp + mesh->ConvertToAssimpScene(pScene); + } } } // Ogre |