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); }
//Refactor note //Most of DrawStageModel's Queue manipulation has been extracted to DrawQueueGroup //Enabling better testing and separation. This division is not completely clean / encapsulated //(mostly as we want the render to have direct access to buffers and we expose the queues publically for testing) //As DrawStageModel is now just a pass-through / delegater, there is currently no testing for that class private IDrawQueueGroup CreateAQueueGroup() { var messenger = Substitute.For <IFrameworkMessenger>(); var idGenerator = new IdGenerator(messenger); var properties = Substitute.For <IStartupPropertiesCache>(); properties.Internal.Returns(new InternalStartUpProperties { DrawQueueInitialSizeNumberOfRequests = 32, DrawQueueInitialSizeElementsPerRequestScalar = 4 }); var queueFactory = new DrawQueueFactory(messenger, properties, new ComparerCollection()); var buffers = Substitute.For <IDrawStageBuffers>(); var blitter = Substitute.For <IQueueToBufferBlitter>(); var queues = new DrawQueueGroup(idGenerator, queueFactory, buffers, blitter, false); return(queues); }
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); }
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); }
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); }
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); }