From 2bb47f0794d136e388bfaa103e6ca667445da8cf Mon Sep 17 00:00:00 2001 From: Martin Evans Date: Fri, 28 Dec 2012 18:38:24 +0000 Subject: [PATCH] Enabled NCrunch for Myre.Testing and Added a tes project to Myre.Testing Added depth sorting for model instances and render batches Signed-off-by: Martin Evans --- .../(360) Myre.Debugging.UI.ncrunchproject | 20 +++++ .../(360) Myre.Debugging.ncrunchproject | 20 +++++ .../(360) Myre.Entities.ncrunchproject | 20 +++++ Myre/Myre.Graphics/Geometry/ModelInstance.cs | 55 ++++++++++++- .../(x86) Myre.Physics2D.ncrunchproject | 19 +++++ .../(x86) Myre.Serialisation.ncrunchproject | 20 +++++ .../(360) Myre.StateManagement.ncrunchproject | 20 +++++ Myre/Myre.UI/(360) Myre.UI.ncrunchproject | 20 +++++ Myre/Myre/(360) Myre.ncrunchproject | 20 +++++ .../Myre.Serialisation.Tests.ncrunchproject | 20 +++++ Testing/Myre.Testing.ncrunchsolution | 7 +- Testing/Myre.Testing.sln | 20 +++++ Testing/Myre.Tests/Myre.Tests.csproj | 77 ++++++++++++++++++ Testing/Myre.Tests/Myre.Tests.ncrunchproject | 20 +++++ Testing/Myre.Tests/Properties/AssemblyInfo.cs | 35 ++++++++ Testing/Myre.Tests/UnitTest1.cs | 22 +++++ ...gnTimeResolveAssemblyReferencesInput.cache | Bin 0 -> 5844 bytes .../Myre.Testing.crunchsolution.cache | Bin 0 -> 313565 bytes 18 files changed, 410 insertions(+), 5 deletions(-) create mode 100644 Myre/Myre.Debugging.UI/(360) Myre.Debugging.UI.ncrunchproject create mode 100644 Myre/Myre.Debugging/(360) Myre.Debugging.ncrunchproject create mode 100644 Myre/Myre.Entities/(360) Myre.Entities.ncrunchproject create mode 100644 Myre/Myre.Physics2D/(x86) Myre.Physics2D.ncrunchproject create mode 100644 Myre/Myre.Serialisation/(x86) Myre.Serialisation.ncrunchproject create mode 100644 Myre/Myre.StateManagement/(360) Myre.StateManagement.ncrunchproject create mode 100644 Myre/Myre.UI/(360) Myre.UI.ncrunchproject create mode 100644 Myre/Myre/(360) Myre.ncrunchproject create mode 100644 Testing/Myre.Serialisation.Tests/Myre.Serialisation.Tests.ncrunchproject create mode 100644 Testing/Myre.Tests/Myre.Tests.csproj create mode 100644 Testing/Myre.Tests/Myre.Tests.ncrunchproject create mode 100644 Testing/Myre.Tests/Properties/AssemblyInfo.cs create mode 100644 Testing/Myre.Tests/UnitTest1.cs create mode 100644 Testing/Myre.Tests/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache create mode 100644 Testing/_NCrunch_Myre.Testing/Myre.Testing.crunchsolution.cache diff --git a/Myre/Myre.Debugging.UI/(360) Myre.Debugging.UI.ncrunchproject b/Myre/Myre.Debugging.UI/(360) Myre.Debugging.UI.ncrunchproject new file mode 100644 index 00000000..575717ac --- /dev/null +++ b/Myre/Myre.Debugging.UI/(360) Myre.Debugging.UI.ncrunchproject @@ -0,0 +1,20 @@ + + false + false + false + true + false + false + false + false + true + true + false + true + true + 60000 + + + + AutoDetect + \ No newline at end of file diff --git a/Myre/Myre.Debugging/(360) Myre.Debugging.ncrunchproject b/Myre/Myre.Debugging/(360) Myre.Debugging.ncrunchproject new file mode 100644 index 00000000..575717ac --- /dev/null +++ b/Myre/Myre.Debugging/(360) Myre.Debugging.ncrunchproject @@ -0,0 +1,20 @@ + + false + false + false + true + false + false + false + false + true + true + false + true + true + 60000 + + + + AutoDetect + \ No newline at end of file diff --git a/Myre/Myre.Entities/(360) Myre.Entities.ncrunchproject b/Myre/Myre.Entities/(360) Myre.Entities.ncrunchproject new file mode 100644 index 00000000..575717ac --- /dev/null +++ b/Myre/Myre.Entities/(360) Myre.Entities.ncrunchproject @@ -0,0 +1,20 @@ + + false + false + false + true + false + false + false + false + true + true + false + true + true + 60000 + + + + AutoDetect + \ No newline at end of file diff --git a/Myre/Myre.Graphics/Geometry/ModelInstance.cs b/Myre/Myre.Graphics/Geometry/ModelInstance.cs index e5ce4a15..08d4da02 100644 --- a/Myre/Myre.Graphics/Geometry/ModelInstance.cs +++ b/Myre/Myre.Graphics/Geometry/ModelInstance.cs @@ -66,6 +66,8 @@ class MeshInstance public BoundingSphere Bounds { get; private set; } + public Matrix WorldView; + public void UpdateBounds() { Bounds = Mesh.BoundingSphere.Transform(Instance.Transform); @@ -165,6 +167,11 @@ public void Draw(string phase, BoxedValueStore metadata) foreach (var item in buffer) item.IsVisible = true & !item.Instance.IsInvisible; + var view = metadata.Get("view"); + CalculateWorldViews(meshes, ref view.Value); //Calculate WorldView for all mesh instances + + DepthSortMeshes(meshes); //Sort batches by first item in batch + foreach (var mesh in meshes) { foreach (var instance in mesh.Instances) @@ -185,6 +192,32 @@ public void Draw(string phase, BoxedValueStore metadata) buffer.Clear(); } + private void DepthSortMeshes(List meshes) + { + meshes.Sort(RenderDataComparator); + } + + private int RenderDataComparator(MeshRenderData a, MeshRenderData b) + { + if (a.Instances.Count > 0 && b.Instances.Count > 0) + return CompareWorldViews(ref a.Instances[0].WorldView, ref b.Instances[0].WorldView); + return a.Instances.Count.CompareTo(b.Instances.Count); + } + + private void CalculateWorldViews(List batches, ref Matrix view) + { + for (int b = 0; b < batches.Count; b++) + { + var instances = batches[b].Instances; + for (int i = 0; i < instances.Count; i++) + { + var instance = instances[i]; + Matrix world = instance.Instance.Transform; + Matrix.Multiply(ref world, ref view, out instance.WorldView); + } + } + } + private void QueryVisible(BoundingVolume volume, List instances) { cullableBuffer.Clear(); @@ -212,11 +245,12 @@ private void DrawMesh(MeshRenderData data, BoxedValueStore metadata) device.Indices = mesh.IndexBuffer; var world = metadata.Get("world"); - var view = metadata.Get("view"); var projection = metadata.Get("projection"); var worldView = metadata.Get("worldview"); var worldViewProjection = metadata.Get("worldviewprojection"); + DepthSortInstances(visibleInstances); + int maxPrimitives = device.GraphicsProfile == GraphicsProfile.HiDef ? 1048575 : 65535; for (int i = 0; i < visibleInstances.Count; i++) @@ -224,7 +258,7 @@ private void DrawMesh(MeshRenderData data, BoxedValueStore metadata) var instance = visibleInstances[i]; world.Value = instance.Instance.Transform; - Matrix.Multiply(ref world.Value, ref view.Value, out worldView.Value); + worldView.Value = instance.WorldView; Matrix.Multiply(ref worldView.Value, ref projection.Value, out worldViewProjection.Value); foreach (var pass in data.Material.Begin(metadata)) @@ -255,6 +289,23 @@ private void DrawMesh(MeshRenderData data, BoxedValueStore metadata) } } + private void DepthSortInstances(List instances) + { + if (instances.Count > 1) + instances.Sort(InstanceComparator); + } + + private int InstanceComparator(MeshInstance a, MeshInstance b) + { + return CompareWorldViews(ref a.WorldView, ref b.WorldView); + } + + public static int CompareWorldViews(ref Matrix worldViewA, ref Matrix worldViewB) + { + //Negated, because XNA uses a negative Z space + return -worldViewA.Translation.Z.CompareTo(worldViewB.Translation.Z); + } + private List GetInstanceList(Mesh mesh) { List value; diff --git a/Myre/Myre.Physics2D/(x86) Myre.Physics2D.ncrunchproject b/Myre/Myre.Physics2D/(x86) Myre.Physics2D.ncrunchproject new file mode 100644 index 00000000..8641d361 --- /dev/null +++ b/Myre/Myre.Physics2D/(x86) Myre.Physics2D.ncrunchproject @@ -0,0 +1,19 @@ + + false + false + false + true + false + false + false + false + true + true + false + true + true + 60000 + + + AutoDetect + \ No newline at end of file diff --git a/Myre/Myre.Serialisation/(x86) Myre.Serialisation.ncrunchproject b/Myre/Myre.Serialisation/(x86) Myre.Serialisation.ncrunchproject new file mode 100644 index 00000000..575717ac --- /dev/null +++ b/Myre/Myre.Serialisation/(x86) Myre.Serialisation.ncrunchproject @@ -0,0 +1,20 @@ + + false + false + false + true + false + false + false + false + true + true + false + true + true + 60000 + + + + AutoDetect + \ No newline at end of file diff --git a/Myre/Myre.StateManagement/(360) Myre.StateManagement.ncrunchproject b/Myre/Myre.StateManagement/(360) Myre.StateManagement.ncrunchproject new file mode 100644 index 00000000..575717ac --- /dev/null +++ b/Myre/Myre.StateManagement/(360) Myre.StateManagement.ncrunchproject @@ -0,0 +1,20 @@ + + false + false + false + true + false + false + false + false + true + true + false + true + true + 60000 + + + + AutoDetect + \ No newline at end of file diff --git a/Myre/Myre.UI/(360) Myre.UI.ncrunchproject b/Myre/Myre.UI/(360) Myre.UI.ncrunchproject new file mode 100644 index 00000000..575717ac --- /dev/null +++ b/Myre/Myre.UI/(360) Myre.UI.ncrunchproject @@ -0,0 +1,20 @@ + + false + false + false + true + false + false + false + false + true + true + false + true + true + 60000 + + + + AutoDetect + \ No newline at end of file diff --git a/Myre/Myre/(360) Myre.ncrunchproject b/Myre/Myre/(360) Myre.ncrunchproject new file mode 100644 index 00000000..575717ac --- /dev/null +++ b/Myre/Myre/(360) Myre.ncrunchproject @@ -0,0 +1,20 @@ + + false + false + false + true + false + false + false + false + true + true + false + true + true + 60000 + + + + AutoDetect + \ No newline at end of file diff --git a/Testing/Myre.Serialisation.Tests/Myre.Serialisation.Tests.ncrunchproject b/Testing/Myre.Serialisation.Tests/Myre.Serialisation.Tests.ncrunchproject new file mode 100644 index 00000000..575717ac --- /dev/null +++ b/Testing/Myre.Serialisation.Tests/Myre.Serialisation.Tests.ncrunchproject @@ -0,0 +1,20 @@ + + false + false + false + true + false + false + false + false + true + true + false + true + true + 60000 + + + + AutoDetect + \ No newline at end of file diff --git a/Testing/Myre.Testing.ncrunchsolution b/Testing/Myre.Testing.ncrunchsolution index c1a8525e..f2e00196 100644 --- a/Testing/Myre.Testing.ncrunchsolution +++ b/Testing/Myre.Testing.ncrunchsolution @@ -1,7 +1,8 @@ - 0 - Default - false + 1 + True + true + true UseDynamicAnalysis UseStaticAnalysis UseStaticAnalysis diff --git a/Testing/Myre.Testing.sln b/Testing/Myre.Testing.sln index 5da45d78..0dd77644 100644 --- a/Testing/Myre.Testing.sln +++ b/Testing/Myre.Testing.sln @@ -50,6 +50,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Myre.Serialisation.Tests", EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "(x86) Myre.Serialisation", "..\Myre\Myre.Serialisation\(x86) Myre.Serialisation.csproj", "{73911D37-4250-40BD-8F15-20824D586319}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Myre.Tests", "Myre.Tests\Myre.Tests.csproj", "{523C09C2-B475-4CCC-9CCE-C19B54E4C829}" +EndProject Global GlobalSection(TestCaseManagementSettings) = postSolution CategoryFile = Myre.Testing.vsmdi @@ -450,6 +452,24 @@ Global {73911D37-4250-40BD-8F15-20824D586319}.Release|x86.ActiveCfg = Release|x86 {73911D37-4250-40BD-8F15-20824D586319}.Release|x86.Build.0 = Release|x86 {73911D37-4250-40BD-8F15-20824D586319}.Release|Xbox 360.ActiveCfg = Release|x86 + {523C09C2-B475-4CCC-9CCE-C19B54E4C829}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {523C09C2-B475-4CCC-9CCE-C19B54E4C829}.Debug|Any CPU.Build.0 = Debug|Any CPU + {523C09C2-B475-4CCC-9CCE-C19B54E4C829}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {523C09C2-B475-4CCC-9CCE-C19B54E4C829}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {523C09C2-B475-4CCC-9CCE-C19B54E4C829}.Debug|x86.ActiveCfg = Debug|Any CPU + {523C09C2-B475-4CCC-9CCE-C19B54E4C829}.Debug|Xbox 360.ActiveCfg = Debug|Any CPU + {523C09C2-B475-4CCC-9CCE-C19B54E4C829}.Profile|Any CPU.ActiveCfg = Release|Any CPU + {523C09C2-B475-4CCC-9CCE-C19B54E4C829}.Profile|Any CPU.Build.0 = Release|Any CPU + {523C09C2-B475-4CCC-9CCE-C19B54E4C829}.Profile|Mixed Platforms.ActiveCfg = Release|Any CPU + {523C09C2-B475-4CCC-9CCE-C19B54E4C829}.Profile|Mixed Platforms.Build.0 = Release|Any CPU + {523C09C2-B475-4CCC-9CCE-C19B54E4C829}.Profile|x86.ActiveCfg = Release|Any CPU + {523C09C2-B475-4CCC-9CCE-C19B54E4C829}.Profile|Xbox 360.ActiveCfg = Release|Any CPU + {523C09C2-B475-4CCC-9CCE-C19B54E4C829}.Release|Any CPU.ActiveCfg = Release|Any CPU + {523C09C2-B475-4CCC-9CCE-C19B54E4C829}.Release|Any CPU.Build.0 = Release|Any CPU + {523C09C2-B475-4CCC-9CCE-C19B54E4C829}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {523C09C2-B475-4CCC-9CCE-C19B54E4C829}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {523C09C2-B475-4CCC-9CCE-C19B54E4C829}.Release|x86.ActiveCfg = Release|Any CPU + {523C09C2-B475-4CCC-9CCE-C19B54E4C829}.Release|Xbox 360.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Testing/Myre.Tests/Myre.Tests.csproj b/Testing/Myre.Tests/Myre.Tests.csproj new file mode 100644 index 00000000..66002638 --- /dev/null +++ b/Testing/Myre.Tests/Myre.Tests.csproj @@ -0,0 +1,77 @@ + + + + Debug + AnyCPU + + + 2.0 + {523C09C2-B475-4CCC-9CCE-C19B54E4C829} + Library + Properties + Myre.Tests + Myre.Tests + v4.0 + 512 + {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + 3.5 + + + + + False + + + + + + + + + + + + {5CDABE8C-7C9C-4163-8C85-FEA731088239} + %28x86%29 Myre.Entities + + + {FC3D8E34-3333-42FB-9B47-3A273B1B50D8} + %28x86%29 Myre.Graphics + + + {FDB5A9D8-9266-4F7B-BDE7-D4E720F5B45F} + %28x86%29 Myre + + + + + \ No newline at end of file diff --git a/Testing/Myre.Tests/Myre.Tests.ncrunchproject b/Testing/Myre.Tests/Myre.Tests.ncrunchproject new file mode 100644 index 00000000..575717ac --- /dev/null +++ b/Testing/Myre.Tests/Myre.Tests.ncrunchproject @@ -0,0 +1,20 @@ + + false + false + false + true + false + false + false + false + true + true + false + true + true + 60000 + + + + AutoDetect + \ No newline at end of file diff --git a/Testing/Myre.Tests/Properties/AssemblyInfo.cs b/Testing/Myre.Tests/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..0c136c29 --- /dev/null +++ b/Testing/Myre.Tests/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Myre.Tests")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Myre.Tests")] +[assembly: AssemblyCopyright("Copyright © 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("743c3471-b9af-4933-b6c9-16d7b6fa5fc9")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Testing/Myre.Tests/UnitTest1.cs b/Testing/Myre.Tests/UnitTest1.cs new file mode 100644 index 00000000..b1ced089 --- /dev/null +++ b/Testing/Myre.Tests/UnitTest1.cs @@ -0,0 +1,22 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Microsoft.Xna.Framework; +using Myre.Graphics.Geometry; +using TestAssert = Microsoft.VisualStudio.TestTools.UnitTesting.Assert; + +namespace Myre.Tests +{ + [TestClass] + public class UnitTest1 + { + [TestMethod] + public void DepthSort() + { + var view = Matrix.CreateLookAt(Vector3.Zero, Vector3.UnitX, Vector3.Up); + + Matrix worldViewA = Matrix.CreateTranslation(10, 0, 0) * view; + Matrix worldViewB = Matrix.CreateTranslation(20, 0, 0) * view; + + TestAssert.AreEqual(-1, ModelInstance.Manager.CompareWorldViews(ref worldViewA, ref worldViewB)); + } + } +} diff --git a/Testing/Myre.Tests/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/Testing/Myre.Tests/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000000000000000000000000000000000000..0972327b46b77b43e2310e3763004d1a0dd664a2 GIT binary patch literal 5844 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 i`@3evgiNZ9+QCp literal 0 HcmV?d00001