Optimize network transform replication

This commit is contained in:
Wojtek Figat
2024-10-15 11:24:10 +02:00
parent c202a639cf
commit ac832a0e81
3 changed files with 33 additions and 5 deletions

View File

@@ -3,6 +3,7 @@
#include "NetworkStream.h"
#include "INetworkSerializable.h"
#include "Engine/Core/Math/Quaternion.h"
#include "Engine/Core/Math/Transform.h"
// Quaternion quantized for optimized network data size.
struct NetworkQuaternion
@@ -151,6 +152,20 @@ void NetworkStream::Read(Quaternion& data)
NetworkQuaternion::Read(this, data);
}
void NetworkStream::Read(Transform& data)
{
struct NonQuantized
{
Vector3 Pos;
Float3 Scale;
};
NonQuantized nonQuantized;
ReadBytes(&nonQuantized, sizeof(nonQuantized));
NetworkQuaternion::Read(this, data.Orientation);
data.Translation = nonQuantized.Pos;
data.Scale = nonQuantized.Scale;
}
void NetworkStream::Write(INetworkSerializable& obj)
{
obj.Serialize(this);
@@ -166,6 +181,19 @@ void NetworkStream::Write(const Quaternion& data)
NetworkQuaternion::Write(this, data);
}
void NetworkStream::Write(const Transform& data)
{
struct NonQuantized
{
Vector3 Pos;
Float3 Scale;
};
// TODO: quantize transform (at least scale)
NonQuantized nonQuantized = { data.Translation, data.Scale };
WriteBytes(&nonQuantized, sizeof(nonQuantized));
NetworkQuaternion::Write(this, data.Orientation);
}
void NetworkStream::Flush()
{
// Nothing to do