From 6699ce328f6c113aac454d10255e4834a03d2c04 Mon Sep 17 00:00:00 2001 From: Lynix Date: Sat, 27 Apr 2013 11:51:42 +0200 Subject: [PATCH] ResourceLoader SteamChecker now return a ternary Former-commit-id: 2ee274ebb2b61f39e93f6ff2306b5a326b158594 --- include/Nazara/Core/Enums.hpp | 49 +++++++++++-------- include/Nazara/Core/ResourceLoader.hpp | 3 +- include/Nazara/Core/ResourceLoader.inl | 30 +++++++++--- src/Nazara/Audio/Loaders/sndfile/Loader.cpp | 6 +-- src/Nazara/Graphics/Loaders/Mesh/Loader.cpp | 4 +- src/Nazara/Graphics/Loaders/OBJ/Loader.cpp | 4 +- .../Renderer/Loaders/Texture/Loader.cpp | 4 +- src/Nazara/Utility/Loaders/MD2/Loader.cpp | 19 ++++--- src/Nazara/Utility/Loaders/MD5Anim/Loader.cpp | 2 +- src/Nazara/Utility/Loaders/MD5Anim/Parser.cpp | 19 ++++--- src/Nazara/Utility/Loaders/MD5Anim/Parser.hpp | 2 +- src/Nazara/Utility/Loaders/MD5Mesh/Loader.cpp | 2 +- src/Nazara/Utility/Loaders/MD5Mesh/Parser.cpp | 19 ++++--- src/Nazara/Utility/Loaders/MD5Mesh/Parser.hpp | 2 +- src/Nazara/Utility/Loaders/PCX/Loader.cpp | 11 +++-- src/Nazara/Utility/Loaders/STB/Loader.cpp | 7 ++- 16 files changed, 111 insertions(+), 72 deletions(-) diff --git a/include/Nazara/Core/Enums.hpp b/include/Nazara/Core/Enums.hpp index cd3e91c8a..08983cd0f 100644 --- a/include/Nazara/Core/Enums.hpp +++ b/include/Nazara/Core/Enums.hpp @@ -7,6 +7,26 @@ #ifndef NAZARA_ENUMS_CORE_HPP #define NAZARA_ENUMS_CORE_HPP +enum nzEndianness +{ + nzEndianness_Unknown = -1, + + nzEndianness_BigEndian, + nzEndianness_LittleEndian, + + nzEndianness_Max = nzEndianness_LittleEndian +}; + +enum nzErrorType +{ + nzErrorType_AssertFailed, + nzErrorType_Internal, + nzErrorType_Normal, + nzErrorType_Warning, + + nzErrorType_Max = nzErrorType_Warning +}; + enum nzPlugin { nzPlugin_Assimp, @@ -52,26 +72,6 @@ enum nzProcessorVendor nzProcessorVendor_Max = nzProcessorVendor_Vortex }; -enum nzEndianness -{ - nzEndianness_Unknown = -1, - - nzEndianness_BigEndian, - nzEndianness_LittleEndian, - - nzEndianness_Max = nzEndianness_LittleEndian -}; - -enum nzErrorType -{ - nzErrorType_AssertFailed, - nzErrorType_Internal, - nzErrorType_Normal, - nzErrorType_Warning, - - nzErrorType_Max = nzErrorType_Warning -}; - enum nzStreamOptionFlags { nzStreamOption_None = 0x0, @@ -79,4 +79,13 @@ enum nzStreamOptionFlags nzStreamOption_Text = 0x1 }; +enum nzTernary +{ + nzTernary_False, + nzTernary_True, + nzTernary_Unknown, + + nzTernary_Max = nzTernary_Unknown +}; + #endif // NAZARA_ENUMS_CORE_HPP diff --git a/include/Nazara/Core/ResourceLoader.hpp b/include/Nazara/Core/ResourceLoader.hpp index be02238d3..5e3ee9589 100644 --- a/include/Nazara/Core/ResourceLoader.hpp +++ b/include/Nazara/Core/ResourceLoader.hpp @@ -7,6 +7,7 @@ #ifndef NAZARA_RESOURCELOADER_HPP #define NAZARA_RESOURCELOADER_HPP +#include #include #include #include @@ -19,7 +20,7 @@ class NzResourceLoader public: using ExtensionGetter = bool (*)(const NzString& extension); using FileLoader = bool (*)(Type* resource, const NzString& filePath, const Parameters& parameters); - using StreamChecker = bool (*)(NzInputStream& stream, const Parameters& parameters); + using StreamChecker = nzTernary (*)(NzInputStream& stream, const Parameters& parameters); using StreamLoader = bool (*)(Type* resource, NzInputStream& stream, const Parameters& parameters); static bool IsExtensionSupported(const NzString& extension); diff --git a/include/Nazara/Core/ResourceLoader.inl b/include/Nazara/Core/ResourceLoader.inl index 3204e0079..e82dcfbbe 100644 --- a/include/Nazara/Core/ResourceLoader.inl +++ b/include/Nazara/Core/ResourceLoader.inl @@ -64,17 +64,25 @@ bool NzResourceLoader::LoadFromFile(Type* resource, const NzSt } } + nzTernary recognized = nzTernary_Unknown; if (fileLoader) { if (checkFunc) { file.SetCursorPos(0); - if (!checkFunc(file, parameters)) + recognized = checkFunc(file, parameters); + if (recognized == nzTernary_False) continue; + else + found = true; + } + else + { + recognized = nzTernary_Unknown; + found = true; } - found = true; if (fileLoader(resource, filePath, parameters)) return true; } @@ -82,17 +90,20 @@ bool NzResourceLoader::LoadFromFile(Type* resource, const NzSt { file.SetCursorPos(0); - if (!checkFunc(file, parameters)) + recognized = checkFunc(file, parameters); + if (recognized == nzTernary_False) continue; + else if (recognized == nzTernary_True) + found = true; file.SetCursorPos(0); - found = true; if (streamLoader(resource, file, parameters)) return true; } - NazaraWarning("Loader failed"); + if (recognized == nzTernary_True) + NazaraWarning("Loader failed"); } if (found) @@ -138,18 +149,21 @@ bool NzResourceLoader::LoadFromStream(Type* resource, NzInputS stream.SetCursorPos(streamPos); // Le loader supporte-t-il les données ? - if (!checkFunc(stream, parameters)) + nzTernary recognized = checkFunc(stream, parameters); + if (recognized == nzTernary_False) continue; + else if (recognized == nzTernary_True) + found = true; // On repositionne le stream à son ancienne position stream.SetCursorPos(streamPos); // Chargement de la ressource - found = true; if (streamLoader(resource, stream, parameters)) return true; - NazaraWarning("Loader failed"); + if (recognized == nzTernary_True) + NazaraWarning("Loader failed"); } if (found) diff --git a/src/Nazara/Audio/Loaders/sndfile/Loader.cpp b/src/Nazara/Audio/Loaders/sndfile/Loader.cpp index 4bd9757fe..ffb69fbe2 100644 --- a/src/Nazara/Audio/Loaders/sndfile/Loader.cpp +++ b/src/Nazara/Audio/Loaders/sndfile/Loader.cpp @@ -69,7 +69,7 @@ namespace return supportedExtensions.find(extension) != supportedExtensions.end(); } - bool Check(NzInputStream& stream, const NzSoundBufferParams& parameters) + nzTernary Check(NzInputStream& stream, const NzSoundBufferParams& parameters) { NazaraUnused(parameters); @@ -78,10 +78,10 @@ namespace if (file) { sf_close(file); - return true; + return nzTernary_True; } else - return false; + return nzTernary_False; } bool Load(NzSoundBuffer* soundBuffer, NzInputStream& stream, const NzSoundBufferParams& parameters) diff --git a/src/Nazara/Graphics/Loaders/Mesh/Loader.cpp b/src/Nazara/Graphics/Loaders/Mesh/Loader.cpp index 078757632..32985a428 100644 --- a/src/Nazara/Graphics/Loaders/Mesh/Loader.cpp +++ b/src/Nazara/Graphics/Loaders/Mesh/Loader.cpp @@ -11,12 +11,12 @@ namespace { - bool Check(NzInputStream& stream, const NzModelParameters& parameters) + nzTernary Check(NzInputStream& stream, const NzModelParameters& parameters) { NazaraUnused(stream); NazaraUnused(parameters); - return true; ///FIXME: Pas bon + return nzTernary_Unknown; } bool Load(NzModel* model, NzInputStream& stream, const NzModelParameters& parameters) diff --git a/src/Nazara/Graphics/Loaders/OBJ/Loader.cpp b/src/Nazara/Graphics/Loaders/OBJ/Loader.cpp index 16fba1a15..ab81c0b8d 100644 --- a/src/Nazara/Graphics/Loaders/OBJ/Loader.cpp +++ b/src/Nazara/Graphics/Loaders/OBJ/Loader.cpp @@ -23,12 +23,12 @@ namespace return (extension == "obj"); } - bool Check(NzInputStream& stream, const NzModelParameters& parameters) + nzTernary Check(NzInputStream& stream, const NzModelParameters& parameters) { NazaraUnused(stream); NazaraUnused(parameters); - return true; ///FIXME: Pas bon + return nzTernary_Unknown; } bool Load(NzModel* model, NzInputStream& stream, const NzModelParameters& parameters) diff --git a/src/Nazara/Renderer/Loaders/Texture/Loader.cpp b/src/Nazara/Renderer/Loaders/Texture/Loader.cpp index 1e32af5a3..0242c1c21 100644 --- a/src/Nazara/Renderer/Loaders/Texture/Loader.cpp +++ b/src/Nazara/Renderer/Loaders/Texture/Loader.cpp @@ -10,12 +10,12 @@ namespace { - bool Check(NzInputStream& stream, const NzMaterialParams& parameters) + nzTernary Check(NzInputStream& stream, const NzMaterialParams& parameters) { NazaraUnused(stream); NazaraUnused(parameters); - return true; ///FIXME: Pas bon + return nzTernary_Unknown; } bool Load(NzMaterial* material, NzInputStream& stream, const NzMaterialParams& parameters) diff --git a/src/Nazara/Utility/Loaders/MD2/Loader.cpp b/src/Nazara/Utility/Loaders/MD2/Loader.cpp index 7a09d98e8..433d8f0e1 100644 --- a/src/Nazara/Utility/Loaders/MD2/Loader.cpp +++ b/src/Nazara/Utility/Loaders/MD2/Loader.cpp @@ -24,20 +24,23 @@ namespace return (extension == "md2"); } - bool Check(NzInputStream& stream, const NzMeshParams& parameters) + nzTernary Check(NzInputStream& stream, const NzMeshParams& parameters) { NazaraUnused(parameters); nzUInt32 magic[2]; - if (stream.Read(&magic[0], 2*sizeof(nzUInt32)) != 2*sizeof(nzUInt32)) - return false; + if (stream.Read(&magic[0], 2*sizeof(nzUInt32)) == 2*sizeof(nzUInt32)) + { + #ifdef NAZARA_BIG_ENDIAN + NzByteSwap(&magic[0], sizeof(nzUInt32)); + NzByteSwap(&magic[1], sizeof(nzUInt32)); + #endif - #ifdef NAZARA_BIG_ENDIAN - NzByteSwap(&magic[0], sizeof(nzUInt32)); - NzByteSwap(&magic[1], sizeof(nzUInt32)); - #endif + if (magic[0] == md2Ident && magic[1] == 8) + return nzTernary_True; + } - return magic[0] == md2Ident && magic[1] == 8; + return nzTernary_False; } bool Load(NzMesh* mesh, NzInputStream& stream, const NzMeshParams& parameters) diff --git a/src/Nazara/Utility/Loaders/MD5Anim/Loader.cpp b/src/Nazara/Utility/Loaders/MD5Anim/Loader.cpp index 42f2dd557..07e7ab56c 100644 --- a/src/Nazara/Utility/Loaders/MD5Anim/Loader.cpp +++ b/src/Nazara/Utility/Loaders/MD5Anim/Loader.cpp @@ -13,7 +13,7 @@ namespace return (extension == "md5anim"); } - bool Check(NzInputStream& stream, const NzAnimationParams& parameters) + nzTernary Check(NzInputStream& stream, const NzAnimationParams& parameters) { NzMD5AnimParser parser(stream, parameters); return parser.Check(); diff --git a/src/Nazara/Utility/Loaders/MD5Anim/Parser.cpp b/src/Nazara/Utility/Loaders/MD5Anim/Parser.cpp index 3afed226d..372dc74a3 100644 --- a/src/Nazara/Utility/Loaders/MD5Anim/Parser.cpp +++ b/src/Nazara/Utility/Loaders/MD5Anim/Parser.cpp @@ -32,16 +32,19 @@ NzMD5AnimParser::~NzMD5AnimParser() m_stream.SetStreamOptions(m_streamFlags); } -bool NzMD5AnimParser::Check() +nzTernary NzMD5AnimParser::Check() { - if (!Advance(false)) - return false; + if (Advance(false)) + { + unsigned int version; + if (std::sscanf(&m_currentLine[0], " MD5Version %u", &version) == 1) + { + if (version == 10) + return nzTernary_True; + } + } - unsigned int version; - if (std::sscanf(&m_currentLine[0], " MD5Version %u", &version) != 1) - return false; - - return version == 10; + return nzTernary_False; } bool NzMD5AnimParser::Parse(NzAnimation* animation) diff --git a/src/Nazara/Utility/Loaders/MD5Anim/Parser.hpp b/src/Nazara/Utility/Loaders/MD5Anim/Parser.hpp index 542537fc7..f34431917 100644 --- a/src/Nazara/Utility/Loaders/MD5Anim/Parser.hpp +++ b/src/Nazara/Utility/Loaders/MD5Anim/Parser.hpp @@ -21,7 +21,7 @@ class NzMD5AnimParser NzMD5AnimParser(NzInputStream& stream, const NzAnimationParams& parameters); ~NzMD5AnimParser(); - bool Check(); + nzTernary Check(); bool Parse(NzAnimation* animation); private: diff --git a/src/Nazara/Utility/Loaders/MD5Mesh/Loader.cpp b/src/Nazara/Utility/Loaders/MD5Mesh/Loader.cpp index 661a52e6b..62cd9e181 100644 --- a/src/Nazara/Utility/Loaders/MD5Mesh/Loader.cpp +++ b/src/Nazara/Utility/Loaders/MD5Mesh/Loader.cpp @@ -13,7 +13,7 @@ namespace return (extension == "md5mesh"); } - bool Check(NzInputStream& stream, const NzMeshParams& parameters) + nzTernary Check(NzInputStream& stream, const NzMeshParams& parameters) { NzMD5MeshParser parser(stream, parameters); return parser.Check(); diff --git a/src/Nazara/Utility/Loaders/MD5Mesh/Parser.cpp b/src/Nazara/Utility/Loaders/MD5Mesh/Parser.cpp index ddff32ae0..e0e2a7cd7 100644 --- a/src/Nazara/Utility/Loaders/MD5Mesh/Parser.cpp +++ b/src/Nazara/Utility/Loaders/MD5Mesh/Parser.cpp @@ -36,16 +36,19 @@ NzMD5MeshParser::~NzMD5MeshParser() m_stream.SetStreamOptions(m_streamFlags); } -bool NzMD5MeshParser::Check() +nzTernary NzMD5MeshParser::Check() { - if (!Advance(false)) - return false; + if (Advance(false)) + { + unsigned int version; + if (std::sscanf(&m_currentLine[0], " MD5Version %u", &version) == 1) + { + if (version == 10) + return nzTernary_True; + } + } - unsigned int version; - if (std::sscanf(&m_currentLine[0], "MD5Version %u", &version) != 1) - return false; - - return version == 10; + return nzTernary_False; } bool NzMD5MeshParser::Parse(NzMesh* mesh) diff --git a/src/Nazara/Utility/Loaders/MD5Mesh/Parser.hpp b/src/Nazara/Utility/Loaders/MD5Mesh/Parser.hpp index 94ee2578e..827e01bea 100644 --- a/src/Nazara/Utility/Loaders/MD5Mesh/Parser.hpp +++ b/src/Nazara/Utility/Loaders/MD5Mesh/Parser.hpp @@ -21,7 +21,7 @@ class NzMD5MeshParser NzMD5MeshParser(NzInputStream& stream, const NzMeshParams& parameters); ~NzMD5MeshParser(); - bool Check(); + nzTernary Check(); bool Parse(NzMesh* mesh); private: diff --git a/src/Nazara/Utility/Loaders/PCX/Loader.cpp b/src/Nazara/Utility/Loaders/PCX/Loader.cpp index af488d96b..d24babbd8 100644 --- a/src/Nazara/Utility/Loaders/PCX/Loader.cpp +++ b/src/Nazara/Utility/Loaders/PCX/Loader.cpp @@ -44,15 +44,18 @@ namespace return (extension == "pcx"); } - bool Check(NzInputStream& stream, const NzImageParams& parameters) + nzTernary Check(NzInputStream& stream, const NzImageParams& parameters) { NazaraUnused(parameters); nzUInt8 manufacturer; - if (stream.Read(&manufacturer, 1) != 1) - return false; + if (stream.Read(&manufacturer, 1) == 1) + { + if (manufacturer == 0x0a) + return nzTernary_True; + } - return manufacturer == 0x0a; + return nzTernary_False; } bool Load(NzImage* image, NzInputStream& stream, const NzImageParams& parameters) diff --git a/src/Nazara/Utility/Loaders/STB/Loader.cpp b/src/Nazara/Utility/Loaders/STB/Loader.cpp index f69c2c272..0257edf4f 100644 --- a/src/Nazara/Utility/Loaders/STB/Loader.cpp +++ b/src/Nazara/Utility/Loaders/STB/Loader.cpp @@ -40,12 +40,15 @@ namespace return supportedExtensions.find(extension) != supportedExtensions.end(); } - bool Check(NzInputStream& stream, const NzImageParams& parameters) + nzTernary Check(NzInputStream& stream, const NzImageParams& parameters) { NazaraUnused(parameters); int width, height, bpp; - return stbi_info_from_callbacks(&callbacks, &stream, &width, &height, &bpp); + if (stbi_info_from_callbacks(&callbacks, &stream, &width, &height, &bpp)) + return nzTernary_True; + else + return nzTernary_False; } bool Load(NzImage* image, NzInputStream& stream, const NzImageParams& parameters)