Make Light2D respect CanvasLayer layer_min and layer_max

As the masked light list takes no account of layer_min and layer_max, the canvas_layed_id is passed to the _light_mask_canvas_items function where it can be used to reject lights outside the layer range.
This commit is contained in:
lawnjelly
2020-05-30 13:47:13 +01:00
parent f108037cbf
commit 1b5c4bc5b7
3 changed files with 9 additions and 11 deletions

View File

@ -229,15 +229,16 @@ void VisualServerViewport::_draw_viewport(Viewport *p_viewport, ARVRInterface::E
RasterizerCanvas::Light *canvas_lights = NULL;
RasterizerCanvas::Light *ptr = lights;
int canvas_layer_id = E->get()->layer;
while (ptr) {
if (E->get()->layer >= ptr->layer_min && E->get()->layer <= ptr->layer_max) {
if (canvas_layer_id >= ptr->layer_min && canvas_layer_id <= ptr->layer_max) {
ptr->next_ptr = canvas_lights;
canvas_lights = ptr;
}
ptr = ptr->filter_next_ptr;
}
VSG::canvas->render_canvas(canvas, xform, canvas_lights, lights_with_mask, clip_rect);
VSG::canvas->render_canvas(canvas, xform, canvas_lights, lights_with_mask, clip_rect, canvas_layer_id);
i++;
if (scenario_draw_canvas_bg && E->key().get_layer() >= scenario_canvas_max_layer) {