public void TestCase2() { var token0 = new GLUniformBlockInfo { Prefix = "UBO", BindingIndex = 10, X = 0, Y = 0, Z = 0, }; var collator = new GLUniformBlockGroupCollator(); collator.Add(token0); var token1 = new GLUniformBlockInfo { Prefix = "UBO", BindingIndex = 15, X = 1, Y = 0, Z = 0, }; collator.Add(token1); var groups = collator.Collate(); Assert.AreEqual(1, groups.Values.Count); var firstGroup = groups[10]; Assert.AreEqual("UBO", firstGroup.Prefix); Assert.AreEqual(2, firstGroup.Count); Assert.AreEqual(token0.BindingIndex, firstGroup.BindingIndex); }
public void Add(GLUniformBlockInfo entry) { GLUniformBlockGroupInfo found; if (mPrefixes.TryGetValue(entry.Prefix, out found)) { if (entry.X == 0 && entry.Y == 0 && entry.Z == 0) { found.FirstBinding = entry.BindingIndex; } found.ArrayStride = Math.Max(found.ArrayStride, entry.X + 1); found.HighestRow = Math.Max(found.HighestRow, entry.Y + 1); found.HighestLayer = Math.Max(found.HighestLayer, entry.Z + 1); found.Count += 1; } else { found = new GLUniformBlockGroupInfo { Prefix = entry.Prefix, FirstBinding = entry.BindingIndex, Count = 1, ArrayStride = entry.X + 1, HighestRow = entry.Y + 1, HighestLayer = entry.Z + 1, }; mPrefixes.Add(found.Prefix, found); } }
public void TestCase3() { var token0 = new GLUniformBlockInfo { Prefix = "UBO", BindingIndex = 10, X = 0, Y = 0, Z = 0, }; var collator = new GLUniformBlockGroupCollator(); collator.Add(token0); var token1 = new GLUniformBlockInfo { Prefix = "ubo", BindingIndex = 15, X = 1, Y = 0, Z = 0, }; collator.Add(token1); var groups = collator.Collate(); Assert.AreEqual(2, groups.Values.Count); // SHOULD BE SORTED BY BINDING INDEX { var g = groups[10]; Assert.AreEqual("UBO", g.Prefix); Assert.AreEqual(1, g.Count); Assert.AreEqual(10, g.BindingIndex); } { var g = groups[15]; Assert.AreEqual("ubo", g.Prefix); Assert.AreEqual(1, g.Count); Assert.AreEqual(15, g.BindingIndex); } }
public void RowOffset1() { var token0 = new GLUniformBlockInfo { Prefix = "UBO", BindingIndex = 10, X = 0, Y = 0, Z = 0, }; var collator = new GLUniformBlockGroupCollator(); collator.Add(token0); var token1 = new GLUniformBlockInfo { Prefix = "UBO", BindingIndex = 10, X = 2, Y = 2, Z = 0, }; collator.Add(token1); var groups = collator.Collate(); Assert.AreEqual(1, groups.Values.Count); { var firstGroup = groups[10]; Assert.AreEqual("UBO", firstGroup.Prefix); Assert.AreEqual(2, firstGroup.Count); Assert.AreEqual(10, firstGroup.BindingIndex, nameof(firstGroup.BindingIndex)); Assert.AreEqual(3, firstGroup.ArrayStride, nameof(firstGroup.ArrayStride)); Assert.AreEqual(3, firstGroup.HighestRow, nameof(firstGroup.HighestRow)); Assert.AreEqual(9, firstGroup.MatrixStride, nameof(firstGroup.MatrixStride)); Assert.AreEqual(1, firstGroup.HighestLayer, nameof(firstGroup.HighestLayer)); Assert.AreEqual(9, firstGroup.CubeStride, nameof(firstGroup.CubeStride)); } }
public void GroupsSorted1() { // SHOULD BE SORTED BY BINDING INDEX OF FIRST ELEMENT var token0 = new GLUniformBlockInfo { Prefix = "C", BindingIndex = 10, X = 0, Y = 0, Z = 0, }; var collator = new GLUniformBlockGroupCollator(); collator.Add(token0); var token1 = new GLUniformBlockInfo { Prefix = "A", BindingIndex = 12, X = 1, Y = 0, Z = 0, }; collator.Add(token1); var token2 = new GLUniformBlockInfo { Prefix = "B", BindingIndex = 11, X = 1, Y = 0, Z = 0, }; collator.Add(token2); var groups = collator.Collate(); Assert.AreEqual(3, groups.Values.Count); // SHOULD BE SORTED BY BINDING INDEX { var group = groups[10]; Assert.AreEqual("C", group.Prefix); Assert.AreEqual(1, group.Count); Assert.AreEqual(token0.BindingIndex, group.BindingIndex); } { var group = groups[11]; Assert.AreEqual("B", group.Prefix); Assert.AreEqual(1, group.Count); Assert.AreEqual(token2.BindingIndex, group.BindingIndex); } { var group = groups[12]; Assert.AreEqual("A", group.Prefix); Assert.AreEqual(1, group.Count); Assert.AreEqual(token1.BindingIndex, group.BindingIndex); } }