ResourceLoader SteamChecker now return a ternary

Former-commit-id: 2ee274ebb2b61f39e93f6ff2306b5a326b158594
This commit is contained in:
Lynix 2013-04-27 11:51:42 +02:00
parent 226d291ea6
commit 6699ce328f
16 changed files with 111 additions and 72 deletions

View File

@ -7,6 +7,26 @@
#ifndef NAZARA_ENUMS_CORE_HPP #ifndef NAZARA_ENUMS_CORE_HPP
#define 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 enum nzPlugin
{ {
nzPlugin_Assimp, nzPlugin_Assimp,
@ -52,26 +72,6 @@ enum nzProcessorVendor
nzProcessorVendor_Max = nzProcessorVendor_Vortex 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 enum nzStreamOptionFlags
{ {
nzStreamOption_None = 0x0, nzStreamOption_None = 0x0,
@ -79,4 +79,13 @@ enum nzStreamOptionFlags
nzStreamOption_Text = 0x1 nzStreamOption_Text = 0x1
}; };
enum nzTernary
{
nzTernary_False,
nzTernary_True,
nzTernary_Unknown,
nzTernary_Max = nzTernary_Unknown
};
#endif // NAZARA_ENUMS_CORE_HPP #endif // NAZARA_ENUMS_CORE_HPP

View File

@ -7,6 +7,7 @@
#ifndef NAZARA_RESOURCELOADER_HPP #ifndef NAZARA_RESOURCELOADER_HPP
#define NAZARA_RESOURCELOADER_HPP #define NAZARA_RESOURCELOADER_HPP
#include <Nazara/Core/Enums.hpp>
#include <Nazara/Core/String.hpp> #include <Nazara/Core/String.hpp>
#include <list> #include <list>
#include <tuple> #include <tuple>
@ -19,7 +20,7 @@ class NzResourceLoader
public: public:
using ExtensionGetter = bool (*)(const NzString& extension); using ExtensionGetter = bool (*)(const NzString& extension);
using FileLoader = bool (*)(Type* resource, const NzString& filePath, const Parameters& parameters); 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); using StreamLoader = bool (*)(Type* resource, NzInputStream& stream, const Parameters& parameters);
static bool IsExtensionSupported(const NzString& extension); static bool IsExtensionSupported(const NzString& extension);

View File

@ -64,17 +64,25 @@ bool NzResourceLoader<Type, Parameters>::LoadFromFile(Type* resource, const NzSt
} }
} }
nzTernary recognized = nzTernary_Unknown;
if (fileLoader) if (fileLoader)
{ {
if (checkFunc) if (checkFunc)
{ {
file.SetCursorPos(0); file.SetCursorPos(0);
if (!checkFunc(file, parameters)) recognized = checkFunc(file, parameters);
if (recognized == nzTernary_False)
continue; continue;
else
found = true;
}
else
{
recognized = nzTernary_Unknown;
found = true;
} }
found = true;
if (fileLoader(resource, filePath, parameters)) if (fileLoader(resource, filePath, parameters))
return true; return true;
} }
@ -82,17 +90,20 @@ bool NzResourceLoader<Type, Parameters>::LoadFromFile(Type* resource, const NzSt
{ {
file.SetCursorPos(0); file.SetCursorPos(0);
if (!checkFunc(file, parameters)) recognized = checkFunc(file, parameters);
if (recognized == nzTernary_False)
continue; continue;
else if (recognized == nzTernary_True)
found = true;
file.SetCursorPos(0); file.SetCursorPos(0);
found = true;
if (streamLoader(resource, file, parameters)) if (streamLoader(resource, file, parameters))
return true; return true;
} }
NazaraWarning("Loader failed"); if (recognized == nzTernary_True)
NazaraWarning("Loader failed");
} }
if (found) if (found)
@ -138,18 +149,21 @@ bool NzResourceLoader<Type, Parameters>::LoadFromStream(Type* resource, NzInputS
stream.SetCursorPos(streamPos); stream.SetCursorPos(streamPos);
// Le loader supporte-t-il les données ? // Le loader supporte-t-il les données ?
if (!checkFunc(stream, parameters)) nzTernary recognized = checkFunc(stream, parameters);
if (recognized == nzTernary_False)
continue; continue;
else if (recognized == nzTernary_True)
found = true;
// On repositionne le stream à son ancienne position // On repositionne le stream à son ancienne position
stream.SetCursorPos(streamPos); stream.SetCursorPos(streamPos);
// Chargement de la ressource // Chargement de la ressource
found = true;
if (streamLoader(resource, stream, parameters)) if (streamLoader(resource, stream, parameters))
return true; return true;
NazaraWarning("Loader failed"); if (recognized == nzTernary_True)
NazaraWarning("Loader failed");
} }
if (found) if (found)

