Blender V4.3
multires_reshape_util.cc File Reference
#include "multires_reshape.hh"
#include "MEM_guardedalloc.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_modifier_types.h"
#include "DNA_object_types.h"
#include "BLI_math_matrix.h"
#include "BLI_task.h"
#include "BKE_attribute.hh"
#include "BKE_customdata.hh"
#include "BKE_mesh_runtime.hh"
#include "BKE_multires.hh"
#include "BKE_subdiv.hh"
#include "BKE_subdiv_ccg.hh"
#include "BKE_subdiv_eval.hh"
#include "DEG_depsgraph_query.hh"

Go to the source code of this file.

Classes

struct  ForeachGridCoordinateTaskData
 

Functions

Construct/destruct reshape context
blender::bke::subdiv::Subdivmultires_reshape_create_subdiv (Depsgraph *depsgraph, Object *object, const MultiresModifierData *mmd)
 
static void context_zero (MultiresReshapeContext *reshape_context)
 
static void context_init_lookup (MultiresReshapeContext *reshape_context)
 
static void context_init_grid_pointers (MultiresReshapeContext *reshape_context)
 
static void context_init_common (MultiresReshapeContext *reshape_context)
 
static bool context_is_valid (MultiresReshapeContext *reshape_context)
 
static bool context_verify_or_free (MultiresReshapeContext *reshape_context)
 
bool multires_reshape_context_create_from_base_mesh (MultiresReshapeContext *reshape_context, Depsgraph *depsgraph, Object *object, MultiresModifierData *mmd)
 
bool multires_reshape_context_create_from_object (MultiresReshapeContext *reshape_context, Depsgraph *depsgraph, Object *object, MultiresModifierData *mmd)
 
bool multires_reshape_context_create_from_ccg (MultiresReshapeContext *reshape_context, SubdivCCG *subdiv_ccg, Mesh *base_mesh, int top_level)
 
bool multires_reshape_context_create_from_modifier (MultiresReshapeContext *reshape_context, Object *object, MultiresModifierData *mmd, int top_level)
 
bool multires_reshape_context_create_from_subdiv (MultiresReshapeContext *reshape_context, Object *object, MultiresModifierData *mmd, blender::bke::subdiv::Subdiv *subdiv, int top_level)
 
void multires_reshape_free_original_grids (MultiresReshapeContext *reshape_context)
 
void multires_reshape_context_free (MultiresReshapeContext *reshape_context)
 
Helper accessors
int multires_reshape_grid_to_face_index (const MultiresReshapeContext *reshape_context, int grid_index)
 
int multires_reshape_grid_to_corner (const MultiresReshapeContext *reshape_context, int grid_index)
 
bool multires_reshape_is_quad_face (const MultiresReshapeContext *reshape_context, int face_index)
 
int multires_reshape_grid_to_ptex_index (const MultiresReshapeContext *reshape_context, int grid_index)
 
PTexCoord multires_reshape_grid_coord_to_ptex (const MultiresReshapeContext *reshape_context, const GridCoord *grid_coord)
 
GridCoord multires_reshape_ptex_coord_to_grid (const MultiresReshapeContext *reshape_context, const PTexCoord *ptex_coord)
 
void multires_reshape_tangent_matrix_for_corner (const MultiresReshapeContext *reshape_context, const int face_index, const int corner, const float dPdu[3], const float dPdv[3], float r_tangent_matrix[3][3])
 
ReshapeGridElement multires_reshape_grid_element_for_grid_coord (const MultiresReshapeContext *reshape_context, const GridCoord *grid_coord)
 
ReshapeGridElement multires_reshape_grid_element_for_ptex_coord (const MultiresReshapeContext *reshape_context, const PTexCoord *ptex_coord)
 
ReshapeConstGridElement multires_reshape_orig_grid_element_for_grid_coord (const MultiresReshapeContext *reshape_context, const GridCoord *grid_coord)
 
Sample limit surface of the base mesh
void multires_reshape_evaluate_limit_at_grid (const MultiresReshapeContext *reshape_context, const GridCoord *grid_coord, float r_P[3], float r_tangent_matrix[3][3])
 
Custom data preparation
static void allocate_displacement_grid (MDisps *displacement_grid, const int level)
 
static void ensure_displacement_grid (MDisps *displacement_grid, const int level)
 
static void ensure_displacement_grids (Mesh *mesh, const int grid_level)
 
static void ensure_mask_grids (Mesh *mesh, const int level)
 
void multires_reshape_ensure_grids (Mesh *mesh, const int level)
 
MDISPS
static void assign_final_coords_from_mdisps (const MultiresReshapeContext *reshape_context, const GridCoord *grid_coord, void *)
 
void multires_reshape_assign_final_coords_from_mdisps (const MultiresReshapeContext *reshape_context)
 
static void assign_final_elements_from_orig_mdisps (const MultiresReshapeContext *reshape_context, const GridCoord *grid_coord, void *)
 
void multires_reshape_assign_final_elements_from_orig_mdisps (const MultiresReshapeContext *reshape_context)
 

Displacement, space conversion

using ForeachGridCoordinateCallback
 
void multires_reshape_store_original_grids (MultiresReshapeContext *reshape_context)
 
static void foreach_grid_face_coordinate_task (void *__restrict userdata_v, const int face_index, const TaskParallelTLS *__restrict)
 
static void foreach_grid_coordinate (const MultiresReshapeContext *reshape_context, const int level, ForeachGridCoordinateCallback callback, void *userdata_v)
 
static void object_grid_element_to_tangent_displacement (const MultiresReshapeContext *reshape_context, const GridCoord *grid_coord, void *)
 
