From 8671836b76e8723a1d9021f8d7bf56ce5fdcc6f3 Mon Sep 17 00:00:00 2001 From: Mateusz Adamczyk Date: Sat, 8 Oct 2016 12:33:10 +0200 Subject: [PATCH] Added simple check to viewport, if matrix32 is invesile (https://github.com/godotengine/godot/issues/6296). --- core/math/math_2d.cpp | 2 +- scene/main/viewport.cpp | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/core/math/math_2d.cpp b/core/math/math_2d.cpp index 2cc11aa7387..e616f05914f 100644 --- a/core/math/math_2d.cpp +++ b/core/math/math_2d.cpp @@ -424,7 +424,7 @@ Matrix32 Matrix32::inverse() const { void Matrix32::affine_invert() { - float det = elements[0][0]*elements[1][1] - elements[1][0]*elements[0][1]; + float det = basis_determinant(); ERR_FAIL_COND(det==0); float idet = 1.0 / det; diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index b22d1fcdf44..0c243bd4739 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -1715,6 +1715,9 @@ Control* Viewport::_gui_find_control_at_pos(CanvasItem* p_node,const Point2& p_g } Matrix32 matrix = p_xform * p_node->get_transform(); + // matrix.basis_determinant() == 0.0f implies that node does not exist on scene + if(matrix.basis_determinant() == 0.0f) + return NULL; if (!c || !c->clips_input() || c->has_point(matrix.affine_inverse().xform(p_global))) {