Forráskód Böngészése

Move rendering of glyphs into fps_counter class's ownership.

Sam Jaffe 6 éve
szülő
commit
ae302ad1cd

+ 1 - 0
engine/include/game/engine/fps_counter.hpp

@@ -23,6 +23,7 @@ namespace engine {
 
     void set_frame_step(env::clock::duration const & since);
 
+    void render(graphics::renderer & renderer) const;
     std::vector<graphics::object> const & glyphs() const { return glyphs_; }
 
   private:

+ 7 - 0
engine/src/fps_counter.cxx

@@ -14,6 +14,7 @@
 #include "game/engine/serial.hpp"
 #include "game/engine/text_engine.hpp"
 #include "game/graphics/object.hpp"
+#include "game/graphics/renderer.hpp"
 
 using namespace engine;
 
@@ -24,6 +25,12 @@ fps_counter::fps_counter(std::shared_ptr<text_engine> text_engine,
 
 fps_counter::~fps_counter() {}
 
+void fps_counter::render(graphics::renderer & renderer) const {
+  for (auto & obj : glyphs()) {
+    renderer.draw(obj);
+  }
+}
+
 std::string fps_counter::fps(env::clock::duration const & since) const {
   auto fps = magnitude_ * env::clock::duration::period::den / since.count();
   std::string fps_str = std::to_string(fps);

+ 1 - 3
engine/src/game_dispatch.cpp

@@ -97,9 +97,7 @@ namespace engine {
 
   void game_dispatch::render() {
     batch_renderer_->clear();
-    for (auto & obj : counter_->glyphs()) {
-      batch_renderer_->draw(obj);
-    }
+    counter_->render(*batch_renderer_);
     batch_renderer_->flush();
     current_scene_.ptr->render();
     renderer_->flush();

+ 19 - 0
engine/test/fps_counter_test.cxx

@@ -71,3 +71,22 @@ TEST_F(FpsCounterTest, ProducesEnoughDigitsForPrecision) {
   }
   EXPECT_THAT(counter.glyphs(), SizeIs(8));
 }
+
+struct mock_renderer : public stub_renderer {
+  MOCK_METHOD1(draw, void(graphics::object const &));
+};
+
+TEST_F(FpsCounterTest, RenderCallInvokesOneDrawPerGlyph) {
+  // Set up expectations
+  using testing::_;
+  mock_renderer renderer;
+  EXPECT_CALL(renderer, draw(_)).Times(8);
+
+  // Set up counter
+  engine::fps_counter counter(engine, 5);
+  env::clock::duration ms_100{100000000LL};
+  for (int i = 0; i < 10; ++i) {
+    counter.set_frame_step(ms_100);
+  }
+  counter.render(renderer);
+}