ResourceLoader SteamChecker now return a ternary
Former-commit-id: 2ee274ebb2b61f39e93f6ff2306b5a326b158594
This commit is contained in:
parent
226d291ea6
commit
6699ce328f
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue