Refactor: Use C++ math type for ReshapeGridElement structs

Pull Request: https://projects.blender.org/blender/blender/pulls/141698
This commit is contained in:
Sean Kim
2025-07-15 00:01:12 +02:00
committed by Sean Kim
parent a138106fac
commit 8feef54afa
6 changed files with 25 additions and 25 deletions

View File

@@ -130,12 +130,12 @@ struct PTexCoord {
* This is where reshaped coordinates and mask values will be written to.
*/
struct ReshapeGridElement {
float *displacement;
blender::float3 *displacement;
float *mask;
};
struct ReshapeConstGridElement {
float displacement[3];
blender::float3 displacement;
float mask;
};

View File

@@ -12,7 +12,7 @@
#include "DNA_mesh_types.h"
#include "BLI_math_matrix.h"
#include "BLI_math_matrix.hh"
#include "BLI_math_vector.h"
#include "BKE_mesh.hh"
@@ -40,8 +40,8 @@ void multires_reshape_apply_base_update_mesh_coords(MultiresReshapeContext *resh
ReshapeConstGridElement grid_element = multires_reshape_orig_grid_element_for_grid_coord(
reshape_context, &grid_coord);
blender::float3 D;
mul_v3_m3v3(D, tangent_matrix.ptr(), grid_element.displacement);
const blender::float3 D = blender::math::transform_direction(tangent_matrix,
grid_element.displacement);
base_positions[corner_verts[loop_index]] = P + D;
}

View File

@@ -42,7 +42,7 @@ bool multires_reshape_assign_final_coords_from_ccg(const MultiresReshapeContext
reshape_context, &grid_coord);
BLI_assert(grid_element.displacement != nullptr);
memcpy(grid_element.displacement, positions[vert], sizeof(float[3]));
*grid_element.displacement = positions[vert];
/* NOTE: The sculpt mode might have SubdivCCG's data out of sync from what is stored in
* the original object. This happens in the following scenario:

View File

@@ -1024,8 +1024,8 @@ static void reshape_subdiv_refine_orig_P(
const ReshapeConstGridElement orig_grid_element =
multires_reshape_orig_grid_element_for_grid_coord(reshape_context, grid_coord);
blender::float3 D;
mul_v3_m3v3(D, tangent_matrix.ptr(), orig_grid_element.displacement);
const blender::float3 D = blender::math::transform_direction(tangent_matrix,
orig_grid_element.displacement);
r_P = limit_P + D;
}
@@ -1054,7 +1054,7 @@ static void reshape_subdiv_refine_final_P(
/* NOTE: At this point in reshape/propagate pipeline grid displacement is actually storing object
* vertices coordinates. */
copy_v3_v3(r_P, grid_element.displacement);
r_P = *grid_element.displacement;
}
static void reshape_subdiv_refine_final(const MultiresReshapeSmoothContext *reshape_smooth_context)
{
@@ -1254,8 +1254,8 @@ static void evaluate_final_original_point(
reshape_context, grid_coord, base_mesh_limit_P, base_mesh_tangent_matrix);
/* Convert original displacement from tangent space to object space. */
blender::float3 orig_displacement;
mul_v3_m3v3(orig_displacement, base_mesh_tangent_matrix.ptr(), orig_grid_element.displacement);
const blender::float3 orig_displacement = blender::math::transform_direction(
base_mesh_tangent_matrix, orig_grid_element.displacement);
/* Final point = limit surface + displacement. */
r_orig_final_P = base_mesh_limit_P + orig_displacement;
@@ -1301,7 +1301,7 @@ static void evaluate_higher_grid_positions_with_details(
ReshapeGridElement grid_element = multires_reshape_grid_element_for_grid_coord(
reshape_context, grid_coord);
add_v3_v3v3(grid_element.displacement, smooth_limit_P, smooth_delta);
*grid_element.displacement = smooth_limit_P + smooth_delta;
/* Propagate non-coordinate data. */
propagate_linear_data_delta(reshape_smooth_context, &grid_element, grid_coord);
@@ -1323,7 +1323,7 @@ static void evaluate_higher_grid_positions(MultiresReshapeSmoothContext *reshape
blender::bke::subdiv::eval_limit_point(
reshape_subdiv, ptex_coord->ptex_face_index, ptex_coord->u, ptex_coord->v, P);
copy_v3_v3(grid_element.displacement, P);
*grid_element.displacement = P;
/* Propagate non-coordinate data. */
propagate_linear_data_delta(reshape_smooth_context, &grid_element, grid_coord);

View File

@@ -476,7 +476,8 @@ ReshapeGridElement multires_reshape_grid_element_for_grid_coord(
if (reshape_context->mdisps != nullptr) {
MDisps *displacement_grid = &reshape_context->mdisps[grid_coord->grid_index];
grid_element.displacement = displacement_grid->disps[grid_element_index];
grid_element.displacement = reinterpret_cast<blender::float3 *>(
displacement_grid->disps[grid_element_index]);
}
if (reshape_context->grid_paint_masks != nullptr) {
@@ -507,7 +508,7 @@ ReshapeConstGridElement multires_reshape_orig_grid_element_for_grid_coord(
const int grid_x = lround(grid_coord->u * (grid_size - 1));
const int grid_y = lround(grid_coord->v * (grid_size - 1));
const int grid_element_index = grid_y * grid_size + grid_x;
copy_v3_v3(grid_element.displacement, displacement_grid->disps[grid_element_index]);
grid_element.displacement = displacement_grid->disps[grid_element_index];
}
}
@@ -741,12 +742,11 @@ static void object_grid_element_to_tangent_displacement(
ReshapeGridElement grid_element = multires_reshape_grid_element_for_grid_coord(reshape_context,
grid_coord);
blender::float3 D;
sub_v3_v3v3(D, grid_element.displacement, P);
blender::float3 D = *grid_element.displacement - P;
blender::float3 tangent_D = blender::math::transform_direction(inv_tangent_matrix, D);
copy_v3_v3(grid_element.displacement, tangent_D);
*grid_element.displacement = tangent_D;
}
void multires_reshape_object_grids_to_tangent_displacement(
@@ -777,10 +777,10 @@ static void assign_final_coords_from_mdisps(const MultiresReshapeContext *reshap
ReshapeGridElement grid_element = multires_reshape_grid_element_for_grid_coord(reshape_context,
grid_coord);
blender::float3 D;
mul_v3_m3v3(D, tangent_matrix.ptr(), grid_element.displacement);
const blender::float3 D = blender::math::transform_direction(tangent_matrix,
*grid_element.displacement);
add_v3_v3v3(grid_element.displacement, P, D);
*grid_element.displacement = P + D;
}
void multires_reshape_assign_final_coords_from_mdisps(
@@ -801,12 +801,12 @@ static void assign_final_elements_from_orig_mdisps(const MultiresReshapeContext
const ReshapeConstGridElement orig_grid_element =
multires_reshape_orig_grid_element_for_grid_coord(reshape_context, grid_coord);
blender::float3 D;
mul_v3_m3v3(D, tangent_matrix.ptr(), orig_grid_element.displacement);
blender::float3 D = blender::math::transform_direction(tangent_matrix,
orig_grid_element.displacement);
ReshapeGridElement grid_element = multires_reshape_grid_element_for_grid_coord(reshape_context,
grid_coord);
add_v3_v3v3(grid_element.displacement, P, D);
*grid_element.displacement = P + D;
if (grid_element.mask != nullptr) {
*grid_element.mask = orig_grid_element.mask;

View File

@@ -35,7 +35,7 @@ static void multires_reshape_vertcos_foreach_single_vertex(
ReshapeGridElement grid_element = multires_reshape_grid_element_for_grid_coord(
reshape_vertcos_context->reshape_context, grid_coord);
BLI_assert(grid_element.displacement != nullptr);
copy_v3_v3(grid_element.displacement, coordinate);
*grid_element.displacement = coordinate;
}
/* TODO(sergey): De-duplicate with similar function in multires_reshape_smooth.cc */