Skip to content

Commit

Permalink
perf(BitPacking): using quaternion compression by default (#957)
Browse files Browse the repository at this point in the history
BREAKING CHANGE: Pack extension methods renamed to WriteQuaternion and ReadQuaternion
  • Loading branch information
James-Frowen committed Oct 8, 2021
1 parent f2acee3 commit e9fedf1
Show file tree
Hide file tree
Showing 5 changed files with 10 additions and 33 deletions.
6 changes: 2 additions & 4 deletions Assets/Mirage/Runtime/Serialization/CompressedExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,8 @@ public static class CompressedExtensions
/// </summary>
/// <param name="writer"></param>
/// <param name="rotation"></param>
[WeaverIgnore]
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void PackRotation(this NetworkWriter writer, Quaternion rotation)
public static void WriteQuaternion(this NetworkWriter writer, Quaternion rotation)
{
QuaternionPacker.Default9.Pack(writer, rotation);
}
Expand All @@ -22,9 +21,8 @@ public static void PackRotation(this NetworkWriter writer, Quaternion rotation)
/// </summary>
/// <param name="reader"></param>
/// <returns></returns>
[WeaverIgnore]
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Quaternion UnpackRotation(this NetworkReader reader)
public static Quaternion ReadQuaternion(this NetworkReader reader)
{
return QuaternionPacker.Default9.Unpack(reader);
}
Expand Down
9 changes: 0 additions & 9 deletions Assets/Mirage/Runtime/Serialization/UnityTypesExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,14 +54,6 @@ public static void WriteColor32(this NetworkWriter writer, Color32 value)
writer.WriteByte(value.a);
}

public static void WriteQuaternion(this NetworkWriter writer, Quaternion value)
{
writer.WriteSingle(value.x);
writer.WriteSingle(value.y);
writer.WriteSingle(value.z);
writer.WriteSingle(value.w);
}

public static void WriteRect(this NetworkWriter writer, Rect value)
{
writer.WriteSingle(value.xMin);
Expand Down Expand Up @@ -110,7 +102,6 @@ public static void WriteMatrix4X4(this NetworkWriter writer, Matrix4x4 value)
public static Vector3Int ReadVector3Int(this NetworkReader reader) => new Vector3Int(reader.ReadPackedInt32(), reader.ReadPackedInt32(), reader.ReadPackedInt32());
public static Color ReadColor(this NetworkReader reader) => new Color(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
public static Color32 ReadColor32(this NetworkReader reader) => new Color32(reader.ReadByte(), reader.ReadByte(), reader.ReadByte(), reader.ReadByte());
public static Quaternion ReadQuaternion(this NetworkReader reader) => new Quaternion(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
public static Rect ReadRect(this NetworkReader reader) => new Rect(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
public static Plane ReadPlane(this NetworkReader reader) => new Plane(reader.ReadVector3(), reader.ReadSingle());
public static Ray ReadRay(this NetworkReader reader) => new Ray(reader.ReadVector3(), reader.ReadVector3());
Expand Down
8 changes: 6 additions & 2 deletions Assets/Tests/Editor/NetworkTransformTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,19 @@ public void TearDown()
public void SerializeIntoWriterTest()
{
var position = new Vector3(1, 2, 3);
var rotation = new Quaternion(0.1f, 0.2f, 0.3f, 0.4f);
Quaternion rotation = new Quaternion(0.1f, 0.2f, 0.3f, 0.4f).normalized;
var scale = new Vector3(0.5f, 0.6f, 0.7f);

NetworkTransformBase.SerializeIntoWriter(writer, position, rotation, scale);

reader.Reset(writer.ToArraySegment());

Assert.That(reader.ReadVector3(), Is.EqualTo(position));
Assert.That(reader.ReadQuaternion(), Is.EqualTo(rotation));
Quaternion actual = reader.ReadQuaternion();
Assert.That(actual.x, Is.EqualTo(rotation.x).Within(0.01f));
Assert.That(actual.y, Is.EqualTo(rotation.y).Within(0.01f));
Assert.That(actual.z, Is.EqualTo(rotation.z).Within(0.01f));
Assert.That(actual.w, Is.EqualTo(rotation.w).Within(0.01f));
Assert.That(reader.ReadVector3(), Is.EqualTo(scale));
}
}
Expand Down
16 changes: 0 additions & 16 deletions Assets/Tests/Runtime/Serialization/NetworkWriterTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -312,22 +312,6 @@ public void TestColor32(Color32 input)
Assert.That(output, Is.EqualTo(input));
}

static readonly Quaternion[] quaternions = {
Quaternion.identity,
default,
Quaternion.LookRotation(new Vector3(0.3f,0.4f,0.5f)),
Quaternion.Euler(45f,56f,Mathf.PI)
};

[Test, TestCaseSource(nameof(quaternions))]
public void TestQuaternion(Quaternion input)
{
writer.WriteQuaternion(input);
reader.Reset(writer.ToArraySegment());
Quaternion output = reader.ReadQuaternion();
Assert.That(output, Is.EqualTo(input));
}

static readonly Rect[] rects = {
Rect.zero,
new Rect(1004.1f,2.001f,4636,400f),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ public class CompressionExtensionTests : PackerTestBase
[Test]
public void PackRotationUsesDefault9()
{
writer.PackRotation(Quaternion.identity);
writer.WriteQuaternion(Quaternion.identity);
Assert.That(writer.BitPosition, Is.EqualTo(29));
}

Expand All @@ -20,7 +20,7 @@ public void UnpackRotationUsesDefault9()
writer.Write(3, 2);
NetworkReader reader = GetReader();
Assert.That(reader.BitPosition, Is.EqualTo(0), "Check it starts at 0");
Quaternion value = reader.UnpackRotation();
Quaternion value = reader.ReadQuaternion();
Assert.That(reader.BitPosition, Is.EqualTo(29));
Assert.That(value, Is.EqualTo(Quaternion.identity));
}
Expand Down

0 comments on commit e9fedf1

Please sign in to comment.