DrawingContext::~DrawingContext()
{
+ clear_drawing_requests(lightmap_requests);
+ clear_drawing_requests(drawing_requests);
+
obstack_free(&obst, NULL);
}
void
+DrawingContext::clear_drawing_requests(DrawingRequests& requests)
+{
+ for(auto& request : requests)
+ {
+ if (request->request_data)
+ {
+ request->request_data->~DrawingRequestData();
+ }
+ request->~DrawingRequest();
+ }
+ requests.clear();
+}
+
+void
DrawingContext::draw_surface(SurfacePtr surface, const Vector& position,
float angle, const Color& color, const Blend& blend,
int layer)
request->color = color;
request->blend = blend;
- request->request_data = surface.get();
+ SurfaceRequest* surfacerequest = new(obst) SurfaceRequest();
+ surfacerequest->surface = surface.get();
+ request->request_data = surfacerequest;
requests->push_back(request);
}
fillrectrequest->radius = radius;
request->request_data = fillrectrequest;
- requests->push_back(request);
+ requests->push_back(request);
}
void
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);
+ requests->push_back(request);
}
Rectf
DrawingContext::get_cliprect() const
{
return Rectf(get_translation().x, get_translation().y,
- get_translation().x + SCREEN_WIDTH,
+ get_translation().x + SCREEN_WIDTH,
get_translation().y + SCREEN_HEIGHT);
}
target_stack.clear();
//Use Lightmap if ambient color is not white.
- bool use_lightmap = ( ambient_color.red != 1.0f || ambient_color.green != 1.0f ||
- ambient_color.blue != 1.0f );
+ bool use_lightmap = ( ambient_color.red != 1.0f ||
+ ambient_color.green != 1.0f ||
+ ambient_color.blue != 1.0f );
// PART1: create lightmap
if(use_lightmap) {
request->layer = LAYER_HUD - 1;
drawing_requests.push_back(request);
}
- lightmap_requests.clear();
-
handle_drawing_requests(drawing_requests);
- drawing_requests.clear();
+
+ clear_drawing_requests(lightmap_requests);
+ clear_drawing_requests(drawing_requests);
+
obstack_free(&obst, NULL);
obstack_init(&obst);
ambient_color = new_color;
}
-void
+void
DrawingContext::take_screenshot()
{
screenshot_requested = true;