Fixed resize handling of lightmaps, they are now recreated on resize()
[supertux.git] / src / video / drawing_context.cpp
index 7ed0079..f600246 100644 (file)
 #include "video/surface.hpp"
 #include "video/texture.hpp"
 #include "video/texture_manager.hpp"
-#include "video/video_systems.hpp"
+#include "video/video_system.hpp"
 
-DrawingContext::DrawingContext(Renderer& renderer, Lightmap& lightmap) :
-  renderer(renderer),
-  lightmap(lightmap),
+DrawingContext::DrawingContext(VideoSystem& video_system_) :
+  video_system(video_system_),
   transformstack(),
   transform(),
   blend_stack(),
@@ -60,9 +59,9 @@ DrawingContext::~DrawingContext()
 }
 
 void
-DrawingContext::clear_drawing_requests(DrawingRequests& requests)
+DrawingContext::clear_drawing_requests(DrawingRequests& requests_)
 {
-  for(auto& request : requests)
+  for(auto& request : requests_)
   {
     if (request->request_data)
     {
@@ -70,7 +69,7 @@ DrawingContext::clear_drawing_requests(DrawingRequests& requests)
     }
     request->~DrawingRequest();
   }
-  requests.clear();
+  requests_.clear();
 }
 
 void
@@ -318,6 +317,8 @@ DrawingContext::do_drawing()
 
   // PART1: create lightmap
   if(use_lightmap) {
+    Lightmap& lightmap = video_system.get_lightmap();
+
     lightmap.start_draw(ambient_color);
     handle_drawing_requests(lightmap_requests);
     lightmap.end_draw();
@@ -328,7 +329,11 @@ DrawingContext::do_drawing()
     request->layer = LAYER_HUD - 1;
     drawing_requests.push_back(request);
   }
+
+  Renderer& renderer = video_system.get_renderer();
+  renderer.start_draw();
   handle_drawing_requests(drawing_requests);
+  renderer.end_draw();
 
   clear_drawing_requests(lightmap_requests);
   clear_drawing_requests(drawing_requests);
@@ -355,12 +360,15 @@ public:
 };
 
 void
-DrawingContext::handle_drawing_requests(DrawingRequests& requests)
+DrawingContext::handle_drawing_requests(DrawingRequests& requests_)
 {
-  std::stable_sort(requests.begin(), requests.end(), RequestPtrCompare());
+  std::stable_sort(requests_.begin(), requests_.end(), RequestPtrCompare());
+
+  Renderer& renderer = video_system.get_renderer();
+  Lightmap& lightmap = video_system.get_lightmap();
 
   DrawingRequests::const_iterator i;
-  for(i = requests.begin(); i != requests.end(); ++i) {
+  for(i = requests_.begin(); i != requests_.end(); ++i) {
     const DrawingRequest& request = **i;
 
     switch(request.target) {
@@ -485,13 +493,13 @@ DrawingContext::pop_target()
 }
 
 void
-DrawingContext::set_target(Target target)
+DrawingContext::set_target(Target target_)
 {
-  this->target = target;
-  if(target == LIGHTMAP) {
+  this->target = target_;
+  if(target_ == LIGHTMAP) {
     requests = &lightmap_requests;
   } else {
-    assert(target == NORMAL);
+    assert(target_ == NORMAL);
     requests = &drawing_requests;
   }
 }