Refactor: Use C++ math type for ReshapeGridElement structs
Pull Request: https://projects.blender.org/blender/blender/pulls/141698
This commit is contained in:
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user