Blender  V3.3
Classes
multires_reshape_util.c File Reference
#include "multires_reshape.h"
#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 "DNA_scene_types.h"
#include "BLI_task.h"
#include "BKE_customdata.h"
#include "BKE_mesh.h"
#include "BKE_mesh_runtime.h"
#include "BKE_multires.h"
#include "BKE_subdiv.h"
#include "BKE_subdiv_ccg.h"
#include "BKE_subdiv_eval.h"
#include "BKE_subdiv_foreach.h"
#include "BKE_subdiv_mesh.h"
#include "DEG_depsgraph_query.h"

Go to the source code of this file.

Classes

struct  ForeachGridCoordinateTaskData
 

Functions

Construct/destruct reshape context
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_commoon (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, struct Object *object, struct MultiresModifierData *mmd, int top_level)
 
bool multires_reshape_context_create_from_subdiv (MultiresReshapeContext *reshape_context, struct Object *object, struct MultiresModifierData *mmd, struct 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 *UNUSED(userdata_v))
 
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 *UNUSED(userdata_v))
 
void multires_reshape_assign_final_elements_from_orig_mdisps (const MultiresReshapeContext *reshape_context)
 

Displacement, space conversion

typedef void(* ForeachGridCoordinateCallback) (const MultiresReshapeContext *reshape_context, const GridCoord *grid_coord, void *userdata_v)
 
typedef struct ForeachGridCoordinateTaskData ForeachGridCoordinateTaskData
 
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 UNUSED(tls))
 
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 *UNUSED(userdata_v))
 
void multires_reshape_object_grids_to_tangent_displacement (const MultiresReshapeContext *reshape_context)
 

Typedef Documentation

◆ ForeachGridCoordinateCallback

typedef void(* ForeachGridCoordinateCallback) (const MultiresReshapeContext *reshape_context, const GridCoord *grid_coord, void *userdata_v)

Definition at line 617 of file multires_reshape_util.c.

◆ ForeachGridCoordinateTaskData

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 UNUSEDuserdata_v 
)
static

◆ assign_final_elements_from_orig_mdisps()

static void assign_final_elements_from_orig_mdisps ( const MultiresReshapeContext reshape_context,
const GridCoord grid_coord,
void UNUSEDuserdata_v 
)
static

◆ context_init_commoon()

static void context_init_commoon ( MultiresReshapeContext reshape_context)
static

◆ context_init_grid_pointers()

static void context_init_grid_pointers ( MultiresReshapeContext reshape_context)
static

◆ context_init_lookup()

static void context_init_lookup ( MultiresReshapeContext reshape_context)
static

◆ context_is_valid()

static bool context_is_valid ( MultiresReshapeContext reshape_context)
static

Definition at line 121 of file multires_reshape_util.c.

References MultiresReshapeContext::mdisps, and NULL.

Referenced by context_verify_or_free().

◆ context_verify_or_free()

static bool context_verify_or_free ( MultiresReshapeContext reshape_context)
static

◆ context_zero()

static void context_zero ( MultiresReshapeContext reshape_context)
static

◆ 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()

static void ensure_mask_grids ( Mesh mesh,
const int  level 
)
static

◆ foreach_grid_coordinate()

static void foreach_grid_coordinate ( const MultiresReshapeContext reshape_context,
const int  level,
ForeachGridCoordinateCallback  callback,
void userdata_v 
)
static

◆ foreach_grid_face_coordinate_task()

static void foreach_grid_face_coordinate_task ( void *__restrict  userdata_v,
const int  face_index,
const TaskParallelTLS *__restrict   UNUSEDtls 
)
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 774 of file multires_reshape_util.c.

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

Referenced by multiresModifier_subdivide_to_level().

◆ multires_reshape_context_create_from_base_mesh()

bool multires_reshape_context_create_from_base_mesh ( MultiresReshapeContext reshape_context,
Depsgraph depsgraph,
Object object,
MultiresModifierData mmd 
)

◆ multires_reshape_context_create_from_ccg()

bool multires_reshape_context_create_from_ccg ( MultiresReshapeContext reshape_context,
SubdivCCG subdiv_ccg,
Mesh base_mesh,
int  top_level 
)

◆ multires_reshape_context_create_from_modifier()

bool multires_reshape_context_create_from_modifier ( MultiresReshapeContext reshape_context,
struct Object object,
struct MultiresModifierData mmd,
int  top_level 
)

◆ multires_reshape_context_create_from_object()

bool multires_reshape_context_create_from_object ( MultiresReshapeContext reshape_context,
struct Depsgraph depsgraph,
struct Object object,
struct MultiresModifierData mmd 
)

◆ multires_reshape_context_create_from_subdiv()

bool multires_reshape_context_create_from_subdiv ( MultiresReshapeContext reshape_context,
struct Object object,
struct MultiresModifierData mmd,
struct Subdiv subdiv,
int  top_level 
)

◆ multires_reshape_context_free()

void multires_reshape_context_free ( MultiresReshapeContext reshape_context)

◆ multires_reshape_create_subdiv()

Subdiv* multires_reshape_create_subdiv ( Depsgraph depsgraph,
Object object,
const MultiresModifierData mmd 
)

◆ multires_reshape_ensure_grids()

void multires_reshape_ensure_grids ( struct Mesh mesh,
int  level 
)

◆ multires_reshape_evaluate_limit_at_grid()

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] 
)

◆ multires_reshape_free_original_grids()

void multires_reshape_free_original_grids ( MultiresReshapeContext reshape_context)

◆ multires_reshape_grid_coord_to_ptex()

PTexCoord multires_reshape_grid_coord_to_ptex ( const MultiresReshapeContext reshape_context,
const GridCoord grid_coord 
)

◆ multires_reshape_grid_element_for_grid_coord()

ReshapeGridElement multires_reshape_grid_element_for_grid_coord ( const MultiresReshapeContext reshape_context,
const GridCoord 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()

bool multires_reshape_is_quad_face ( const MultiresReshapeContext reshape_context,
int  face_index 
)

◆ multires_reshape_object_grids_to_tangent_displacement()

void multires_reshape_object_grids_to_tangent_displacement ( const MultiresReshapeContext reshape_context)

◆ multires_reshape_orig_grid_element_for_grid_coord()

ReshapeConstGridElement multires_reshape_orig_grid_element_for_grid_coord ( const MultiresReshapeContext reshape_context,
const GridCoord grid_coord 
)

◆ multires_reshape_ptex_coord_to_grid()

GridCoord multires_reshape_ptex_coord_to_grid ( const MultiresReshapeContext reshape_context,
const PTexCoord ptex_coord 
)

◆ multires_reshape_store_original_grids()

void multires_reshape_store_original_grids ( MultiresReshapeContext reshape_context)

◆ 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 412 of file multires_reshape_util.c.

References BKE_multires_construct_tangent_matrix(), and multires_reshape_is_quad_face().

Referenced by multires_reshape_evaluate_limit_at_grid(), and reshape_subdiv_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 UNUSEDuserdata_v 
)
static