|
|
@@ -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));
|
|
|
+}
|