Exemple #1
0
        public void DrawBatcher_TestBatchCreation_TextureChangePersistence_TwoBatchForSingleDualSingleTexAndColourInterleaveAsWrapChanges()
        {
            var messenger = Substitute.For <IFrameworkMessenger>();
            var tools     = new DrawStageBatcherTools();

            IDrawStageBatcher batcher = new DrawStageBatcher(12, tools);

            var properties = Substitute.For <IStartupPropertiesCache>();

            properties.Internal.Returns(new InternalStartUpProperties
            {
                DrawQueueInitialSizeNumberOfRequests         = 32,
                DrawQueueInitialSizeElementsPerRequestScalar = 4
            });

            var queues = new DrawQueueGroup(new IdGenerator(Substitute.For <IFrameworkMessenger>()),
                                            new DrawQueueFactory(messenger, properties, new ComparerCollection()),
                                            Substitute.For <IDrawStageBuffers>(),
                                            Substitute.For <IQueueToBufferBlitter>(),
                                            false);

            Add(queues.DynamicQueue.Queue, FillType.Coloured, 0UL, 0UL, TextureCoordinateMode.None, TextureCoordinateMode.None, 0, 1.0f);
            Add(queues.DynamicQueue.Queue, FillType.Textured, 5UL, 0UL, TextureCoordinateMode.Wrap, TextureCoordinateMode.Wrap, 0, 0.95f);
            Add(queues.DynamicQueue.Queue, FillType.DualTextured, 5UL, 10UL, TextureCoordinateMode.Wrap, TextureCoordinateMode.Wrap, 0, 0.9f);
            Add(queues.DynamicQueue.Queue, FillType.Textured, 5UL, 0UL, TextureCoordinateMode.Wrap, TextureCoordinateMode.Wrap, 0, 0.8f);
            Add(queues.DynamicQueue.Queue, FillType.DualTextured, 5UL, 10UL, TextureCoordinateMode.Wrap, TextureCoordinateMode.Mirror, 0, 0.7f);
            Add(queues.DynamicQueue.Queue, FillType.Coloured, 0UL, 0UL, TextureCoordinateMode.None, TextureCoordinateMode.None, 0, 0.6f);

            queues.ProcessDynamicQueue();

            batcher.Process(queues.DynamicQueue, queues.PersistentQueues);

            Assert.Equal(2, batcher.NumberOfBatches);

            var batch = batcher.Pool[0];

            Assert.Equal(5UL, batch.Texture0);
            Assert.Equal(10UL, batch.Texture1);
            Assert.Equal(TextureCoordinateMode.Wrap, batch.TextureMode0);
            Assert.Equal(TextureCoordinateMode.Wrap, batch.TextureMode1);
            Assert.Equal(0, batch.StartIndex);
            Assert.Equal(12, batch.NumIndices);

            batch = batcher.Pool[1];

            Assert.Equal(5UL, batch.Texture0);
            Assert.Equal(10UL, batch.Texture1);
            Assert.Equal(TextureCoordinateMode.Wrap, batch.TextureMode0);
            Assert.Equal(TextureCoordinateMode.Mirror, batch.TextureMode1);
            Assert.Equal(12, batch.StartIndex);
            Assert.Equal(6, batch.NumIndices);
        }
