Skip to content

Commit

Permalink
Merge pull request godotengine#82436 from Rindbee/fix-axis-being-mixe…
Browse files Browse the repository at this point in the history
…d-up

Fix axis getting mixed up when split leaf
  • Loading branch information
akien-mga committed Sep 27, 2023
2 parents d616c3e + 0156860 commit ec62b8a
Showing 1 changed file with 9 additions and 9 deletions.
18 changes: 9 additions & 9 deletions core/math/bvh_split.inc
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ void _split_leaf_sort_groups_simple(int &num_a, int &num_b, uint16_t *group_a, u
group_b[num_b++] = ind;

// remove from a
group_a[0] = group_a[num_a - 1];
num_a--;
group_a[0] = group_a[num_a];
return;
}

Expand All @@ -30,15 +30,15 @@ void _split_leaf_sort_groups_simple(int &num_a, int &num_b, uint16_t *group_a, u

int order[POINT::AXIS_COUNT];

order[0] = size.min_axis_index();
order[POINT::AXIS_COUNT - 1] = size.max_axis_index();
order[0] = size.max_axis_index(); // The longest axis.
order[POINT::AXIS_COUNT - 1] = size.min_axis_index(); // The shortest axis.

static_assert(POINT::AXIS_COUNT <= 3, "BVH POINT::AXIS_COUNT has unexpected size");
if constexpr (POINT::AXIS_COUNT == 3) {
order[1] = 3 - (order[0] + order[2]);
}

// simplest case, split on the longest axis
// Simplest case, split on the longest axis.
int split_axis = order[0];
for (int a = 0; a < num_a; a++) {
uint32_t ind = group_a[a];
Expand All @@ -48,8 +48,8 @@ void _split_leaf_sort_groups_simple(int &num_a, int &num_b, uint16_t *group_a, u
group_b[num_b++] = ind;

// remove from a
group_a[a] = group_a[num_a - 1];
num_a--;
group_a[a] = group_a[num_a];

// do this one again, as it has been replaced
a--;
Expand All @@ -67,7 +67,7 @@ void _split_leaf_sort_groups_simple(int &num_a, int &num_b, uint16_t *group_a, u
}
num_b = 0;

// now calculate the best split
// Now calculate the best split.
for (int axis = 1; axis < POINT::AXIS_COUNT; axis++) {
split_axis = order[axis];
int count = 0;
Expand Down Expand Up @@ -105,8 +105,8 @@ void _split_leaf_sort_groups_simple(int &num_a, int &num_b, uint16_t *group_a, u
group_b[num_b++] = ind;

// remove from a
group_a[a] = group_a[num_a - 1];
num_a--;
group_a[a] = group_a[num_a];

// do this one again, as it has been replaced
a--;
Expand All @@ -123,8 +123,8 @@ void _split_leaf_sort_groups_simple(int &num_a, int &num_b, uint16_t *group_a, u
group_b[num_b++] = ind;

// remove from a
group_a[0] = group_a[num_a - 1];
num_a--;
group_a[0] = group_a[num_a];
}
// opposite problem! :)
if (!num_a) {
Expand All @@ -134,8 +134,8 @@ void _split_leaf_sort_groups_simple(int &num_a, int &num_b, uint16_t *group_a, u
group_a[num_a++] = ind;

// remove from b
group_b[0] = group_b[num_b - 1];
num_b--;
group_b[0] = group_b[num_b];
}
}

Expand Down

0 comments on commit ec62b8a

Please sign in to comment.