From 1ac16e25c96de942c1111598c153c564086613c6 Mon Sep 17 00:00:00 2001 From: Manuel Montoto Date: Wed, 26 Aug 2020 12:42:40 +0200 Subject: [PATCH 1/5] Update rendering_server_canvas.cpp Fixes the 2D canvas display positions jumping pseudo randomly when the are located at fractional coordinates and the camera changes location. Fixes #41491, #35606 etc. Godot 4.0 branch. --- servers/rendering/rendering_server_canvas.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/servers/rendering/rendering_server_canvas.cpp b/servers/rendering/rendering_server_canvas.cpp index 5c0741bb3b91..04014c5b7f31 100644 --- a/servers/rendering/rendering_server_canvas.cpp +++ b/servers/rendering/rendering_server_canvas.cpp @@ -113,6 +113,7 @@ void RenderingServerCanvas::_cull_canvas_item(Item *p_canvas_item, const Transfo Rect2 rect = ci->get_rect(); Transform2D xform = p_transform * ci->xform; + xform.elements[2] = xform.elements[2].floor() ; // Clean the undesirable fractional part distorting the final display position Rect2 global_rect = xform.xform(rect); global_rect.position += p_clip_rect.position; From 80c0a73b9a364d46d8f7471a5674f2f3f8a997d9 Mon Sep 17 00:00:00 2001 From: Manuel Montoto Date: Wed, 26 Aug 2020 13:28:18 +0200 Subject: [PATCH 2/5] Update rendering_server_canvas.cpp Fixed the static analyzer complain about the whitespace. --- servers/rendering/rendering_server_canvas.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers/rendering/rendering_server_canvas.cpp b/servers/rendering/rendering_server_canvas.cpp index 04014c5b7f31..cbbf1d679d9d 100644 --- a/servers/rendering/rendering_server_canvas.cpp +++ b/servers/rendering/rendering_server_canvas.cpp @@ -113,7 +113,7 @@ void RenderingServerCanvas::_cull_canvas_item(Item *p_canvas_item, const Transfo Rect2 rect = ci->get_rect(); Transform2D xform = p_transform * ci->xform; - xform.elements[2] = xform.elements[2].floor() ; // Clean the undesirable fractional part distorting the final display position + xform.elements[2] = xform.elements[2].floor(); // Clean the undesirable fractional part distorting the final display position Rect2 global_rect = xform.xform(rect); global_rect.position += p_clip_rect.position; From 99174ace5941e4e08e9bf433a2d8729133d6f339 Mon Sep 17 00:00:00 2001 From: Manuel Montoto Date: Wed, 26 Aug 2020 13:42:19 +0200 Subject: [PATCH 3/5] Update rendering_server_canvas.cpp Another whitespace... --- servers/rendering/rendering_server_canvas.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers/rendering/rendering_server_canvas.cpp b/servers/rendering/rendering_server_canvas.cpp index cbbf1d679d9d..98ad91d47207 100644 --- a/servers/rendering/rendering_server_canvas.cpp +++ b/servers/rendering/rendering_server_canvas.cpp @@ -113,7 +113,7 @@ void RenderingServerCanvas::_cull_canvas_item(Item *p_canvas_item, const Transfo Rect2 rect = ci->get_rect(); Transform2D xform = p_transform * ci->xform; - xform.elements[2] = xform.elements[2].floor(); // Clean the undesirable fractional part distorting the final display position + xform.elements[2] = xform.elements[2].floor(); // Clean the undesirable fractional part distorting the final display position Rect2 global_rect = xform.xform(rect); global_rect.position += p_clip_rect.position; From a6cfc714bef73d7b2277bc435d541148702657d3 Mon Sep 17 00:00:00 2001 From: Manuel Montoto Date: Fri, 28 Aug 2020 00:56:39 +0200 Subject: [PATCH 4/5] Update rendering_server_canvas.cpp Cleaning the fractional part before makes it work even better. --- servers/rendering/rendering_server_canvas.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/servers/rendering/rendering_server_canvas.cpp b/servers/rendering/rendering_server_canvas.cpp index 98ad91d47207..149d47a36df6 100644 --- a/servers/rendering/rendering_server_canvas.cpp +++ b/servers/rendering/rendering_server_canvas.cpp @@ -111,9 +111,11 @@ void RenderingServerCanvas::_cull_canvas_item(Item *p_canvas_item, const Transfo ci->children_order_dirty = false; } + Transform2D p_transform2 = p_transform; + p_transform2.elements[2] = p_transform2.elements[2].floor(); // Clean the undesirable fractional part distorting the final display position + Transform2D xform = p_transform2 * ci->xform; + Rect2 rect = ci->get_rect(); - Transform2D xform = p_transform * ci->xform; - xform.elements[2] = xform.elements[2].floor(); // Clean the undesirable fractional part distorting the final display position Rect2 global_rect = xform.xform(rect); global_rect.position += p_clip_rect.position; From 8614a739471871cc3c1c1c0caa1d925ef20e3a49 Mon Sep 17 00:00:00 2001 From: Manuel Montoto Date: Fri, 28 Aug 2020 01:18:07 +0200 Subject: [PATCH 5/5] Update rendering_server_canvas.cpp Removing whitespace. --- servers/rendering/rendering_server_canvas.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers/rendering/rendering_server_canvas.cpp b/servers/rendering/rendering_server_canvas.cpp index 149d47a36df6..e245e190aa5b 100644 --- a/servers/rendering/rendering_server_canvas.cpp +++ b/servers/rendering/rendering_server_canvas.cpp @@ -114,7 +114,7 @@ void RenderingServerCanvas::_cull_canvas_item(Item *p_canvas_item, const Transfo Transform2D p_transform2 = p_transform; p_transform2.elements[2] = p_transform2.elements[2].floor(); // Clean the undesirable fractional part distorting the final display position Transform2D xform = p_transform2 * ci->xform; - + Rect2 rect = ci->get_rect(); Rect2 global_rect = xform.xform(rect); global_rect.position += p_clip_rect.position;