[Serialization] Add support for more types

This commit is contained in:
SweetId 2024-03-10 16:39:16 -04:00
parent a147ef411a
commit 8c3e8956ca
10 changed files with 131 additions and 0 deletions

View File

@ -25,6 +25,9 @@ namespace Nz
bool IsValid() const;
};
NAZARA_CORE_API bool Serialize(SerializationContext& context, SoundStreamParams& params, TypeTag<SoundStreamParams>);
NAZARA_CORE_API bool Unserialize(SerializationContext& context, SoundStreamParams* params, TypeTag<SoundStreamParams>);
class Mutex;
class SoundStream;

View File

@ -17,6 +17,7 @@
#include <Nazara/Core/ResourceManager.hpp>
#include <Nazara/Core/ResourceParameters.hpp>
#include <Nazara/Core/ResourceSaver.hpp>
#include <Nazara/Core/Serialization.hpp>
#include <NazaraUtils/MovablePtr.hpp>
#include <NazaraUtils/Signal.hpp>
#include <atomic>
@ -37,6 +38,9 @@ namespace Nz
void Merge(const ImageParams& params);
};
NAZARA_CORE_API bool Serialize(SerializationContext& context, ImageParams& params, TypeTag<ImageParams>);
NAZARA_CORE_API bool Unserialize(SerializationContext& context, ImageParams* params, TypeTag<ImageParams>);
class Image;
using ImageLibrary = ObjectLibrary<Image>;

View File

@ -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<MeshParams>);
NAZARA_CORE_API bool Unserialize(SerializationContext& context, MeshParams* params, TypeTag<MeshParams>);
class Mesh;
struct Primitive;
class PrimitiveList;

View File

@ -8,6 +8,7 @@
#define NAZARA_CORE_RESOURCEPARAMETERS_HPP
#include <Nazara/Core/ParameterList.hpp>
#include <Nazara/Core/Serialization.hpp>
namespace Nz
{
@ -17,6 +18,9 @@ namespace Nz
ParameterList custom;
};
NAZARA_CORE_API bool Serialize(SerializationContext& context, ResourceParameters& params, TypeTag<ResourceParameters>);
NAZARA_CORE_API bool Unserialize(SerializationContext& context, ResourceParameters* params, TypeTag<ResourceParameters>);
}
#endif // NAZARA_CORE_RESOURCEPARAMETERS_HPP

View File

@ -13,6 +13,7 @@
#include <Nazara/Core/Resource.hpp>
#include <Nazara/Core/ResourceLoader.hpp>
#include <Nazara/Core/ResourceManager.hpp>
#include <Nazara/Core/Serialization.hpp>
#include <Nazara/Math/Vector3.hpp>
#include <Nazara/Renderer/Enums.hpp>
#include <Nazara/Renderer/Export.hpp>
@ -53,6 +54,9 @@ namespace Nz
void Merge(const TextureParams& params);
};
NAZARA_RENDERER_API bool Serialize(SerializationContext& context, TextureParams& params, TypeTag<TextureParams>);
NAZARA_RENDERER_API bool Unserialize(SerializationContext& context, TextureParams* params, TypeTag<TextureParams>);
class Texture;
using TextureLibrary = ObjectLibrary<Texture>;

View File

@ -7,6 +7,20 @@
namespace Nz
{
bool Serialize(SerializationContext& context, SoundStreamParams& params, TypeTag<SoundStreamParams>)
{
Serialize(context, params, TypeTag<ResourceParameters>());
Serialize(context, "forceMono", params.forceMono);
return true;
}
bool Unserialize(SerializationContext& context, SoundStreamParams* params, TypeTag<SoundStreamParams>)
{
Unserialize(context, params, TypeTag<ResourceParameters>());
Unserialize(context, "forceMono", &params->forceMono);
return true;
}
bool SoundStreamParams::IsValid() const
{
return true;

View File

@ -45,6 +45,22 @@ namespace Nz
loadFormat = params.loadFormat;
}
bool Serialize(SerializationContext& context, ImageParams& params, TypeTag<ImageParams>)
{
Serialize(context, params, TypeTag<ResourceParameters>());
Serialize(context, "loadFormat", params.loadFormat);
Serialize(context, "levelCount", params.levelCount);
return true;
}
bool Unserialize(SerializationContext& context, ImageParams* params, TypeTag<ImageParams>)
{
Unserialize(context, params, TypeTag<ResourceParameters>());
Unserialize(context, "loadFormat", &params->loadFormat);
Unserialize(context, "levelCount", &params->levelCount);
return true;
}
Image::Image() :
m_sharedImage(&emptyImage)

View File

@ -16,6 +16,7 @@
#include <Nazara/Core/StringExt.hpp>
#include <Nazara/Core/SubMesh.hpp>
#include <Nazara/Core/VertexMapper.hpp>
#include <Nazara/Core/Serialization.hpp>
#include <limits>
#include <memory>
#include <unordered_map>
@ -39,6 +40,50 @@ namespace Nz
return true;
}
bool Serialize(SerializationContext& context, const MeshParams& params, TypeTag<MeshParams>)
{
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<MeshParams>)
{
Unserialize(context, "indexBufferFlags", &params->indexBufferFlags);
Unserialize(context, "vertexBufferFlags", &params->vertexBufferFlags);
Unserialize(context, "vertexOffset", &params->vertexOffset);
Nz::EulerAnglesf rot;
if (Unserialize(context, "vertexRotation", &rot))
params->vertexRotation = rot;
Unserialize(context, "vertexScale", &params->vertexScale);
Unserialize(context, "texCoordOffset", &params->texCoordOffset);
Unserialize(context, "texCoordScale", &params->texCoordScale);
Unserialize(context, "animated", &params->animated);
Unserialize(context, "center", &params->center);
Unserialize(context, "optimizeIndexBuffers", &params->optimizeIndexBuffers);
VertexLayout layout;
if (Unserialize(context, "vertexDeclaration", &layout))
params->vertexDeclaration = VertexDeclaration::Get(layout);
return params->IsValid();
}
void Mesh::AddSubMesh(std::shared_ptr<SubMesh> subMesh)
{

View File

@ -7,4 +7,18 @@
namespace Nz
{
ResourceParameters::~ResourceParameters() = default;
bool Serialize(SerializationContext& context, ResourceParameters& params, TypeTag<ResourceParameters>)
{
NazaraUnused(context);
NazaraUnused(params);
return true;// Serialize(context, "custom", descriptor.custom);
}
bool Unserialize(SerializationContext& context, ResourceParameters* params, TypeTag<ResourceParameters>)
{
NazaraUnused(context);
NazaraUnused(params);
return true;
}
}

View File

@ -9,6 +9,28 @@
namespace Nz
{
bool Serialize(SerializationContext& context, TextureParams& params, TypeTag<TextureParams>)
{
Serialize(context, params, TypeTag<ImageParams>());
int v = int(params.usageFlags);
Serialize(context, "usageFlags", v);
Serialize(context, "buildMipmaps", params.buildMipmaps);
return true;
}
bool Unserialize(SerializationContext& context, TextureParams* params, TypeTag<TextureParams>)
{
Unserialize(context, params, TypeTag<ImageParams>());
int usageFlags = 0;
if (Unserialize(context, "usageFlags", &usageFlags))
params->usageFlags = usageFlags;
Unserialize(context, "buildMipmaps", &params->buildMipmaps);
return true;
}
Texture::~Texture() = default;
bool TextureParams::IsValid() const