View File

@ -69,7 +69,7 @@ namespace
return supportedExtensions.find(extension) != supportedExtensions.end(); return supportedExtensions.find(extension) != supportedExtensions.end();
} }
bool Check(NzInputStream& stream, const NzSoundBufferParams& parameters) nzTernary Check(NzInputStream& stream, const NzSoundBufferParams& parameters)
{ {
NazaraUnused(parameters); NazaraUnused(parameters);
@ -78,10 +78,10 @@ namespace
if (file) if (file)
{ {
sf_close(file); sf_close(file);
return true; return nzTernary_True;
} }
else else
return false; return nzTernary_False;
} }
bool Load(NzSoundBuffer* soundBuffer, NzInputStream& stream, const NzSoundBufferParams& parameters) bool Load(NzSoundBuffer* soundBuffer, NzInputStream& stream, const NzSoundBufferParams& parameters)

View File

@ -11,12 +11,12 @@
namespace namespace
{ {
bool Check(NzInputStream& stream, const NzModelParameters& parameters) nzTernary Check(NzInputStream& stream, const NzModelParameters& parameters)
{ {
NazaraUnused(stream); NazaraUnused(stream);
NazaraUnused(parameters); NazaraUnused(parameters);
return true; ///FIXME: Pas bon return nzTernary_Unknown;
} }
bool Load(NzModel* model, NzInputStream& stream, const NzModelParameters& parameters) bool Load(NzModel* model, NzInputStream& stream, const NzModelParameters& parameters)

View File

@ -23,12 +23,12 @@ namespace
return (extension == "obj"); return (extension == "obj");
} }
bool Check(NzInputStream& stream, const NzModelParameters& parameters) nzTernary Check(NzInputStream& stream, const NzModelParameters& parameters)
{ {
NazaraUnused(stream); NazaraUnused(stream);
NazaraUnused(parameters); NazaraUnused(parameters);
return true; ///FIXME: Pas bon return nzTernary_Unknown;
} }
bool Load(NzModel* model, NzInputStream& stream, const NzModelParameters& parameters) bool Load(NzModel* model, NzInputStream& stream, const NzModelParameters& parameters)

View File

@ -10,12 +10,12 @@
namespace namespace
{ {
bool Check(NzInputStream& stream, const NzMaterialParams& parameters) nzTernary Check(NzInputStream& stream, const NzMaterialParams& parameters)
{ {
NazaraUnused(stream); NazaraUnused(stream);
NazaraUnused(parameters); NazaraUnused(parameters);
return true; ///FIXME: Pas bon return nzTernary_Unknown;
} }
bool Load(NzMaterial* material, NzInputStream& stream, const NzMaterialParams& parameters) bool Load(NzMaterial* material, NzInputStream& stream, const NzMaterialParams& parameters)

View File

@ -24,20 +24,23 @@ namespace
return (extension == "md2"); return (extension == "md2");
} }
bool Check(NzInputStream& stream, const NzMeshParams& parameters) nzTernary Check(NzInputStream& stream, const NzMeshParams& parameters)
{ {
NazaraUnused(parameters); NazaraUnused(parameters);
nzUInt32 magic[2]; nzUInt32 magic[2];
if (stream.Read(&magic[0], 2*sizeof(nzUInt32)) != 2*sizeof(nzUInt32)) if (stream.Read(&magic[0], 2*sizeof(nzUInt32)) == 2*sizeof(nzUInt32))
return false; {
#ifdef NAZARA_BIG_ENDIAN
NzByteSwap(&magic[0], sizeof(nzUInt32));
NzByteSwap(&magic[1], sizeof(nzUInt32));
#endif
#ifdef NAZARA_BIG_ENDIAN if (magic[0] == md2Ident && magic[1] == 8)
NzByteSwap(&magic[0], sizeof(nzUInt32)); return nzTernary_True;
NzByteSwap(&magic[1], sizeof(nzUInt32)); }
#endif
return magic[0] == md2Ident && magic[1] == 8; return nzTernary_False;
} }
bool Load(NzMesh* mesh, NzInputStream& stream, const NzMeshParams& parameters) bool Load(NzMesh* mesh, NzInputStream& stream, const NzMeshParams& parameters)

View File

