diff --git a/source/blender/blenkernel/intern/multires_reshape.hh b/source/blender/blenkernel/intern/multires_reshape.hh index 7fdc164857f..f69916655e4 100644 --- a/source/blender/blenkernel/intern/multires_reshape.hh +++ b/source/blender/blenkernel/intern/multires_reshape.hh @@ -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; }; diff --git a/source/blender/blenkernel/intern/multires_reshape_apply_base.cc b/source/blender/blenkernel/intern/multires_reshape_apply_base.cc index 36c18be29c5..a464dbac597 100644 --- a/source/blender/blenkernel/intern/multires_reshape_apply_base.cc +++ b/source/blender/blenkernel/intern/multires_reshape_apply_base.cc @@ -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; } diff --git a/source/blender/blenkernel/intern/multires_reshape_ccg.cc b/source/blender/blenkernel/intern/multires_reshape_ccg.cc index cf536cbafd7..2b9837f4474 100644 --- a/source/blender/blenkernel/intern/multires_reshape_ccg.cc +++ b/source/blender/blenkernel/intern/multires_reshape_ccg.cc @@ -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: diff --git a/source/blender/blenkernel/intern/multires_reshape_smooth.cc b/source/blender/blenkernel/intern/multires_reshape_smooth.cc index b3226d6e77e..0389f4c8e4d 100644 --- a/source/blender/blenkernel/intern/multires_reshape_smooth.cc +++ b/source/blender/blenkernel/intern/multires_reshape_smooth.cc @@ -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); diff --git a/source/blender/blenkernel/intern/multires_reshape_util.cc b/source/blender/blenkernel/intern/multires_reshape_util.cc index ae052256ae0..b8e11121e36 100644 --- a/source/blender/blenkernel/intern/multires_reshape_util.cc +++ b/source/blender/blenkernel/intern/multires_reshape_util.cc @@ -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( + 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; diff --git a/source/blender/blenkernel/intern/multires_reshape_vertcos.cc b/source/blender/blenkernel/intern/multires_reshape_vertcos.cc index f94117cbd52..ca28729f740 100644 --- a/source/blender/blenkernel/intern/multires_reshape_vertcos.cc +++ b/source/blender/blenkernel/intern/multires_reshape_vertcos.cc @@ -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 */