Exemple #2
0
        public void DrawBatcher_TestBatchCreation_TestSuccessfulWithOnlyDynamicQueueAndOneRequest()
        {
            var messenger = Substitute.For <IFrameworkMessenger>();
            var tools     = new DrawStageBatcherTools();

            IDrawStageBatcher batcher = new DrawStageBatcher(12, tools);

            var properties = Substitute.For <IStartupPropertiesCache>();

            properties.Internal.Returns(new InternalStartUpProperties
            {
                DrawQueueInitialSizeNumberOfRequests         = 32,
                DrawQueueInitialSizeElementsPerRequestScalar = 4
            });

            var queues = new DrawQueueGroup(new IdGenerator(messenger),
                                            new DrawQueueFactory(messenger, properties, new ComparerCollection()),
                                            Substitute.For <IDrawStageBuffers>(),
                                            Substitute.For <IQueueToBufferBlitter>(),
                                            false);

            Add(queues.DynamicQueue.Queue, FillType.Coloured, 0UL, 0UL, TextureCoordinateMode.None, TextureCoordinateMode.None, 0);

            queues.ProcessDynamicQueue();

            batcher.Process(queues.DynamicQueue, queues.PersistentQueues);

            Assert.Equal(1, batcher.NumberOfBatches);

            var batch = batcher.Pool[0];

            Assert.Equal(0UL, batch.Texture0);
            Assert.Equal(0UL, batch.Texture1);
            Assert.Equal(TextureCoordinateMode.None, batch.TextureMode0);
            Assert.Equal(TextureCoordinateMode.None, batch.TextureMode1);
            Assert.Equal(0, batch.StartIndex);
            Assert.Equal(3, batch.NumIndices);
        }
Exemple #3
0
        public void DrawBatcher_TestBatchCreation_ReplicatingTextureModeIssues_HappensWhenModeNoneProvidedToEarlyTexCall()
        {
            var messenger = Substitute.For <IFrameworkMessenger>();
            var tools     = new DrawStageBatcherTools();

            IDrawStageBatcher batcher = new DrawStageBatcher(12, tools);

            var properties = Substitute.For <IStartupPropertiesCache>();

            properties.Internal.Returns(new InternalStartUpProperties
            {
                DrawQueueInitialSizeNumberOfRequests         = 32,
                DrawQueueInitialSizeElementsPerRequestScalar = 4
            });

            var queues = new DrawQueueGroup(new IdGenerator(Substitute.For <IFrameworkMessenger>()),
                                            new DrawQueueFactory(messenger, properties, new ComparerCollection()),
                                            Substitute.For <IDrawStageBuffers>(),
                                            Substitute.For <IQueueToBufferBlitter>(),
                                            false);

            Add(queues.DynamicQueue.Queue, FillType.Coloured, 0UL, 0UL, TextureCoordinateMode.None, TextureCoordinateMode.None, 0, 1.0f);
            Add(queues.DynamicQueue.Queue, FillType.Coloured, 0UL, 0UL, TextureCoordinateMode.None, TextureCoordinateMode.None, 0, 1.0f);
            Add(queues.DynamicQueue.Queue, FillType.Textured, 5UL, 0UL, TextureCoordinateMode.Wrap, TextureCoordinateMode.None, 1, 0.5f);
            Add(queues.DynamicQueue.Queue, FillType.Textured, 5UL, 0UL, TextureCoordinateMode.Wrap, TextureCoordinateMode.None, 1, 0.5f);
            Add(queues.DynamicQueue.Queue, FillType.Textured, 6UL, 0UL, TextureCoordinateMode.Mirror, TextureCoordinateMode.None, 1, 0.3f);
            Add(queues.DynamicQueue.Queue, FillType.Textured, 7UL, 8UL, TextureCoordinateMode.Wrap, TextureCoordinateMode.Mirror, 1, 0.3f);

            queues.ProcessDynamicQueue();

            batcher.Process(queues.DynamicQueue, queues.PersistentQueues);

            Assert.Equal(4, batcher.NumberOfBatches);

            var batch = batcher.Pool[0];

            Assert.Equal(0UL, batch.Texture0);
            Assert.Equal(0UL, batch.Texture1);
            Assert.Equal(TextureCoordinateMode.None, batch.TextureMode0);
            Assert.Equal(TextureCoordinateMode.None, batch.TextureMode1);
            batch = batcher.Pool[1];

            Assert.Equal(5UL, batch.Texture0);
            Assert.Equal(0UL, batch.Texture1);
            Assert.Equal(TextureCoordinateMode.Wrap, batch.TextureMode0);
            Assert.Equal(TextureCoordinateMode.None, batch.TextureMode1);

            batch = batcher.Pool[2];

            Assert.Equal(6UL, batch.Texture0);
            Assert.Equal(0UL, batch.Texture1);
            Assert.Equal(TextureCoordinateMode.Mirror, batch.TextureMode0);
            Assert.Equal(TextureCoordinateMode.None, batch.TextureMode1);

            batch = batcher.Pool[3];

            Assert.Equal(7UL, batch.Texture0);
            Assert.Equal(8UL, batch.Texture1);
            Assert.Equal(TextureCoordinateMode.Wrap, batch.TextureMode0);
            Assert.Equal(TextureCoordinateMode.Mirror, batch.TextureMode1);
        }
