diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2023-02-21 21:14:51 +0100 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2023-02-21 21:14:51 +0100 |
commit | 5e572053656368b0e70a99f8a5129a5e4fa7cb98 (patch) | |
tree | 8c0f35daef3ad8d8ab98b1724a8382ba8056ec51 /drivers/gles3 | |
parent | 547f8bc2dcffbdab0244e216ad9aa0c5003877de (diff) | |
parent | 2d7db30f0d883f038d3735011f492b03852c94c9 (diff) |
Merge pull request #73478 from NewDefectus/master
Use the original canvas to calculate light positioning
Diffstat (limited to 'drivers/gles3')
-rw-r--r-- | drivers/gles3/rasterizer_canvas_gles3.cpp | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/drivers/gles3/rasterizer_canvas_gles3.cpp b/drivers/gles3/rasterizer_canvas_gles3.cpp index 9c6e6baaec..2f7e68e463 100644 --- a/drivers/gles3/rasterizer_canvas_gles3.cpp +++ b/drivers/gles3/rasterizer_canvas_gles3.cpp @@ -224,13 +224,12 @@ void RasterizerCanvasGLES3::canvas_render_items(RID p_to_render_target, Item *p_ l = l->next_ptr; ERR_CONTINUE(!clight); } - Transform2D to_light_xform = (p_canvas_transform * l->light_shader_xform).affine_inverse(); Vector2 canvas_light_pos = p_canvas_transform.xform(l->xform.get_origin()); //convert light position to canvas coordinates, as all computation is done in canvas coords to avoid precision loss state.light_uniforms[index].position[0] = canvas_light_pos.x; state.light_uniforms[index].position[1] = canvas_light_pos.y; - _update_transform_2d_to_mat2x4(to_light_xform, state.light_uniforms[index].matrix); + _update_transform_2d_to_mat2x4(l->light_shader_xform.affine_inverse(), state.light_uniforms[index].matrix); _update_transform_2d_to_mat2x4(l->xform_cache.affine_inverse(), state.light_uniforms[index].shadow_matrix); state.light_uniforms[index].height = l->height * (p_canvas_transform.columns[0].length() + p_canvas_transform.columns[1].length()) * 0.5; //approximate height conversion to the canvas size, since all calculations are done in canvas coords to avoid precision loss |