Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        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));
            }
        }
Exemplo n.º 5
0
        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);
            }
        }