@ -13,7 +13,7 @@ namespace
return (extension == "md5anim"); return (extension == "md5anim");
} }
bool Check(NzInputStream& stream, const NzAnimationParams& parameters) nzTernary Check(NzInputStream& stream, const NzAnimationParams& parameters)
{ {
NzMD5AnimParser parser(stream, parameters); NzMD5AnimParser parser(stream, parameters);
return parser.Check(); return parser.Check();

View File

@ -32,16 +32,19 @@ NzMD5AnimParser::~NzMD5AnimParser()
m_stream.SetStreamOptions(m_streamFlags); m_stream.SetStreamOptions(m_streamFlags);
} }
bool NzMD5AnimParser::Check() nzTernary NzMD5AnimParser::Check()
{ {
if (!Advance(false)) if (Advance(false))
return false; {
unsigned int version;
if (std::sscanf(&m_currentLine[0], " MD5Version %u", &version) == 1)
{
if (version == 10)
return nzTernary_True;
}
}
unsigned int version; return nzTernary_False;
if (std::sscanf(&m_currentLine[0], " MD5Version %u", &version) != 1)
return false;
return version == 10;
} }
bool NzMD5AnimParser::Parse(NzAnimation* animation) bool NzMD5AnimParser::Parse(NzAnimation* animation)

View File

@ -21,7 +21,7 @@ class NzMD5AnimParser
NzMD5AnimParser(NzInputStream& stream, const NzAnimationParams& parameters); NzMD5AnimParser(NzInputStream& stream, const NzAnimationParams& parameters);
~NzMD5AnimParser(); ~NzMD5AnimParser();
bool Check(); nzTernary Check();
bool Parse(NzAnimation* animation); bool Parse(NzAnimation* animation);
private: private:

View File

@ -13,7 +13,7 @@ namespace
return (extension == "md5mesh"); return (extension == "md5mesh");
} }
bool Check(NzInputStream& stream, const NzMeshParams& parameters) nzTernary Check(NzInputStream& stream, const NzMeshParams& parameters)
{ {
NzMD5MeshParser parser(stream, parameters); NzMD5MeshParser parser(stream, parameters);
return parser.Check(); return parser.Check();

View File

@ -36,16 +36,19 @@ NzMD5MeshParser::~NzMD5MeshParser()
m_stream.SetStreamOptions(m_streamFlags); m_stream.SetStreamOptions(m_streamFlags);
} }
bool NzMD5MeshParser::Check() nzTernary NzMD5MeshParser::Check()
{ {
if (!Advance(false)) if (Advance(false))
return false; {
unsigned int version;
if (std::sscanf(&m_currentLine[0], " MD5Version %u", &version) == 1)
{
if (version == 10)
return nzTernary_True;
}
}
unsigned int version; return nzTernary_False;
if (std::sscanf(&m_currentLine[0], "MD5Version %u", &version) != 1)
return false;
return version == 10;
} }
bool NzMD5MeshParser::Parse(NzMesh* mesh) bool NzMD5MeshParser::Parse(NzMesh* mesh)

View File

@ -21,7 +21,7 @@ class NzMD5MeshParser
NzMD5MeshParser(NzInputStream& stream, const NzMeshParams& parameters); NzMD5MeshParser(NzInputStream& stream, const NzMeshParams& parameters);
~NzMD5MeshParser(); ~NzMD5MeshParser();
bool Check(); nzTernary Check();
bool Parse(NzMesh* mesh); bool Parse(NzMesh* mesh);
private: private:

View File

@ -44,15 +44,18 @@ namespace
return (extension == "pcx"); return (extension == "pcx");
} }
bool Check(NzInputStream& stream, const NzImageParams& parameters) nzTernary Check(NzInputStream& stream, const NzImageParams& parameters)
{ {
NazaraUnused(parameters); NazaraUnused(parameters);
nzUInt8 manufacturer; nzUInt8 manufacturer;
if (stream.Read(&manufacturer, 1) != 1) if (stream.Read(&manufacturer, 1) == 1)
return false; {
if (manufacturer == 0x0a)
return nzTernary_True;
}
return manufacturer == 0x0a; return nzTernary_False;
} }
bool Load(NzImage* image, NzInputStream& stream, const NzImageParams& parameters) bool Load(NzImage* image, NzInputStream& stream, const NzImageParams& parameters)

View File

@ -40,12 +40,15 @@ namespace
return supportedExtensions.find(extension) != supportedExtensions.end(); return supportedExtensions.find(extension) != supportedExtensions.end();
} }
bool Check(NzInputStream& stream, const NzImageParams& parameters) nzTernary Check(NzInputStream& stream, const NzImageParams& parameters)
{ {
NazaraUnused(parameters); NazaraUnused(parameters);
int width, height, bpp; 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) bool Load(NzImage* image, NzInputStream& stream, const NzImageParams& parameters)