Exemple #4
0
        public void DrawBatcher_TestBatchCreation_FiveBatchesDueToTwoQueueChangesPlusADualBatchSingleQueueInThere()
        {
            var messenger = Substitute.For <IFrameworkMessenger>();
            var tools     = new DrawStageBatcherTools();

            IDrawStageBatcher batcher = new DrawStageBatcher(12, tools);

            var properties = Substitute.For <IStartupPropertiesCache>();

            properties.Internal.Returns(new InternalStartUpProperties
            {
                DrawQueueInitialSizeNumberOfRequests         = 32,
                DrawQueueInitialSizeElementsPerRequestScalar = 4
            });

            var queues = new DrawQueueGroup(new IdGenerator(messenger),
                                            new DrawQueueFactory(messenger, properties, new ComparerCollection()),
                                            Substitute.For <IDrawStageBuffers>(),
                                            Substitute.For <IQueueToBufferBlitter>(),
                                            false);

            //Dynamic

            Add(queues.DynamicQueue.Queue, FillType.Coloured, 0UL, 0UL, TextureCoordinateMode.None, TextureCoordinateMode.None, 0, 0.5f);
            Add(queues.DynamicQueue.Queue, FillType.Textured, 20UL, 0UL, TextureCoordinateMode.Wrap, TextureCoordinateMode.None, 1);

            queues.ProcessDynamicQueue();

            //Persistent

            var requests0 = new InternalDrawRequest[]
            {
                Create(FillType.Coloured, 0UL, 0UL, TextureCoordinateMode.None, TextureCoordinateMode.None, 0, 0.2f)
            };

            queues.CreateNewPersistentQueue(requests0, false);

            var requests1 = new InternalDrawRequest[]
            {
                //Depth 1.0f puts it at the beginning
                Create(FillType.Textured, 5UL, 0UL, TextureCoordinateMode.Mirror, TextureCoordinateMode.None, 0, 1.0f),
                Create(FillType.Textured, 10UL, 0UL, TextureCoordinateMode.Mirror, TextureCoordinateMode.None, 0, 1.0f)
            };

            queues.CreateNewPersistentQueue(requests1, false);

            batcher.Process(queues.DynamicQueue, queues.PersistentQueues);

            Assert.Equal(5, batcher.NumberOfBatches);

            var batch = batcher.Pool[0]; //In second persistent queue

            Assert.Equal(5UL, batch.Texture0);
            Assert.Equal(0UL, batch.Texture1);
            Assert.Equal(TextureCoordinateMode.Mirror, batch.TextureMode0);
            Assert.Equal(TextureCoordinateMode.None, batch.TextureMode1);
            Assert.Equal(3, batch.StartIndex);
            Assert.Equal(3, batch.NumIndices);

            batch = batcher.Pool[1]; //In second persistent queue

            Assert.Equal(10UL, batch.Texture0);
            Assert.Equal(0UL, batch.Texture1);
            Assert.Equal(TextureCoordinateMode.Mirror, batch.TextureMode0);
            Assert.Equal(TextureCoordinateMode.None, batch.TextureMode1);
            Assert.Equal(6, batch.StartIndex);
            Assert.Equal(3, batch.NumIndices);

            batch = batcher.Pool[2]; //In dynamic queue

            Assert.Equal(0UL, batch.Texture0);
            Assert.Equal(0UL, batch.Texture1);
            Assert.Equal(TextureCoordinateMode.None, batch.TextureMode0);
            Assert.Equal(TextureCoordinateMode.None, batch.TextureMode1);
            Assert.Equal(9, batch.StartIndex);
            Assert.Equal(3, batch.NumIndices);

            batch = batcher.Pool[3]; //In first persistent queue

            Assert.Equal(0UL, batch.Texture0);
            Assert.Equal(0UL, batch.Texture1);
            Assert.Equal(TextureCoordinateMode.None, batch.TextureMode0);
            Assert.Equal(TextureCoordinateMode.None, batch.TextureMode1);
            Assert.Equal(0, batch.StartIndex);
            Assert.Equal(3, batch.NumIndices);

            batch = batcher.Pool[4]; //Back to dynamic queue

            Assert.Equal(20UL, batch.Texture0);
            Assert.Equal(0UL, batch.Texture1);
            Assert.Equal(TextureCoordinateMode.Wrap, batch.TextureMode0);
            Assert.Equal(TextureCoordinateMode.None, batch.TextureMode1);
            Assert.Equal(12, batch.StartIndex);
            Assert.Equal(3, batch.NumIndices);
        }
