Esempio n. 1
0
        public void QueueToBufferBlitter_TestUnpackAndTransfer_CorrectBufferCallsAndDataTransfered()
        {
            var messenger = Substitute.For <IFrameworkMessenger>();
            IQueueToBufferBlitter blitter = new QueueToBufferBlitter();

            var q = new DrawQueue(messenger, new ComparerCollection(), 36, 8, false);

            Add(q, FillType.Coloured, 0UL, 0UL, TextureCoordinateMode.Mirror, TextureCoordinateMode.Mirror, 0);
            Add(q, FillType.Coloured, 0UL, 0UL, TextureCoordinateMode.Mirror, TextureCoordinateMode.Mirror, 0);
            Add(q, FillType.Coloured, 0UL, 0UL, TextureCoordinateMode.Mirror, TextureCoordinateMode.Mirror, 0);
            Add(q, FillType.Coloured, 0UL, 0UL, TextureCoordinateMode.Mirror, TextureCoordinateMode.Mirror, 0);
            Add(q, FillType.Coloured, 0UL, 0UL, TextureCoordinateMode.Mirror, TextureCoordinateMode.Mirror, 0);
            Add(q, FillType.Coloured, 0UL, 0UL, TextureCoordinateMode.Mirror, TextureCoordinateMode.Mirror, 0);
            Add(q, FillType.Coloured, 0UL, 0UL, TextureCoordinateMode.Mirror, TextureCoordinateMode.Mirror, 0);

            q.Sort();

            var wrap = new QueueWrap {
                Id = 0, BufferPositionOfFirstIndex = 16, BufferPositionOfFirstVertex = 32, Queue = q
            };

            var buffersMock = Substitute.For <IDrawStageBuffers>();

            blitter.UnpackAndTransferToGpu(wrap, buffersMock);

            buffersMock.Received(1).EnsureVertexBufferIsLargeEnough(Arg.Any <int>(), Arg.Any <bool>());
            buffersMock.Received(1).EnsureIndexBufferIsLargeEnough(Arg.Any <int>(), Arg.Any <bool>());

            buffersMock.ReceivedWithAnyArgs(21).CopyAVertexToStagingArray(default, default, default, default, default, default, default, default, default, default, default);
Esempio n. 2
0
        public void DrawQueueTest_TestingSort_OrderingIsCorrect()
        {
            var messenger = Substitute.For <IFrameworkMessenger>();
            IComparerCollection comparers = new ComparerCollection();

            IDrawQueue queue = new DrawQueue(messenger, comparers, 32, 4, false);

            AddItem(queue, TextureCoordinateMode.Mirror, TextureCoordinateMode.Mirror, FillType.Coloured, 0UL, 0UL, 0.5f, 1);     //0
            AddItem(queue, TextureCoordinateMode.Mirror, TextureCoordinateMode.Mirror, FillType.Coloured, 0UL, 0UL, 0.6f, 1);     //1
            AddItem(queue, TextureCoordinateMode.Mirror, TextureCoordinateMode.Mirror, FillType.Coloured, 0UL, 0UL, 0.8f, 1);     //2
            AddItem(queue, TextureCoordinateMode.Wrap, TextureCoordinateMode.Mirror, FillType.DualTextured, 0UL, 1UL, 0.7f, 0);   //3
            AddItem(queue, TextureCoordinateMode.Mirror, TextureCoordinateMode.Mirror, FillType.DualTextured, 0UL, 1UL, 0.7f, 0); //4
            AddItem(queue, TextureCoordinateMode.Mirror, TextureCoordinateMode.Wrap, FillType.DualTextured, 0UL, 1UL, 0.7f, 0);   //5
            AddItem(queue, TextureCoordinateMode.Wrap, TextureCoordinateMode.Wrap, FillType.Textured, 0UL, 0UL, 0.8f, 0);         //6
            AddItem(queue, TextureCoordinateMode.Wrap, TextureCoordinateMode.Wrap, FillType.Textured, 2UL, 0UL, 0.8f, 0);         //7
            AddItem(queue, TextureCoordinateMode.Wrap, TextureCoordinateMode.Wrap, FillType.Textured, 1UL, 0UL, 0.8f, 0);         //8
            AddItem(queue, TextureCoordinateMode.Wrap, TextureCoordinateMode.Mirror, FillType.DualTextured, 0UL, 1UL, 0.3f, 3);   //9
            AddItem(queue, TextureCoordinateMode.Wrap, TextureCoordinateMode.Mirror, FillType.DualTextured, 0UL, 1UL, 0.3f, 4);   //10
            AddItem(queue, TextureCoordinateMode.Wrap, TextureCoordinateMode.Mirror, FillType.DualTextured, 0UL, 1UL, 0.3f, 5);   //11
            AddItem(queue, TextureCoordinateMode.Wrap, TextureCoordinateMode.Mirror, FillType.DualTextured, 0UL, 3UL, 0.7f, 6);   //12
            AddItem(queue, TextureCoordinateMode.Wrap, TextureCoordinateMode.Mirror, FillType.DualTextured, 0UL, 2UL, 0.7f, 6);   //13
            AddItem(queue, TextureCoordinateMode.Wrap, TextureCoordinateMode.Mirror, FillType.DualTextured, 0UL, 1UL, 0.7f, 6);   //14

            queue.Sort();

            /*
             *  6, 8, 7 -> Ordered by Texture0
             *  3, 5, 4 -> Ordered by Tex0 and Tex1 wrap modes
             *  2, 1, 0  -> ordered by depth
             *  9, 10, 11 -> ordered by layer
             *  14, 13, 12 -> ordered by Texture1 in Dual Textured
             */

            var order = new int[] { 6, 8, 7, 3, 5, 4, 2, 1, 0, 9, 10, 11, 14, 13, 12 };

            for (var n = 0; n < order.Length; n++)
            {
                Assert.Equal(order[n], queue.Data.Ordering[n]);
            }
        }