Renderer/ShaderAst: Add serialization

This commit is contained in:
Lynix
2020-06-17 20:09:21 +02:00
parent 0ff10bf1e2
commit 736ca1c409
7 changed files with 285 additions and 118 deletions

View File

@@ -5,7 +5,7 @@
#include <Nazara/Renderer/ShaderSerializer.hpp>
#include <Nazara/Renderer/Debug.hpp>
namespace Nz::ShaderNodes
namespace Nz
{
template<typename T>
void ShaderSerializerBase::Container(T& container)
@@ -36,12 +36,30 @@ namespace Nz::ShaderNodes
enumVal = static_cast<T>(value);
}
template<typename T>
void ShaderSerializerBase::OptVal(std::optional<T>& optVal)
{
bool isWriting = IsWriting();
bool hasValue;
if (isWriting)
hasValue = optVal.has_value();
Value(hasValue);
if (!isWriting && hasValue)
optVal.emplace();
if (optVal.has_value())
Value(optVal.value());
}
template<typename T>
void ShaderSerializerBase::Node(std::shared_ptr<T>& node)
{
bool isWriting = IsWriting();
NodePtr value;
ShaderNodes::NodePtr value;
if (isWriting)
value = node;
@@ -55,7 +73,7 @@ namespace Nz::ShaderNodes
{
bool isWriting = IsWriting();
VariablePtr value;
ShaderNodes::VariablePtr value;
if (isWriting)
value = var;