void multires_reshape_object_grids_to_tangent_displacement (const MultiresReshapeContext *reshape_context)
 

Typedef Documentation

◆ ForeachGridCoordinateCallback

Initial value:
void (*)(const MultiresReshapeContext *reshape_context,
const GridCoord *grid_coord,
void *userdata_v)

Definition at line 669 of file multires_reshape_util.cc.

Function Documentation

◆ allocate_displacement_grid()

static void allocate_displacement_grid ( MDisps * displacement_grid,
const int level )
static

◆ assign_final_coords_from_mdisps()

static void assign_final_coords_from_mdisps ( const MultiresReshapeContext * reshape_context,
const GridCoord * grid_coord,
void *  )
static

◆ assign_final_elements_from_orig_mdisps()

◆ context_init_common()

◆ context_init_grid_pointers()

◆ context_init_lookup()

◆ context_is_valid()

static bool context_is_valid ( MultiresReshapeContext * reshape_context)
static

Definition at line 129 of file multires_reshape_util.cc.

References MultiresReshapeContext::mdisps.

Referenced by context_verify_or_free().

◆ context_verify_or_free()

◆ context_zero()

◆ ensure_displacement_grid()

static void ensure_displacement_grid ( MDisps * displacement_grid,
const int level )
static

◆ ensure_displacement_grids()

static void ensure_displacement_grids ( Mesh * mesh,
const int grid_level )
static

◆ ensure_mask_grids()

◆ foreach_grid_coordinate()

◆ foreach_grid_face_coordinate_task()

static void foreach_grid_face_coordinate_task ( void *__restrict userdata_v,
const int face_index,
const TaskParallelTLS * __restrict )
static

◆ multires_reshape_assign_final_coords_from_mdisps()

void multires_reshape_assign_final_coords_from_mdisps ( const MultiresReshapeContext * reshape_context)

◆ multires_reshape_assign_final_elements_from_orig_mdisps()

void multires_reshape_assign_final_elements_from_orig_mdisps ( const MultiresReshapeContext * reshape_context)

Reads from original #CD_MIDTSPS, writes to the current mesh CD_MDISPS.

Definition at line 825 of file multires_reshape_util.cc.

References assign_final_elements_from_orig_mdisps(), foreach_grid_coordinate(), MultiresReshapeContext::level, and MultiresReshapeContext::top.

Referenced by multiresModifier_subdivide_to_level().

◆ multires_reshape_context_create_from_base_mesh()

◆ multires_reshape_context_create_from_ccg()

◆ multires_reshape_context_create_from_modifier()

◆ multires_reshape_context_create_from_object()

◆ multires_reshape_context_create_from_subdiv()

◆ multires_reshape_context_free()

◆ multires_reshape_create_subdiv()

blender::bke::subdiv::Subdiv * multires_reshape_create_subdiv ( Depsgraph * depsgraph,
Object * object,
const MultiresModifierData * mmd )

Create subdivision surface descriptor which is configured for surface evaluation at a given multi-res modifier.

Definition at line 35 of file multires_reshape_util.cc.

References BKE_multires_subdiv_settings_init(), CD_MASK_BAREMESH, DEG_get_evaluated_object(), DEG_get_evaluated_scene(), and depsgraph.

Referenced by multires_reshape_context_create_from_base_mesh(), multires_reshape_context_create_from_modifier(), and multires_reshape_context_create_from_object().

◆ multires_reshape_ensure_grids()

void multires_reshape_ensure_grids ( Mesh * mesh,
int level )

◆ multires_reshape_evaluate_limit_at_grid()

◆ multires_reshape_free_original_grids()

◆ multires_reshape_grid_coord_to_ptex()

◆ multires_reshape_grid_element_for_grid_coord()

◆ multires_reshape_grid_element_for_ptex_coord()

ReshapeGridElement multires_reshape_grid_element_for_ptex_coord ( const MultiresReshapeContext * reshape_context,
const PTexCoord * ptex_coord )

◆ multires_reshape_grid_to_corner()

int multires_reshape_grid_to_corner ( const MultiresReshapeContext * reshape_context,
int grid_index )

◆ multires_reshape_grid_to_face_index()

int multires_reshape_grid_to_face_index ( const MultiresReshapeContext * reshape_context,
int grid_index )

◆ multires_reshape_grid_to_ptex_index()

int multires_reshape_grid_to_ptex_index ( const MultiresReshapeContext * reshape_context,
int grid_index )

◆ multires_reshape_is_quad_face()

◆ multires_reshape_object_grids_to_tangent_displacement()

◆ multires_reshape_orig_grid_element_for_grid_coord()

◆ multires_reshape_ptex_coord_to_grid()

◆ multires_reshape_store_original_grids()

◆ multires_reshape_tangent_matrix_for_corner()

void multires_reshape_tangent_matrix_for_corner ( const MultiresReshapeContext * reshape_context,
int face_index,
int corner,
const float dPdu[3],
const float dPdv[3],
float r_tangent_matrix[3][3] )

Calculate tangent matrix which converts displacement to a object vector. Is calculated for the given surface derivatives at a given base face corner.

Definition at line 459 of file multires_reshape_util.cc.

References BKE_multires_construct_tangent_matrix(), and multires_reshape_is_quad_face().

Referenced by multires_reshape_evaluate_limit_at_grid().

◆ object_grid_element_to_tangent_displacement()

static void object_grid_element_to_tangent_displacement ( const MultiresReshapeContext * reshape_context,
const GridCoord * grid_coord,
void *  )
static