Renderer/ShaderSerialize: Use ByteStream instead of ByteArray

This commit is contained in:
Lynix 2020-06-18 20:03:56 +02:00
parent bc490a2fe5
commit 691de5b5c4
3 changed files with 14 additions and 19 deletions

View File

@ -67,7 +67,7 @@ namespace Nz
class NAZARA_RENDERER_API ShaderSerializer final : public ShaderSerializerBase
{
public:
inline ShaderSerializer(ByteArray& byteArray);
inline ShaderSerializer(ByteStream& stream);
~ShaderSerializer() = default;
void Serialize(const ShaderAst& shader);
@ -85,14 +85,13 @@ namespace Nz
void Value(UInt32& val) override;
void Variable(ShaderNodes::VariablePtr& var) override;
ByteArray& m_byteArray;
ByteStream m_stream;
ByteStream& m_stream;
};
class NAZARA_RENDERER_API ShaderUnserializer final : public ShaderSerializerBase
{
public:
ShaderUnserializer(const ByteArray& byteArray);
ShaderUnserializer(ByteStream& stream);
~ShaderUnserializer() = default;
ShaderAst Unserialize();
@ -109,12 +108,11 @@ namespace Nz
void Value(UInt32& val) override;
void Variable(ShaderNodes::VariablePtr& var) override;
const ByteArray& m_byteArray;
ByteStream m_stream;
ByteStream& m_stream;
};
NAZARA_RENDERER_API ByteArray SerializeShader(const ShaderAst& shader);
NAZARA_RENDERER_API ShaderAst UnserializeShader(const ByteArray& data);
NAZARA_RENDERER_API ShaderAst UnserializeShader(ByteStream& stream);
}
#include <Nazara/Renderer/ShaderSerializer.inl>

View File

@ -95,15 +95,13 @@ namespace Nz
val = static_cast<std::size_t>(value);
}
inline ShaderSerializer::ShaderSerializer(ByteArray& byteArray) :
m_byteArray(byteArray),
m_stream(&m_byteArray, OpenModeFlags(OpenMode_WriteOnly))
inline ShaderSerializer::ShaderSerializer(ByteStream& stream) :
m_stream(stream)
{
}
inline ShaderUnserializer::ShaderUnserializer(const ByteArray& byteArray) :
m_byteArray(byteArray),
m_stream(const_cast<ByteArray*>(&m_byteArray), OpenModeFlags(OpenMode_ReadOnly))
inline ShaderUnserializer::ShaderUnserializer(ByteStream& stream) :
m_stream(stream)
{
}
}

View File

@ -248,9 +248,6 @@ namespace Nz
void ShaderSerializer::Serialize(const ShaderAst& shader)
{
UInt32 magicNumber = s_magicNumber;
UInt32 version = s_currentVersion;
m_stream << s_magicNumber << s_currentVersion;
auto SerializeInputOutput = [&](auto& inout)
@ -558,15 +555,17 @@ namespace Nz
ByteArray SerializeShader(const ShaderAst& shader)
{
ByteArray byteArray;
ShaderSerializer serializer(byteArray);
ByteStream stream(&byteArray, OpenModeFlags(OpenMode_WriteOnly));
ShaderSerializer serializer(stream);
serializer.Serialize(shader);
return byteArray;
}
ShaderAst UnserializeShader(const ByteArray& data)
ShaderAst UnserializeShader(ByteStream& stream)
{
ShaderUnserializer unserializer(data);
ShaderUnserializer unserializer(stream);
return unserializer.Unserialize();
}
}