فهرست منبع

Make batch renderer able to live for more than one frame.
TODO: Store normal and batch renderer code so that each 'scene' can use its own batch renderer.

Sam Jaffe 6 سال پیش
والد
کامیت
0b9b77b951
2فایلهای تغییر یافته به همراه7 افزوده شده و 7 حذف شده
  1. 6 6
      engine/src/game_dispatch.cpp
  2. 1 1
      graphics/src/renderer.cxx

+ 6 - 6
engine/src/game_dispatch.cpp

@@ -26,8 +26,8 @@ namespace engine {
   }
 
   game_dispatch::game_dispatch(std::shared_ptr<graphics::renderer> renderer)
-      : renderer(renderer), screen_size(env::screen_size()),
-        minimum_frame_duration(env::fps::v60),
+      : renderer(new graphics::batch_renderer(renderer.get())),
+        screen_size(env::screen_size()), minimum_frame_duration(0),
         text_engine_(new text_engine("font", renderer->manager())),
         counter(new fps_counter(text_engine_)), scenes(),
         current_timestamp(env::clock::now()), curr_scene() {}
@@ -94,11 +94,11 @@ namespace engine {
   }
 
   void game_dispatch::render() {
-    graphics::batch_renderer batch(renderer.get());
-    batch.clear();
+    renderer->clear();
     for (auto & obj : counter->glyphs()) {
-      batch.draw(obj);
+      renderer->draw(obj);
     }
-    curr_scene.ptr->render(batch);
+    curr_scene.ptr->render(*renderer);
+    renderer->flush();
   }
 }

+ 1 - 1
graphics/src/renderer.cxx

@@ -81,7 +81,7 @@ void batch_renderer::check() {
 void batch_renderer::write() {
   for (auto & pair : batches_) {
     impl_->draw(pair.first, math::matrix::identity<float, 4>(), pair.second);
+    pair.second.clear();
   }
-  batches_.clear();
   elements_ = 0;
 }