Browse Source

Test graphics::batch_renderer::draw

Sam Jaffe 6 years ago
parent
commit
f2af413302
1 changed files with 31 additions and 2 deletions
  1. 31 2
      graphics/test/renderer_test.cxx

+ 31 - 2
graphics/test/renderer_test.cxx

@@ -50,10 +50,10 @@ void DirectRendererTest::TearDown() {
   delete mock;
 }
 
-graphics::object DemoObject() {
+graphics::object DemoObject(unsigned int id = 1) {
   math::dim2::rectangle const size{{{-1.f, -1.f}}, {{2.f, 2.f}}};
   math::dim2::rectangle const tex{{{0.f, 0.f}}, {{1.f, 1.f}}};
-  return {size, size, cast(1), tex};
+  return {size, size, cast(id), tex};
 }
 
 TEST_F(DirectRendererTest, DrawPassesToDraw) {
@@ -126,3 +126,32 @@ TEST_F(BatchRendererTest, FlushPassesToFlush) {
   EXPECT_CALL(*mock, flush()).Times(1).RetiresOnSaturation();
   renderer->flush();
 }
+
+TEST_F(BatchRendererTest, DoesNotWriteImmediately) {
+  EXPECT_CALL(*mock, draw(_, _, _)).Times(0);
+  renderer->draw(cast(1), math::matr4(), {});
+  testing::Mock::VerifyAndClearExpectations(mock);
+  // We need to re-enact this expectation
+  EXPECT_CALL(*mock, flush()).Times(AnyNumber());
+  EXPECT_CALL(*mock, draw(_, _, _)).Times(1);
+}
+
+TEST_F(BatchRendererTest, GroupsDataTogetherByMaterial) {
+  EXPECT_CALL(*mock, flush()).Times(AnyNumber());
+  EXPECT_CALL(*mock, draw(cast(1), _, SizeIs(12))).Times(1);
+  EXPECT_CALL(*mock, draw(cast(2), _, SizeIs(6))).Times(1);
+  renderer->draw(DemoObject());
+  renderer->draw(DemoObject());
+  renderer->draw(DemoObject(2));
+}
+
+TEST_F(BatchRendererTest, BatchLimitingCanSplitTheWrites) {
+  EXPECT_CALL(*mock, flush()).Times(AnyNumber());
+  renderer.reset(new graphics::batch_renderer(drenderer.get(), 15));
+  EXPECT_CALL(*mock, draw(cast(1), _, SizeIs(12))).Times(1);
+  EXPECT_CALL(*mock, draw(cast(2), _, SizeIs(6))).Times(2);
+  renderer->draw(DemoObject());
+  renderer->draw(DemoObject());
+  renderer->draw(DemoObject(2));
+  renderer->draw(DemoObject(2));
+}