From dcfc696e86736a3b869a3efe0e64e09f13609040 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Fri, 2 Dec 2016 11:32:34 +0100 Subject: [PATCH] FBX: woraround for issue 1089. --- code/FBXBinaryTokenizer.cpp | 18 ++++---- code/FBXConverter.cpp | 15 +------ code/FBXDeformer.cpp | 4 +- code/FBXDocument.cpp | 10 ++--- code/FBXImporter.cpp | 10 ++--- code/FBXTokenizer.h | 5 --- test/CMakeLists.txt | 1 + test/models/FBX/spider.fbx | Bin 0 -> 123292 bytes test/unit/utFBXImporterExporter.cpp | 61 ++++++++++++++++++++++++++++ 9 files changed, 80 insertions(+), 44 deletions(-) create mode 100644 test/models/FBX/spider.fbx create mode 100644 test/unit/utFBXImporterExporter.cpp diff --git a/code/FBXBinaryTokenizer.cpp b/code/FBXBinaryTokenizer.cpp index 1c2585798..550859345 100644 --- a/code/FBXBinaryTokenizer.cpp +++ b/code/FBXBinaryTokenizer.cpp @@ -146,18 +146,20 @@ void TokenizeError(const std::string& message, const char* begin, const char* cu // ------------------------------------------------------------------------------------------------ uint32_t ReadWord(const char* input, const char*& cursor, const char* end) { - if(Offset(cursor, end) < 4) { + const size_t k_to_read = sizeof( uint32_t ); + if(Offset(cursor, end) < k_to_read ) { TokenizeError("cannot ReadWord, out of bounds",input, cursor); } uint32_t word = *reinterpret_cast(cursor); AI_SWAP4(word); - cursor += 4; + cursor += k_to_read; return word; } +// ------------------------------------------------------------------------------------------------ uint64_t ReadDoubleWord(const char* input, const char*& cursor, const char* end) { const size_t k_to_read = sizeof(uint64_t); @@ -177,7 +179,7 @@ uint64_t ReadDoubleWord(const char* input, const char*& cursor, const char* end) // ------------------------------------------------------------------------------------------------ uint8_t ReadByte(const char* input, const char*& cursor, const char* end) { - if(Offset(cursor, end) < 1) { + if(Offset(cursor, end) < sizeof( uint8_t ) ) { TokenizeError("cannot ReadByte, out of bounds",input, cursor); } @@ -220,8 +222,6 @@ unsigned int ReadString(const char*& sbegin_out, const char*& send_out, const ch return length; } - - // ------------------------------------------------------------------------------------------------ void ReadData(const char*& sbegin_out, const char*& send_out, const char* input, const char*& cursor, const char* end) { @@ -345,7 +345,7 @@ void ReadData(const char*& sbegin_out, const char*& send_out, const char* input, bool ReadScope(TokenList& output_tokens, const char* input, const char*& cursor, const char* end, uint32_t const flags) { // the first word contains the offset at which this block ends - const uint64_t end_offset = check_flag(flags, e_flag_field_size_64_bit) ? ReadDoubleWord(input, cursor, end) : ReadWord(input, cursor, end); + const uint64_t end_offset = /*check_flag(flags, e_flag_field_size_64_bit) ? ReadDoubleWord(input, cursor, end) : */ReadWord(input, cursor, end); // we may get 0 if reading reached the end of the file - // fbx files have a mysterious extra footer which I don't know @@ -363,10 +363,10 @@ bool ReadScope(TokenList& output_tokens, const char* input, const char*& cursor, } // the second data word contains the number of properties in the scope - const uint64_t prop_count = check_flag(flags, e_flag_field_size_64_bit) ? ReadDoubleWord(input, cursor, end) : ReadWord(input, cursor, end); + const uint64_t prop_count = /*check_flag(flags, e_flag_field_size_64_bit) ? ReadDoubleWord(input, cursor, end) : */ReadWord(input, cursor, end); // the third data word contains the length of the property list - const uint64_t prop_length = check_flag(flags, e_flag_field_size_64_bit) ? ReadDoubleWord(input, cursor, end) : ReadWord(input, cursor, end); + const uint64_t prop_length = /*check_flag(flags, e_flag_field_size_64_bit) ? ReadDoubleWord(input, cursor, end) :*/ ReadWord(input, cursor, end); // now comes the name of the scope/key const char* sbeg, *send; @@ -393,7 +393,7 @@ bool ReadScope(TokenList& output_tokens, const char* input, const char*& cursor, // at the end of each nested block, there is a NUL record to indicate // that the sub-scope exists (i.e. to distinguish between P: and P : {}) // this NUL record is 13 bytes long on 32 bit version and 25 bytes long on 64 bit. - const size_t sentinel_block_length = check_flag(flags, e_flag_field_size_64_bit) ? (sizeof(uint64_t) * 3 + 1) : (sizeof(uint32_t) * 3 + 1); + const size_t sentinel_block_length = /*check_flag(flags, e_flag_field_size_64_bit) ? (sizeof(uint64_t) * 3 + 1) : */(sizeof(uint32_t) * 3 + 1); if (Offset(input, cursor) < end_offset) { if (end_offset - Offset(input, cursor) < sentinel_block_length) { diff --git a/code/FBXConverter.cpp b/code/FBXConverter.cpp index 473ef8764..5148f23d5 100644 --- a/code/FBXConverter.cpp +++ b/code/FBXConverter.cpp @@ -71,7 +71,7 @@ using namespace Util; #define CONVERT_FBX_TIME(time) static_cast(time) / 46186158000L - // XXX vc9's debugger won't step into anonymous namespaces +// XXX vc9's debugger won't step into anonymous namespaces //namespace { /** Dummy class to encapsulate the conversion process */ @@ -114,11 +114,9 @@ private: // collect and assign child nodes void ConvertNodes( uint64_t id, aiNode& parent, const aiMatrix4x4& parent_transform = aiMatrix4x4() ); - // ------------------------------------------------------------------------------------------------ void ConvertLights( const Model& model ); - // ------------------------------------------------------------------------------------------------ void ConvertCameras( const Model& model ); @@ -189,7 +187,6 @@ private: static const unsigned int NO_MATERIAL_SEPARATION = /* std::numeric_limits::max() */ static_cast(-1); - // ------------------------------------------------------------------------------------------------ /** * - if materialIndex == NO_MATERIAL_SEPARATION, materials are not taken into @@ -341,8 +338,6 @@ private: typedef std::tuple, std::shared_ptr, unsigned int > KeyFrameList; typedef std::vector KeyFrameListList; - - // ------------------------------------------------------------------------------------------------ KeyFrameListList GetKeyframeList( const std::vector& nodes, int64_t start, int64_t stop ); @@ -899,7 +894,6 @@ void Converter::GetRotationMatrix( Model::RotOrder mode, const aiVector3D& rotat } } - bool Converter::NeedsComplexTransformationChain( const Model& model ) { const PropertyTable& props = model.Props(); @@ -923,7 +917,6 @@ bool Converter::NeedsComplexTransformationChain( const Model& model ) return false; } - std::string Converter::NameTransformationChainNode( const std::string& name, TransformationComp comp ) { return name + std::string( MAGIC_NODE_TAG ) + "_" + NameTransformationComp( comp ); @@ -1067,7 +1060,6 @@ void Converter::GenerateTransformationNodeChain( const Model& model, } } - void Converter::SetupNodeMetadata( const Model& model, aiNode& nd ) { const PropertyTable& props = model.Props(); @@ -1132,7 +1124,6 @@ void Converter::ConvertModel( const Model& model, aiNode& nd, const aiMatrix4x4& } } - std::vector Converter::ConvertMesh( const MeshGeometry& mesh, const Model& model, const aiMatrix4x4& node_global_transform ) { @@ -1168,7 +1159,6 @@ std::vector Converter::ConvertMesh( const MeshGeometry& mesh, cons return temp; } - aiMesh* Converter::SetupEmptyMesh( const MeshGeometry& mesh ) { aiMesh* const out_mesh = new aiMesh(); @@ -1188,7 +1178,6 @@ aiMesh* Converter::SetupEmptyMesh( const MeshGeometry& mesh ) return out_mesh; } - unsigned int Converter::ConvertMeshSingleMaterial( const MeshGeometry& mesh, const Model& model, const aiMatrix4x4& node_global_transform ) { @@ -1511,7 +1500,6 @@ unsigned int Converter::ConvertMeshMultiMaterial( const MeshGeometry& mesh, cons return static_cast( meshes.size() - 1 ); } - void Converter::ConvertWeights( aiMesh* out, const Model& model, const MeshGeometry& geo, const aiMatrix4x4& node_global_transform , unsigned int materialIndex, @@ -1658,7 +1646,6 @@ void Converter::ConvertCluster( std::vector& bones, const Model& /*mode } } - void Converter::ConvertMaterialForMesh( aiMesh* out, const Model& model, const MeshGeometry& geo, MatIndexArray::value_type materialIndex ) { diff --git a/code/FBXDeformer.cpp b/code/FBXDeformer.cpp index 47db96563..067a5e405 100644 --- a/code/FBXDeformer.cpp +++ b/code/FBXDeformer.cpp @@ -54,7 +54,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. namespace Assimp { namespace FBX { - using namespace Util; +using namespace Util; // ------------------------------------------------------------------------------------------------ Deformer::Deformer(uint64_t id, const Element& element, const Document& doc, const std::string& name) @@ -159,8 +159,6 @@ Skin::~Skin() } - - } } diff --git a/code/FBXDocument.cpp b/code/FBXDocument.cpp index cf5f6da86..dafda6c98 100644 --- a/code/FBXDocument.cpp +++ b/code/FBXDocument.cpp @@ -252,17 +252,15 @@ FileGlobalSettings::FileGlobalSettings(const Document& doc, std::shared_ptrCompound(); fbxVersion = ParseTokenAsInt(GetRequiredToken(GetRequiredElement(shead,"FBXVersion",ehead),0)); - // While we maye have some success with newer files, we don't support + // While we may have some success with newer files, we don't support // the older 6.n fbx format if(fbxVersion < LowerSupportedVersion ) { DOMError("unsupported, old format version, supported are only FBX 2011, FBX 2012 and FBX 2013"); @@ -331,7 +328,6 @@ void Document::ReadHeader() } } - const Element* const ecreator = shead["Creator"]; if(ecreator) { creator = ParseTokenAsString(GetRequiredToken(*ecreator,0)); diff --git a/code/FBXImporter.cpp b/code/FBXImporter.cpp index 7cf5dfa9a..d6c80db2f 100644 --- a/code/FBXImporter.cpp +++ b/code/FBXImporter.cpp @@ -44,9 +44,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef ASSIMP_BUILD_NO_FBX_IMPORTER -#include -#include - #include "FBXImporter.h" #include "FBXTokenizer.h" @@ -59,6 +56,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "MemoryIOWrapper.h" #include +#include +#include + namespace Assimp { template<> const std::string LogFunctions::log_prefix = "FBX: "; } @@ -99,7 +99,7 @@ FBXImporter::~FBXImporter() bool FBXImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const { const std::string& extension = GetExtension(pFile); - if (extension == "fbx") { + if (extension == std::string( desc.mFileExtensions ) ) { return true; } @@ -118,7 +118,6 @@ const aiImporterDesc* FBXImporter::GetInfo () const return &desc; } - // ------------------------------------------------------------------------------------------------ // Setup configuration properties for the loader void FBXImporter::SetupProperties(const Importer* pImp) @@ -135,7 +134,6 @@ void FBXImporter::SetupProperties(const Importer* pImp) settings.optimizeEmptyAnimationCurves = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_OPTIMIZE_EMPTY_ANIMATION_CURVES, true); } - // ------------------------------------------------------------------------------------------------ // Imports the given file into the given scene structure. void FBXImporter::InternReadFile( const std::string& pFile, diff --git a/code/FBXTokenizer.h b/code/FBXTokenizer.h index f9f1fb871..66df3992a 100644 --- a/code/FBXTokenizer.h +++ b/code/FBXTokenizer.h @@ -84,13 +84,10 @@ enum TokenType * Offers iterator protocol. Tokens are immutable. */ class Token { - private: - static const unsigned int BINARY_MARKER = static_cast(-1); public: - /** construct a textual token */ Token(const char* sbegin, const char* send, TokenType type, unsigned int line, unsigned int column); @@ -100,13 +97,11 @@ public: ~Token(); public: - std::string StringContents() const { return std::string(begin(),end()); } public: - bool IsBinary() const { return column == BINARY_MARKER; } diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index c729fc7e5..cc24487da 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -67,6 +67,7 @@ SET( TEST_SRCS unit/utColladaExportLight.cpp unit/utDefaultIOStream.cpp unit/utFastAtof.cpp + unit/utFBXImporterExporter.cpp unit/utFindDegenerates.cpp unit/utFindInvalidData.cpp unit/utFixInfacingNormals.cpp diff --git a/test/models/FBX/spider.fbx b/test/models/FBX/spider.fbx new file mode 100644 index 0000000000000000000000000000000000000000..cc5a38798a162b4b6f1a7f3a1d2df69e334f104c GIT binary patch literal 123292 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�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π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 literal 0 HcmV?d00001 diff --git a/test/unit/utFBXImporterExporter.cpp b/test/unit/utFBXImporterExporter.cpp new file mode 100644 index 000000000..cc131403d --- /dev/null +++ b/test/unit/utFBXImporterExporter.cpp @@ -0,0 +1,61 @@ +/* +--------------------------------------------------------------------------- +Open Asset Import Library (assimp) +--------------------------------------------------------------------------- + +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 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 the assimp team, nor the names of its +contributors may be used to endorse or promote products +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 +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +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 +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. +--------------------------------------------------------------------------- +*/ + +#include "UnitTestPCH.h" +#include "SceneDiffer.h" +#include "AbstractImportExportBase.h" + +#include + +using namespace Assimp; + +class utFBXImporterExporter : public AbstractImportExportBase { +public: + virtual bool importerTest() { + Assimp::Importer importer; + const aiScene *scene = importer.ReadFile( ASSIMP_TEST_MODELS_DIR "/FBX/spider.FBX", 0 ); + return nullptr != scene; + } +}; + +TEST_F( utFBXImporterExporter, importXFromFileTest ) { + EXPECT_TRUE( importerTest() ); +}