Browse Source

Rearrange TriangleMesh stack level incrementation to fix MSVC compiler optimization bug

SaracenOne 3 years ago
parent
commit
8fbed3d582
1 changed files with 10 additions and 10 deletions
  1. 10 10
      core/math/triangle_mesh.cpp

+ 10 - 10
core/math/triangle_mesh.cpp

@@ -231,14 +231,14 @@ Vector3 TriangleMesh::get_area_normal(const AABB &p_aabb) const {
 			}
 			}
 			case VISIT_LEFT_BIT: {
 			case VISIT_LEFT_BIT: {
 				stack[level] = (VISIT_RIGHT_BIT << VISITED_BIT_SHIFT) | node;
 				stack[level] = (VISIT_RIGHT_BIT << VISITED_BIT_SHIFT) | node;
-				stack[level + 1] = b.left | TEST_AABB_BIT;
 				level++;
 				level++;
+				stack[level] = b.left | TEST_AABB_BIT;
 				continue;
 				continue;
 			}
 			}
 			case VISIT_RIGHT_BIT: {
 			case VISIT_RIGHT_BIT: {
 				stack[level] = (VISIT_DONE_BIT << VISITED_BIT_SHIFT) | node;
 				stack[level] = (VISIT_DONE_BIT << VISITED_BIT_SHIFT) | node;
-				stack[level + 1] = b.right | TEST_AABB_BIT;
 				level++;
 				level++;
+				stack[level] = b.right | TEST_AABB_BIT;
 				continue;
 				continue;
 			}
 			}
 			case VISIT_DONE_BIT: {
 			case VISIT_DONE_BIT: {
@@ -331,14 +331,14 @@ bool TriangleMesh::intersect_segment(const Vector3 &p_begin, const Vector3 &p_en
 			}
 			}
 			case VISIT_LEFT_BIT: {
 			case VISIT_LEFT_BIT: {
 				stack[level] = (VISIT_RIGHT_BIT << VISITED_BIT_SHIFT) | node;
 				stack[level] = (VISIT_RIGHT_BIT << VISITED_BIT_SHIFT) | node;
-				stack[level + 1] = b.left | TEST_AABB_BIT;
 				level++;
 				level++;
+				stack[level] = b.left | TEST_AABB_BIT;
 				continue;
 				continue;
 			}
 			}
 			case VISIT_RIGHT_BIT: {
 			case VISIT_RIGHT_BIT: {
 				stack[level] = (VISIT_DONE_BIT << VISITED_BIT_SHIFT) | node;
 				stack[level] = (VISIT_DONE_BIT << VISITED_BIT_SHIFT) | node;
-				stack[level + 1] = b.right | TEST_AABB_BIT;
 				level++;
 				level++;
+				stack[level] = b.right | TEST_AABB_BIT;
 				continue;
 				continue;
 			}
 			}
 			case VISIT_DONE_BIT: {
 			case VISIT_DONE_BIT: {
@@ -431,14 +431,14 @@ bool TriangleMesh::intersect_ray(const Vector3 &p_begin, const Vector3 &p_dir, V
 			}
 			}
 			case VISIT_LEFT_BIT: {
 			case VISIT_LEFT_BIT: {
 				stack[level] = (VISIT_RIGHT_BIT << VISITED_BIT_SHIFT) | node;
 				stack[level] = (VISIT_RIGHT_BIT << VISITED_BIT_SHIFT) | node;
-				stack[level + 1] = b.left | TEST_AABB_BIT;
 				level++;
 				level++;
+				stack[level] = b.left | TEST_AABB_BIT;
 				continue;
 				continue;
 			}
 			}
 			case VISIT_RIGHT_BIT: {
 			case VISIT_RIGHT_BIT: {
 				stack[level] = (VISIT_DONE_BIT << VISITED_BIT_SHIFT) | node;
 				stack[level] = (VISIT_DONE_BIT << VISITED_BIT_SHIFT) | node;
-				stack[level + 1] = b.right | TEST_AABB_BIT;
 				level++;
 				level++;
+				stack[level] = b.right | TEST_AABB_BIT;
 				continue;
 				continue;
 			}
 			}
 			case VISIT_DONE_BIT: {
 			case VISIT_DONE_BIT: {
@@ -551,14 +551,14 @@ bool TriangleMesh::intersect_convex_shape(const Plane *p_planes, int p_plane_cou
 			}
 			}
 			case VISIT_LEFT_BIT: {
 			case VISIT_LEFT_BIT: {
 				stack[level] = (VISIT_RIGHT_BIT << VISITED_BIT_SHIFT) | node;
 				stack[level] = (VISIT_RIGHT_BIT << VISITED_BIT_SHIFT) | node;
-				stack[level + 1] = b.left | TEST_AABB_BIT;
 				level++;
 				level++;
+				stack[level] = b.left | TEST_AABB_BIT;
 				continue;
 				continue;
 			}
 			}
 			case VISIT_RIGHT_BIT: {
 			case VISIT_RIGHT_BIT: {
 				stack[level] = (VISIT_DONE_BIT << VISITED_BIT_SHIFT) | node;
 				stack[level] = (VISIT_DONE_BIT << VISITED_BIT_SHIFT) | node;
-				stack[level + 1] = b.right | TEST_AABB_BIT;
 				level++;
 				level++;
+				stack[level] = b.right | TEST_AABB_BIT;
 				continue;
 				continue;
 			}
 			}
 			case VISIT_DONE_BIT: {
 			case VISIT_DONE_BIT: {
@@ -644,14 +644,14 @@ bool TriangleMesh::inside_convex_shape(const Plane *p_planes, int p_plane_count,
 			}
 			}
 			case VISIT_LEFT_BIT: {
 			case VISIT_LEFT_BIT: {
 				stack[level] = (VISIT_RIGHT_BIT << VISITED_BIT_SHIFT) | node;
 				stack[level] = (VISIT_RIGHT_BIT << VISITED_BIT_SHIFT) | node;
-				stack[level + 1] = b.left | TEST_AABB_BIT;
 				level++;
 				level++;
+				stack[level] = b.left | TEST_AABB_BIT;
 				continue;
 				continue;
 			}
 			}
 			case VISIT_RIGHT_BIT: {
 			case VISIT_RIGHT_BIT: {
 				stack[level] = (VISIT_DONE_BIT << VISITED_BIT_SHIFT) | node;
 				stack[level] = (VISIT_DONE_BIT << VISITED_BIT_SHIFT) | node;
-				stack[level + 1] = b.right | TEST_AABB_BIT;
 				level++;
 				level++;
+				stack[level] = b.right | TEST_AABB_BIT;
 				continue;
 				continue;
 			}
 			}
 			case VISIT_DONE_BIT: {
 			case VISIT_DONE_BIT: {