Exemple #5
0
        public void DrawBatcher_TestBatchCreation_ThreeBatchesDueToQueueChange()
        {
            var messenger = Substitute.For <IFrameworkMessenger>();
            var tools     = new DrawStageBatcherTools();

            IDrawStageBatcher batcher = new DrawStageBatcher(12, tools);

            var properties = Substitute.For <IStartupPropertiesCache>();

            properties.Internal.Returns(new InternalStartUpProperties
            {
                DrawQueueInitialSizeNumberOfRequests         = 32,
                DrawQueueInitialSizeElementsPerRequestScalar = 4
            });

            var queues = new DrawQueueGroup(new IdGenerator(messenger),
                                            new DrawQueueFactory(messenger, properties, new ComparerCollection()),
                                            Substitute.For <IDrawStageBuffers>(),
                                            Substitute.For <IQueueToBufferBlitter>(),
                                            false);

            //Dynamic

            Add(queues.DynamicQueue.Queue, FillType.Coloured, 0UL, 0UL, TextureCoordinateMode.None, TextureCoordinateMode.None, 0);
            Add(queues.DynamicQueue.Queue, FillType.Coloured, 0UL, 0UL, TextureCoordinateMode.None, TextureCoordinateMode.None, 1);

            queues.ProcessDynamicQueue();

            //Persistent

            var requests = new InternalDrawRequest[]
            {
                Create(FillType.Coloured, 0UL, 0UL, TextureCoordinateMode.None, TextureCoordinateMode.None, 0)
            };

            queues.CreateNewPersistentQueue(requests, false);

            batcher.Process(queues.DynamicQueue, queues.PersistentQueues);

            Assert.Equal(3, batcher.NumberOfBatches);

            var batch = batcher.Pool[0]; //In dynamic queue

            Assert.Equal(0UL, batch.Texture0);
            Assert.Equal(0UL, batch.Texture1);
            Assert.Equal(TextureCoordinateMode.None, batch.TextureMode0);
            Assert.Equal(TextureCoordinateMode.None, batch.TextureMode1);
            Assert.Equal(3, batch.StartIndex);
            Assert.Equal(3, batch.NumIndices);

            batch = batcher.Pool[1]; //In persistent queue so at start of buffer

            Assert.Equal(0UL, batch.Texture0);
            Assert.Equal(0UL, batch.Texture1);
            Assert.Equal(TextureCoordinateMode.None, batch.TextureMode0);
            Assert.Equal(TextureCoordinateMode.None, batch.TextureMode1);
            Assert.Equal(0, batch.StartIndex);
            Assert.Equal(3, batch.NumIndices);

            batch = batcher.Pool[2]; //Back to dynamic queue

            Assert.Equal(0UL, batch.Texture0);
            Assert.Equal(0UL, batch.Texture1);
            Assert.Equal(TextureCoordinateMode.None, batch.TextureMode0);
            Assert.Equal(TextureCoordinateMode.None, batch.TextureMode1);
            Assert.Equal(6, batch.StartIndex);
            Assert.Equal(3, batch.NumIndices);
        }