From dce587bd63c3fc9f7428ad06f3b1c9b8c7c4ad51 Mon Sep 17 00:00:00 2001 From: Lynix Date: Tue, 8 Mar 2016 13:37:17 +0100 Subject: [PATCH] Add support for custom resource parameters And allow users to skip a precise loader using them Former-commit-id: 297af2e4a24ad67c343aae5d89352abf4ea05f63 --- include/Nazara/Audio/Music.hpp | 3 ++- include/Nazara/Audio/SoundBuffer.hpp | 3 ++- include/Nazara/Core/ResourceLoader.hpp | 2 ++ include/Nazara/Core/ResourceParameters.hpp | 20 +++++++++++++++++++ include/Nazara/Core/ResourceSaver.hpp | 2 ++ include/Nazara/Graphics/Material.hpp | 3 ++- include/Nazara/Graphics/Model.hpp | 3 ++- include/Nazara/Graphics/SkeletalModel.hpp | 2 +- include/Nazara/Utility/Animation.hpp | 3 ++- include/Nazara/Utility/Font.hpp | 3 ++- include/Nazara/Utility/Image.hpp | 3 ++- include/Nazara/Utility/Mesh.hpp | 3 ++- src/Nazara/Graphics/Formats/MeshLoader.cpp | 10 ++++++++-- src/Nazara/Graphics/Formats/OBJLoader.cpp | 5 ++++- src/Nazara/Graphics/Formats/TextureLoader.cpp | 5 ++++- src/Nazara/Utility/Formats/DDSLoader.cpp | 4 +++- src/Nazara/Utility/Formats/FreeTypeLoader.cpp | 4 +++- src/Nazara/Utility/Formats/MD2Loader.cpp | 4 +++- src/Nazara/Utility/Formats/MD5AnimLoader.cpp | 4 +++- src/Nazara/Utility/Formats/MD5MeshLoader.cpp | 4 +++- src/Nazara/Utility/Formats/PCXLoader.cpp | 4 +++- src/Nazara/Utility/Formats/STBLoader.cpp | 4 +++- 22 files changed, 78 insertions(+), 20 deletions(-) create mode 100644 include/Nazara/Core/ResourceParameters.hpp diff --git a/include/Nazara/Audio/Music.hpp b/include/Nazara/Audio/Music.hpp index 50935ac79..d08732fa7 100644 --- a/include/Nazara/Audio/Music.hpp +++ b/include/Nazara/Audio/Music.hpp @@ -12,10 +12,11 @@ #include #include #include +#include namespace Nz { - struct MusicParams + struct MusicParams : ResourceParameters { bool forceMono = false; diff --git a/include/Nazara/Audio/SoundBuffer.hpp b/include/Nazara/Audio/SoundBuffer.hpp index b144e71ad..2b02847b4 100644 --- a/include/Nazara/Audio/SoundBuffer.hpp +++ b/include/Nazara/Audio/SoundBuffer.hpp @@ -16,12 +16,13 @@ #include #include #include +#include #include #include namespace Nz { - struct SoundBufferParams + struct SoundBufferParams : ResourceParameters { bool forceMono = false; diff --git a/include/Nazara/Core/ResourceLoader.hpp b/include/Nazara/Core/ResourceLoader.hpp index 73b2dfa52..4bc58b265 100644 --- a/include/Nazara/Core/ResourceLoader.hpp +++ b/include/Nazara/Core/ResourceLoader.hpp @@ -21,6 +21,8 @@ namespace Nz template class ResourceLoader { + static_assert(std::is_base_of::value, "ResourceParameters must be a base of Parameters"); + friend Type; public: diff --git a/include/Nazara/Core/ResourceParameters.hpp b/include/Nazara/Core/ResourceParameters.hpp new file mode 100644 index 000000000..e4f32e06a --- /dev/null +++ b/include/Nazara/Core/ResourceParameters.hpp @@ -0,0 +1,20 @@ +// Copyright (C) 2015 Jérôme Leclercq +// This file is part of the "Nazara Engine - Core module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#pragma once + +#ifndef NAZARA_RESOURCEPARAMETERS_HPP +#define NAZARA_RESOURCEPARAMETERS_HPP + +#include + +namespace Nz +{ + struct ResourceParameters + { + ParameterList custom; + }; +} + +#endif // NAZARA_RESOURCEPARAMETERS_HPP diff --git a/include/Nazara/Core/ResourceSaver.hpp b/include/Nazara/Core/ResourceSaver.hpp index c0e22566c..470166014 100644 --- a/include/Nazara/Core/ResourceSaver.hpp +++ b/include/Nazara/Core/ResourceSaver.hpp @@ -21,6 +21,8 @@ namespace Nz template class ResourceSaver { + static_assert(std::is_base_of::value, "ResourceParameters must be a base of Parameters"); + friend Type; public: diff --git a/include/Nazara/Graphics/Material.hpp b/include/Nazara/Graphics/Material.hpp index 8f6cdb920..a2d30b643 100644 --- a/include/Nazara/Graphics/Material.hpp +++ b/include/Nazara/Graphics/Material.hpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -26,7 +27,7 @@ namespace Nz { - struct NAZARA_GRAPHICS_API MaterialParams + struct NAZARA_GRAPHICS_API MaterialParams : ResourceParameters { bool loadAlphaMap = true; bool loadDiffuseMap = true; diff --git a/include/Nazara/Graphics/Model.hpp b/include/Nazara/Graphics/Model.hpp index 9f7506c12..b4564d1b8 100644 --- a/include/Nazara/Graphics/Model.hpp +++ b/include/Nazara/Graphics/Model.hpp @@ -10,13 +10,14 @@ #include #include #include +#include #include #include #include namespace Nz { - struct NAZARA_GRAPHICS_API ModelParameters + struct NAZARA_GRAPHICS_API ModelParameters : ResourceParameters { ModelParameters(); diff --git a/include/Nazara/Graphics/SkeletalModel.hpp b/include/Nazara/Graphics/SkeletalModel.hpp index 6ae25923e..99791168a 100644 --- a/include/Nazara/Graphics/SkeletalModel.hpp +++ b/include/Nazara/Graphics/SkeletalModel.hpp @@ -18,7 +18,7 @@ namespace Nz { - struct NAZARA_GRAPHICS_API SkeletalModelParameters : public ModelParameters + struct NAZARA_GRAPHICS_API SkeletalModelParameters : ModelParameters { bool loadAnimation = true; AnimationParams animation; diff --git a/include/Nazara/Utility/Animation.hpp b/include/Nazara/Utility/Animation.hpp index 162d86e35..e196a0f77 100644 --- a/include/Nazara/Utility/Animation.hpp +++ b/include/Nazara/Utility/Animation.hpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -23,7 +24,7 @@ namespace Nz { - struct NAZARA_UTILITY_API AnimationParams + struct NAZARA_UTILITY_API AnimationParams : ResourceParameters { // La frame de fin à charger unsigned int endFrame = std::numeric_limits::max(); diff --git a/include/Nazara/Utility/Font.hpp b/include/Nazara/Utility/Font.hpp index ef801d5a2..58ff341b5 100644 --- a/include/Nazara/Utility/Font.hpp +++ b/include/Nazara/Utility/Font.hpp @@ -14,13 +14,14 @@ #include #include #include +#include #include #include #include namespace Nz { - struct NAZARA_UTILITY_API FontParams + struct NAZARA_UTILITY_API FontParams : ResourceParameters { bool IsValid() const; }; diff --git a/include/Nazara/Utility/Image.hpp b/include/Nazara/Utility/Image.hpp index 5ef32f2e7..cefc606af 100644 --- a/include/Nazara/Utility/Image.hpp +++ b/include/Nazara/Utility/Image.hpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -26,7 +27,7 @@ namespace Nz { - struct NAZARA_UTILITY_API ImageParams + struct NAZARA_UTILITY_API ImageParams : ResourceParameters { // Le format dans lequel l'image doit être chargée (Undefined pour le format le plus proche de l'original) PixelFormatType loadFormat = PixelFormatType_Undefined; diff --git a/include/Nazara/Utility/Mesh.hpp b/include/Nazara/Utility/Mesh.hpp index 17857704a..433f50ab5 100644 --- a/include/Nazara/Utility/Mesh.hpp +++ b/include/Nazara/Utility/Mesh.hpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -24,7 +25,7 @@ namespace Nz { - struct NAZARA_UTILITY_API MeshParams + struct NAZARA_UTILITY_API MeshParams : ResourceParameters { MeshParams(); // Vérifie que le storage par défaut est supporté (software autrement) diff --git a/src/Nazara/Graphics/Formats/MeshLoader.cpp b/src/Nazara/Graphics/Formats/MeshLoader.cpp index bce371e51..af6280ef6 100644 --- a/src/Nazara/Graphics/Formats/MeshLoader.cpp +++ b/src/Nazara/Graphics/Formats/MeshLoader.cpp @@ -17,7 +17,10 @@ namespace Nz Ternary CheckStatic(Stream& stream, const ModelParameters& parameters) { NazaraUnused(stream); - NazaraUnused(parameters); + + bool skip; + if (parameters.custom.GetBooleanParameter("NativeStaticMeshLoader_Skip", &skip) && skip) + return Ternary_False; return Ternary_Unknown; } @@ -66,7 +69,10 @@ namespace Nz Ternary CheckAnimated(Stream& stream, const SkeletalModelParameters& parameters) { NazaraUnused(stream); - NazaraUnused(parameters); + + bool skip; + if (parameters.custom.GetBooleanParameter("NativeAnimatedMeshLoader_Skip", &skip) && skip) + return Ternary_False; return Ternary_Unknown; } diff --git a/src/Nazara/Graphics/Formats/OBJLoader.cpp b/src/Nazara/Graphics/Formats/OBJLoader.cpp index a81acae1b..af4378f15 100644 --- a/src/Nazara/Graphics/Formats/OBJLoader.cpp +++ b/src/Nazara/Graphics/Formats/OBJLoader.cpp @@ -33,7 +33,10 @@ namespace Nz Ternary Check(Stream& stream, const ModelParameters& parameters) { NazaraUnused(stream); - NazaraUnused(parameters); + + bool skip; + if (parameters.custom.GetBooleanParameter("NativeOBJLoader_Skip", &skip) && skip) + return Ternary_False; return Ternary_Unknown; } diff --git a/src/Nazara/Graphics/Formats/TextureLoader.cpp b/src/Nazara/Graphics/Formats/TextureLoader.cpp index 2f8dc2910..9c1de9182 100644 --- a/src/Nazara/Graphics/Formats/TextureLoader.cpp +++ b/src/Nazara/Graphics/Formats/TextureLoader.cpp @@ -15,7 +15,10 @@ namespace Nz Ternary Check(Stream& stream, const MaterialParams& parameters) { NazaraUnused(stream); - NazaraUnused(parameters); + + bool skip; + if (parameters.custom.GetBooleanParameter("NativeTextureLoader_Skip", &skip) && skip) + return Ternary_False; return Ternary_Unknown; } diff --git a/src/Nazara/Utility/Formats/DDSLoader.cpp b/src/Nazara/Utility/Formats/DDSLoader.cpp index b38ed4470..f60e13cb9 100644 --- a/src/Nazara/Utility/Formats/DDSLoader.cpp +++ b/src/Nazara/Utility/Formats/DDSLoader.cpp @@ -22,7 +22,9 @@ namespace Nz Ternary Check(Stream& stream, const ImageParams& parameters) { - NazaraUnused(parameters); + bool skip; + if (parameters.custom.GetBooleanParameter("NativeDDSLoader_Skip", &skip) && skip) + return Ternary_False; UInt32 magic; if (stream.Read(&magic, sizeof(UInt32)) == sizeof(UInt32)) diff --git a/src/Nazara/Utility/Formats/FreeTypeLoader.cpp b/src/Nazara/Utility/Formats/FreeTypeLoader.cpp index 2f5c2ef8f..4fcc66c9c 100644 --- a/src/Nazara/Utility/Formats/FreeTypeLoader.cpp +++ b/src/Nazara/Utility/Formats/FreeTypeLoader.cpp @@ -348,7 +348,9 @@ namespace Nz Ternary Check(Stream& stream, const FontParams& parameters) { - NazaraUnused(parameters); + bool skip; + if (parameters.custom.GetBooleanParameter("NativeFreeTypeLoader_Skip", &skip) && skip) + return Ternary_False; FreeTypeStream face; face.SetStream(stream); diff --git a/src/Nazara/Utility/Formats/MD2Loader.cpp b/src/Nazara/Utility/Formats/MD2Loader.cpp index ea685cc6f..ee37e51c8 100644 --- a/src/Nazara/Utility/Formats/MD2Loader.cpp +++ b/src/Nazara/Utility/Formats/MD2Loader.cpp @@ -28,7 +28,9 @@ namespace Nz Ternary Check(Stream& stream, const MeshParams& parameters) { - NazaraUnused(parameters); + bool skip; + if (parameters.custom.GetBooleanParameter("NativeMD2Loader_Skip", &skip) && skip) + return Ternary_False; UInt32 magic[2]; if (stream.Read(&magic[0], 2*sizeof(UInt32)) == 2*sizeof(UInt32)) diff --git a/src/Nazara/Utility/Formats/MD5AnimLoader.cpp b/src/Nazara/Utility/Formats/MD5AnimLoader.cpp index 1950037c1..3a03a5be5 100644 --- a/src/Nazara/Utility/Formats/MD5AnimLoader.cpp +++ b/src/Nazara/Utility/Formats/MD5AnimLoader.cpp @@ -17,7 +17,9 @@ namespace Nz Ternary Check(Stream& stream, const AnimationParams& parameters) { - NazaraUnused(parameters); + bool skip; + if (parameters.custom.GetBooleanParameter("NativeMD5AnimLoader_Skip", &skip) && skip) + return Ternary_False; MD5AnimParser parser(stream); return parser.Check(); diff --git a/src/Nazara/Utility/Formats/MD5MeshLoader.cpp b/src/Nazara/Utility/Formats/MD5MeshLoader.cpp index 9bf16f055..c17cd9176 100644 --- a/src/Nazara/Utility/Formats/MD5MeshLoader.cpp +++ b/src/Nazara/Utility/Formats/MD5MeshLoader.cpp @@ -22,7 +22,9 @@ namespace Nz Ternary Check(Stream& stream, const MeshParams& parameters) { - NazaraUnused(parameters); + bool skip; + if (parameters.custom.GetBooleanParameter("NativeMD5MeshLoader_Skip", &skip) && skip) + return Ternary_False; MD5MeshParser parser(stream); return parser.Check(); diff --git a/src/Nazara/Utility/Formats/PCXLoader.cpp b/src/Nazara/Utility/Formats/PCXLoader.cpp index c337409bf..cfc487e49 100644 --- a/src/Nazara/Utility/Formats/PCXLoader.cpp +++ b/src/Nazara/Utility/Formats/PCXLoader.cpp @@ -47,7 +47,9 @@ namespace Nz Ternary Check(Stream& stream, const ImageParams& parameters) { - NazaraUnused(parameters); + bool skip; + if (parameters.custom.GetBooleanParameter("NativePCXLoader_Skip", &skip) && skip) + return Ternary_False; UInt8 manufacturer; if (stream.Read(&manufacturer, 1) == 1) diff --git a/src/Nazara/Utility/Formats/STBLoader.cpp b/src/Nazara/Utility/Formats/STBLoader.cpp index 6954bd2b3..183416045 100644 --- a/src/Nazara/Utility/Formats/STBLoader.cpp +++ b/src/Nazara/Utility/Formats/STBLoader.cpp @@ -45,7 +45,9 @@ namespace Nz Ternary Check(Stream& stream, const ImageParams& parameters) { - NazaraUnused(parameters); + bool skip; + if (parameters.custom.GetBooleanParameter("NativeSTBLoader_Skip", &skip) && skip) + return Ternary_False; int width, height, bpp; if (stbi_info_from_callbacks(&callbacks, &stream, &width, &height, &bpp))