From 8c3e8956ca4e0e8a35acee4ae652381b13717a51 Mon Sep 17 00:00:00 2001 From: SweetId <2630750+SweetId@users.noreply.github.com> Date: Sun, 10 Mar 2024 16:39:16 -0400 Subject: [PATCH] [Serialization] Add support for more types --- include/Nazara/Audio/SoundStream.hpp | 3 ++ include/Nazara/Core/Image.hpp | 4 ++ include/Nazara/Core/Mesh.hpp | 5 +++ include/Nazara/Core/ResourceParameters.hpp | 4 ++ include/Nazara/Renderer/Texture.hpp | 4 ++ src/Nazara/Audio/SoundStream.cpp | 14 +++++++ src/Nazara/Core/Image.cpp | 16 ++++++++ src/Nazara/Core/Mesh.cpp | 45 ++++++++++++++++++++++ src/Nazara/Core/ResourceParameters.cpp | 14 +++++++ src/Nazara/Renderer/Texture.cpp | 22 +++++++++++ 10 files changed, 131 insertions(+) diff --git a/include/Nazara/Audio/SoundStream.hpp b/include/Nazara/Audio/SoundStream.hpp index 1e98293b8..61b213f0c 100644 --- a/include/Nazara/Audio/SoundStream.hpp +++ b/include/Nazara/Audio/SoundStream.hpp @@ -25,6 +25,9 @@ namespace Nz bool IsValid() const; }; + NAZARA_CORE_API bool Serialize(SerializationContext& context, SoundStreamParams& params, TypeTag); + NAZARA_CORE_API bool Unserialize(SerializationContext& context, SoundStreamParams* params, TypeTag); + class Mutex; class SoundStream; diff --git a/include/Nazara/Core/Image.hpp b/include/Nazara/Core/Image.hpp index 9793f6af3..2e7784e70 100644 --- a/include/Nazara/Core/Image.hpp +++ b/include/Nazara/Core/Image.hpp @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -37,6 +38,9 @@ namespace Nz void Merge(const ImageParams& params); }; + NAZARA_CORE_API bool Serialize(SerializationContext& context, ImageParams& params, TypeTag); + NAZARA_CORE_API bool Unserialize(SerializationContext& context, ImageParams* params, TypeTag); + class Image; using ImageLibrary = ObjectLibrary; diff --git a/include/Nazara/Core/Mesh.hpp b/include/Nazara/Core/Mesh.hpp index e14453aa2..9c3be8317 100644 --- a/include/Nazara/Core/Mesh.hpp +++ b/include/Nazara/Core/Mesh.hpp @@ -27,6 +27,8 @@ namespace Nz { + struct SerializationContext; + struct NAZARA_CORE_API MeshParams : ResourceParameters { // How buffer will be allocated (by default in RAM) @@ -74,6 +76,9 @@ namespace Nz bool IsValid() const; }; + NAZARA_CORE_API bool Serialize(SerializationContext& context, const MeshParams& params, TypeTag); + NAZARA_CORE_API bool Unserialize(SerializationContext& context, MeshParams* params, TypeTag); + class Mesh; struct Primitive; class PrimitiveList; diff --git a/include/Nazara/Core/ResourceParameters.hpp b/include/Nazara/Core/ResourceParameters.hpp index c80753173..46ccf74bb 100644 --- a/include/Nazara/Core/ResourceParameters.hpp +++ b/include/Nazara/Core/ResourceParameters.hpp @@ -8,6 +8,7 @@ #define NAZARA_CORE_RESOURCEPARAMETERS_HPP #include +#include namespace Nz { @@ -17,6 +18,9 @@ namespace Nz ParameterList custom; }; + + NAZARA_CORE_API bool Serialize(SerializationContext& context, ResourceParameters& params, TypeTag); + NAZARA_CORE_API bool Unserialize(SerializationContext& context, ResourceParameters* params, TypeTag); } #endif // NAZARA_CORE_RESOURCEPARAMETERS_HPP diff --git a/include/Nazara/Renderer/Texture.hpp b/include/Nazara/Renderer/Texture.hpp index 117e61a9e..6963f1cff 100644 --- a/include/Nazara/Renderer/Texture.hpp +++ b/include/Nazara/Renderer/Texture.hpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -53,6 +54,9 @@ namespace Nz void Merge(const TextureParams& params); }; + NAZARA_RENDERER_API bool Serialize(SerializationContext& context, TextureParams& params, TypeTag); + NAZARA_RENDERER_API bool Unserialize(SerializationContext& context, TextureParams* params, TypeTag); + class Texture; using TextureLibrary = ObjectLibrary; diff --git a/src/Nazara/Audio/SoundStream.cpp b/src/Nazara/Audio/SoundStream.cpp index fadb6e073..b3effd0ca 100644 --- a/src/Nazara/Audio/SoundStream.cpp +++ b/src/Nazara/Audio/SoundStream.cpp @@ -7,6 +7,20 @@ namespace Nz { + bool Serialize(SerializationContext& context, SoundStreamParams& params, TypeTag) + { + Serialize(context, params, TypeTag()); + Serialize(context, "forceMono", params.forceMono); + return true; + } + + bool Unserialize(SerializationContext& context, SoundStreamParams* params, TypeTag) + { + Unserialize(context, params, TypeTag()); + Unserialize(context, "forceMono", ¶ms->forceMono); + return true; + } + bool SoundStreamParams::IsValid() const { return true; diff --git a/src/Nazara/Core/Image.cpp b/src/Nazara/Core/Image.cpp index f546752c8..8c5abad81 100644 --- a/src/Nazara/Core/Image.cpp +++ b/src/Nazara/Core/Image.cpp @@ -45,6 +45,22 @@ namespace Nz loadFormat = params.loadFormat; } + bool Serialize(SerializationContext& context, ImageParams& params, TypeTag) + { + Serialize(context, params, TypeTag()); + + Serialize(context, "loadFormat", params.loadFormat); + Serialize(context, "levelCount", params.levelCount); + return true; + } + + bool Unserialize(SerializationContext& context, ImageParams* params, TypeTag) + { + Unserialize(context, params, TypeTag()); + Unserialize(context, "loadFormat", ¶ms->loadFormat); + Unserialize(context, "levelCount", ¶ms->levelCount); + return true; + } Image::Image() : m_sharedImage(&emptyImage) diff --git a/src/Nazara/Core/Mesh.cpp b/src/Nazara/Core/Mesh.cpp index e00fbb0c3..0eba16cad 100644 --- a/src/Nazara/Core/Mesh.cpp +++ b/src/Nazara/Core/Mesh.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -39,6 +40,50 @@ namespace Nz return true; } + bool Serialize(SerializationContext& context, const MeshParams& params, TypeTag) + { + Serialize(context, "indexBufferFlags", params.indexBufferFlags); + Serialize(context, "vertexBufferFlags", params.vertexBufferFlags); + Serialize(context, "vertexOffset", params.vertexOffset); + + Nz::EulerAnglesf rot = params.vertexRotation; + Serialize(context, "vertexRotation", rot); + + Serialize(context, "vertexScale", params.vertexScale); + Serialize(context, "texCoordOffset", params.texCoordOffset); + Serialize(context, "texCoordScale", params.texCoordScale); + Serialize(context, "animated", params.animated); + Serialize(context, "center", params.center); + Serialize(context, "optimizeIndexBuffers", params.optimizeIndexBuffers); + + Serialize(context, "vertexDeclaration", VertexDeclaration::Find(params.vertexDeclaration)); + return true; + } + + bool Unserialize(SerializationContext& context, MeshParams* params, TypeTag) + { + Unserialize(context, "indexBufferFlags", ¶ms->indexBufferFlags); + Unserialize(context, "vertexBufferFlags", ¶ms->vertexBufferFlags); + Unserialize(context, "vertexOffset", ¶ms->vertexOffset); + + Nz::EulerAnglesf rot; + if (Unserialize(context, "vertexRotation", &rot)) + params->vertexRotation = rot; + + Unserialize(context, "vertexScale", ¶ms->vertexScale); + Unserialize(context, "texCoordOffset", ¶ms->texCoordOffset); + Unserialize(context, "texCoordScale", ¶ms->texCoordScale); + Unserialize(context, "animated", ¶ms->animated); + Unserialize(context, "center", ¶ms->center); + Unserialize(context, "optimizeIndexBuffers", ¶ms->optimizeIndexBuffers); + + VertexLayout layout; + if (Unserialize(context, "vertexDeclaration", &layout)) + params->vertexDeclaration = VertexDeclaration::Get(layout); + + return params->IsValid(); + } + void Mesh::AddSubMesh(std::shared_ptr subMesh) { diff --git a/src/Nazara/Core/ResourceParameters.cpp b/src/Nazara/Core/ResourceParameters.cpp index 433fc92e7..bead829b9 100644 --- a/src/Nazara/Core/ResourceParameters.cpp +++ b/src/Nazara/Core/ResourceParameters.cpp @@ -7,4 +7,18 @@ namespace Nz { ResourceParameters::~ResourceParameters() = default; + + bool Serialize(SerializationContext& context, ResourceParameters& params, TypeTag) + { + NazaraUnused(context); + NazaraUnused(params); + return true;// Serialize(context, "custom", descriptor.custom); + } + + bool Unserialize(SerializationContext& context, ResourceParameters* params, TypeTag) + { + NazaraUnused(context); + NazaraUnused(params); + return true; + } } diff --git a/src/Nazara/Renderer/Texture.cpp b/src/Nazara/Renderer/Texture.cpp index 2d1e52138..d27f503c7 100644 --- a/src/Nazara/Renderer/Texture.cpp +++ b/src/Nazara/Renderer/Texture.cpp @@ -9,6 +9,28 @@ namespace Nz { + bool Serialize(SerializationContext& context, TextureParams& params, TypeTag) + { + Serialize(context, params, TypeTag()); + + int v = int(params.usageFlags); + Serialize(context, "usageFlags", v); + Serialize(context, "buildMipmaps", params.buildMipmaps); + return true; + } + + bool Unserialize(SerializationContext& context, TextureParams* params, TypeTag) + { + Unserialize(context, params, TypeTag()); + + int usageFlags = 0; + if (Unserialize(context, "usageFlags", &usageFlags)) + params->usageFlags = usageFlags; + + Unserialize(context, "buildMipmaps", ¶ms->buildMipmaps); + return true; + } + Texture::~Texture() = default; bool TextureParams::IsValid() const