From 15740faf9fe9fe4be08965098bbf2947e096aeeb Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 14 Aug 2019 22:50:43 +0800 Subject: +Unity Runtime code --- Runtime/ClusterRenderer/ClusterTransfer.cpp | 93 +++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 Runtime/ClusterRenderer/ClusterTransfer.cpp (limited to 'Runtime/ClusterRenderer/ClusterTransfer.cpp') diff --git a/Runtime/ClusterRenderer/ClusterTransfer.cpp b/Runtime/ClusterRenderer/ClusterTransfer.cpp new file mode 100644 index 0000000..40b6633 --- /dev/null +++ b/Runtime/ClusterRenderer/ClusterTransfer.cpp @@ -0,0 +1,93 @@ +#include "UnityPrefix.h" +#if ENABLE_CLUSTER_SYNC +#include "ClusterTransfer.h" +#include "Runtime/Serialize/FileCache.h" +#include "Runtime/Serialize/CacheWrap.h" +#include "Runtime/Serialize/TransferFunctions/StreamedBinaryWrite.h" +#include "Runtime/Serialize/TransferFunctions/StreamedBinaryRead.h" +#include "Runtime/Input/InputManager.h" +#include "Runtime/Input/TimeManager.h" +#include "Runtime/Dynamics/PhysicsManager.h" + +#ifdef DEBUG +#include "Runtime/Dynamics/Rigidbody.h" +#include "Runtime/Graphics/Transform.h" +#endif + +template +void TransferManagerStates (TransferFunc& transfer) +{ + // TODO: use macro incase manager is not present + GetInputManager().ClusterTransfer(transfer); + GetTimeManager().ClusterTransfer(transfer); + GetPhysicsManager().ClusterTransfer(transfer); +} + +void ClusterTransfer::TransferToBuffer(dynamic_array& buffer) +{ + StreamedBinaryWrite writeStream; + CachedWriter& writeCache = writeStream.Init (0, BuildTargetSelection::NoTarget()); + MemoryCacheWriter memoryCache (buffer); + writeCache.InitWrite (memoryCache); + // transfer stuff + TransferManagerStates(writeStream); + // end of transfer + writeCache.CompleteWriting(); +} + +void ClusterTransfer::TransferFromBuffer(dynamic_array& buffer) +{ + // transfer setup + StreamedBinaryRead readStream; + CachedReader& readCache = readStream.Init (0); + MemoryCacheReader memoryCache (buffer); + readCache.InitRead (memoryCache, 0, buffer.size()); + // transfer stuff + TransferManagerStates(readStream); + // end of transfer + readCache.End(); +} + +#ifdef DEBUG +void ClusterTransfer::TransferToFile(int slaveId) +{ + // create the buffer + dynamic_array buffer(kMemTempAlloc); + + // create the stream + StreamedBinaryWrite writeStream; + CachedWriter& writeCache = writeStream.Init (0, BuildTargetSelection::NoTarget()); + MemoryCacheWriter memoryCache (buffer); + writeCache.InitWrite (memoryCache); + + // now write the data out to a file + for (int level=0;level