fix lightmap-in-front-of-menu bug
[supertux.git] / src / video / drawing_context.cpp
index 62c6ee3..f1fecb7 100644 (file)
@@ -256,6 +256,29 @@ DrawingContext::draw_filled_rect(const Rect& rect, const Color& color, float rad
 }
 
 void
+DrawingContext::draw_inverse_ellipse(const Vector& pos, const Vector& size, const Color& color, int layer)
+{
+  DrawingRequest* request = new(obst) DrawingRequest();
+
+  request->target = target;
+  request->type   = INVERSEELLIPSE;
+  request->pos    = transform.apply(pos);
+  request->layer  = layer;
+
+  request->drawing_effect = transform.drawing_effect;
+  request->alpha = transform.alpha;
+
+  InverseEllipseRequest* ellipse = new(obst)InverseEllipseRequest;
+  
+  ellipse->color        = color;
+  ellipse->color.alpha  = color.alpha * transform.alpha;
+  ellipse->size         = size;
+  request->request_data = ellipse;
+
+  requests->push_back(request);     
+}
+
+void
 DrawingContext::get_light(const Vector& position, Color* color)
 {
   if( ambient_color.red == 1.0f && ambient_color.green == 1.0f
@@ -302,14 +325,17 @@ DrawingContext::do_drawing()
     lightmap->start_draw(ambient_color);
     handle_drawing_requests(lightmap_requests);
     lightmap->end_draw();
+
+    DrawingRequest* request = new(obst) DrawingRequest();
+    request->target = NORMAL;
+    request->type = DRAW_LIGHTMAP;
+    request->layer = LAYER_HUD - 1;
+    drawing_requests.push_back(request);
   }
   lightmap_requests.clear();
 
   handle_drawing_requests(drawing_requests);
   drawing_requests.clear();
-  if(use_lightmap) {
-    lightmap->do_draw();
-  }
   obstack_free(&obst, NULL);
   obstack_init(&obst);
 
@@ -365,6 +391,12 @@ DrawingContext::handle_drawing_requests(DrawingRequests& requests)
           case FILLRECT:
             renderer->draw_filled_rect(request);
             break;
+          case INVERSEELLIPSE:
+            renderer->draw_inverse_ellipse(request);
+            break;
+          case DRAW_LIGHTMAP:
+            lightmap->do_draw();
+            break;
           case GETLIGHT:
             lightmap->get_light(request);
             break;
@@ -391,6 +423,12 @@ DrawingContext::handle_drawing_requests(DrawingRequests& requests)
           case FILLRECT:
             lightmap->draw_filled_rect(request);
             break;
+          case INVERSEELLIPSE:
+            assert(!"InverseEllipse doesn't make sense on the lightmap");
+            break;
+          case DRAW_LIGHTMAP:
+            lightmap->do_draw();
+            break;
           case GETLIGHT:
             lightmap->get_light(request);
             break;