diff --git a/include/Nazara/Shader/ShaderAstSerializer.hpp b/include/Nazara/Shader/ShaderAstSerializer.hpp index 24088092e..ac03cc66d 100644 --- a/include/Nazara/Shader/ShaderAstSerializer.hpp +++ b/include/Nazara/Shader/ShaderAstSerializer.hpp @@ -17,8 +17,6 @@ namespace Nz { - static_assert(std::is_same_v || std::is_same_v); - class NAZARA_SHADER_API ShaderAstSerializerBase { public: @@ -70,6 +68,7 @@ namespace Nz virtual void Value(UInt16& val) = 0; virtual void Value(UInt32& val) = 0; virtual void Value(UInt64& val) = 0; + inline void SizeT(std::size_t& val); virtual void Variable(ShaderNodes::VariablePtr& var) = 0; template void Variable(std::shared_ptr& var); diff --git a/include/Nazara/Shader/ShaderAstSerializer.inl b/include/Nazara/Shader/ShaderAstSerializer.inl index f72af54fb..31882eeb7 100644 --- a/include/Nazara/Shader/ShaderAstSerializer.inl +++ b/include/Nazara/Shader/ShaderAstSerializer.inl @@ -69,7 +69,12 @@ namespace Nz optVal.emplace(); if (optVal.has_value()) - Value(optVal.value()); + { + if constexpr (std::is_same_v) + SizeT(optVal.value()); + else + Value(optVal.value()); + } } template @@ -86,6 +91,20 @@ namespace Nz node = std::static_pointer_cast(value); } + inline void ShaderAstSerializerBase::SizeT(std::size_t& val) + { + bool isWriting = IsWriting(); + + UInt32 fixedVal; + if (isWriting) + fixedVal = static_cast(val); + + Value(fixedVal); + + if (!isWriting) + val = static_cast(fixedVal); + } + template void ShaderAstSerializerBase::Variable(std::shared_ptr& var) { diff --git a/src/Nazara/Shader/ShaderAstSerializer.cpp b/src/Nazara/Shader/ShaderAstSerializer.cpp index ab6a4d474..4f1c214d2 100644 --- a/src/Nazara/Shader/ShaderAstSerializer.cpp +++ b/src/Nazara/Shader/ShaderAstSerializer.cpp @@ -137,7 +137,7 @@ namespace Nz Container(node.memberIndices); for (std::size_t& index : node.memberIndices) - Value(index); + SizeT(index); } void ShaderAstSerializerBase::Serialize(ShaderNodes::AssignOp& node)