Blender  V3.3
Classes
subdiv_ccg.c File Reference
#include "BKE_subdiv_ccg.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "MEM_guardedalloc.h"
#include "BLI_ghash.h"
#include "BLI_math_bits.h"
#include "BLI_math_vector.h"
#include "BLI_task.h"
#include "BKE_DerivedMesh.h"
#include "BKE_ccg.h"
#include "BKE_global.h"
#include "BKE_mesh.h"
#include "BKE_subdiv.h"
#include "BKE_subdiv_eval.h"
#include "opensubdiv_topology_refiner_capi.h"

Go to the source code of this file.

Classes

struct  CCGEvalGridsData
 
struct  StaticOrHeapIntStorage
 
struct  RecalcInnerNormalsData
 
struct  RecalcInnerNormalsTLSData
 
struct  RecalcModifiedInnerNormalsData
 
struct  AverageInnerGridsData
 
struct  GridElementAccumulator
 
struct  AverageGridsBoundariesData
 
struct  AverageGridsBoundariesTLSData
 
struct  AverageGridsCornerData
 
struct  StitchFacesInnerGridsData
 

Functions

Various forward declarations
static void subdiv_ccg_average_all_boundaries_and_corners (SubdivCCG *subdiv_ccg, CCGKey *key)
 
static void subdiv_ccg_average_inner_face_grids (SubdivCCG *subdiv_ccg, CCGKey *key, SubdivCCGFace *face)
 
void subdiv_ccg_average_faces_boundaries_and_corners (SubdivCCG *subdiv_ccg, CCGKey *key, struct CCGFace **effected_faces, int num_effected_faces)
 
Generally useful internal helpers
static int num_element_float_get (const SubdivCCG *subdiv_ccg)
 
static int element_size_bytes_get (const SubdivCCG *subdiv_ccg)
 
Internal helpers for CCG creation
static void subdiv_ccg_init_layers (SubdivCCG *subdiv_ccg, const SubdivToCCGSettings *settings)
 
static int topology_refiner_count_face_corners (OpenSubdiv_TopologyRefiner *topology_refiner)
 
static void subdiv_ccg_alloc_elements (SubdivCCG *subdiv_ccg, Subdiv *subdiv)
 
Creation / evaluation
SubdivCCG * BKE_subdiv_to_ccg (Subdiv *subdiv, const SubdivToCCGSettings *settings, SubdivCCGMaskEvaluator *mask_evaluator, SubdivCCGMaterialFlagsEvaluator *material_flags_evaluator)
 
Mesh * BKE_subdiv_to_ccg_mesh (Subdiv *subdiv, const SubdivToCCGSettings *settings, const Mesh *coarse_mesh)
 
void BKE_subdiv_ccg_destroy (SubdivCCG *subdiv_ccg)
 
void BKE_subdiv_ccg_key (CCGKey *key, const SubdivCCG *subdiv_ccg, int level)
 
void BKE_subdiv_ccg_key_top_level (CCGKey *key, const SubdivCCG *subdiv_ccg)
 
Neighbors
void BKE_subdiv_ccg_print_coord (const char *message, const SubdivCCGCoord *coord)
 
bool BKE_subdiv_ccg_check_coord_valid (const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord)
 
BLI_INLINE void subdiv_ccg_neighbors_init (SubdivCCGNeighbors *neighbors, const int num_unique, const int num_duplicates)
 
BLI_INLINE bool is_corner_grid_coord (const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord)
 
BLI_INLINE bool is_boundary_grid_coord (const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord)
 
BLI_INLINE bool is_inner_edge_grid_coordinate (const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord)
 
BLI_INLINE SubdivCCGCoord coord_at_prev_row (const SubdivCCG *UNUSED(subdiv_ccg), const SubdivCCGCoord *coord)
 
BLI_INLINE SubdivCCGCoord coord_at_next_row (const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord)
 
BLI_INLINE SubdivCCGCoord coord_at_prev_col (const SubdivCCG *UNUSED(subdiv_ccg), const SubdivCCGCoord *coord)
 
BLI_INLINE SubdivCCGCoord coord_at_next_col (const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord)
 
static SubdivCCGCoord coord_step_inside_from_boundary (const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord)
 
BLI_INLINE int next_grid_index_from_coord (const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord)
 
BLI_INLINE int prev_grid_index_from_coord (const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord)
 
static void neighbor_coords_corner_center_get (const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord, const bool include_duplicates, SubdivCCGNeighbors *r_neighbors)
 
static int adjacent_vertex_index_from_coord (const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord)
 
static void neighbor_coords_corner_vertex_get (const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord, const bool include_duplicates, SubdivCCGNeighbors *r_neighbors)
 
static int adjacent_edge_index_from_coord (const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord)
 
static int adjacent_edge_point_index_from_coord (const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord, const int adjacent_edge_index)
 
static int next_adjacent_edge_point_index (const SubdivCCG *subdiv_ccg, const int point_index)
 
static int prev_adjacent_edge_point_index (const SubdivCCG *subdiv_ccg, const int point_index)
 
static int adjacent_grid_corner_point_index_on_edge (const SubdivCCG *subdiv_ccg, const int point_index)
 
static void neighbor_coords_edge_get (const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord, const bool include_duplicates, SubdivCCGNeighbors *r_neighbors)
 
static void neighbor_coords_corner_edge_get (const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord, const bool include_duplicates, SubdivCCGNeighbors *r_neighbors)
 
static void neighbor_coords_corner_get (const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord, const bool include_duplicates, SubdivCCGNeighbors *r_neighbors)
 
static void neighbor_coords_boundary_inner_get (const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord, const bool include_duplicates, SubdivCCGNeighbors *r_neighbors)
 
static void neighbor_coords_boundary_outer_get (const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord, const bool include_duplicates, SubdivCCGNeighbors *r_neighbors)
 
static void neighbor_coords_boundary_get (const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord, const bool include_duplicates, SubdivCCGNeighbors *r_neighbors)
 
static void neighbor_coords_inner_get (const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord, SubdivCCGNeighbors *r_neighbors)
 
void BKE_subdiv_ccg_neighbor_coords_get (const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord, const bool include_duplicates, SubdivCCGNeighbors *r_neighbors)
 
int BKE_subdiv_ccg_grid_to_face_index (const SubdivCCG *subdiv_ccg, const int grid_index)
 
const int * BKE_subdiv_ccg_start_face_grid_index_ensure (SubdivCCG *subdiv_ccg)
 
const int * BKE_subdiv_ccg_start_face_grid_index_get (const SubdivCCG *subdiv_ccg)
 
static void adjacet_vertices_index_from_adjacent_edge (const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord, const MLoop *mloop, const MPoly *mpoly, int *r_v1, int *r_v2)
 
SubdivCCGAdjacencyType BKE_subdiv_ccg_coarse_mesh_adjacency_info_get (const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord, const MLoop *mloop, const MPoly *mpoly, int *r_v1, int *r_v2)
 
void BKE_subdiv_ccg_grid_hidden_ensure (SubdivCCG *subdiv_ccg, int grid_index)
 
static void subdiv_ccg_coord_to_ptex_coord (const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord, int *r_ptex_face_index, float *r_u, float *r_v)
 
void BKE_subdiv_ccg_eval_limit_point (const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord, float r_point[3])
 

Grids evaluation

typedef struct CCGEvalGridsData CCGEvalGridsData
 
typedef struct StaticOrHeapIntStorage StaticOrHeapIntStorage
 
static void subdiv_ccg_eval_grid_element_limit (CCGEvalGridsData *data, const int ptex_face_index, const float u, const float v, unsigned char *element)
 
static void subdiv_ccg_eval_grid_element_mask (CCGEvalGridsData *data, const int ptex_face_index, const float u, const float v, unsigned char *element)
 
static void subdiv_ccg_eval_grid_element (CCGEvalGridsData *data, const int ptex_face_index, const float u, const float v, unsigned char *element)
 
static void subdiv_ccg_eval_regular_grid (CCGEvalGridsData *data, const int face_index)
 
static void subdiv_ccg_eval_special_grid (CCGEvalGridsData *data, const int face_index)
 
static void subdiv_ccg_eval_grids_task (void *__restrict userdata_v, const int face_index, const TaskParallelTLS *__restrict UNUSED(tls))
 
static bool subdiv_ccg_evaluate_grids (SubdivCCG *subdiv_ccg, Subdiv *subdiv, SubdivCCGMaskEvaluator *mask_evaluator, SubdivCCGMaterialFlagsEvaluator *material_flags_evaluator)
 
static void subdiv_ccg_init_faces (SubdivCCG *subdiv_ccg)
 
static void static_or_heap_storage_init (StaticOrHeapIntStorage *storage)
 
static int * static_or_heap_storage_get (StaticOrHeapIntStorage *storage, int heap_len)
 
static void static_or_heap_storage_free (StaticOrHeapIntStorage *storage)
 
static void subdiv_ccg_allocate_adjacent_edges (SubdivCCG *subdiv_ccg, const int num_edges)
 
static SubdivCCGCoord subdiv_ccg_coord (int grid_index, int x, int y)
 
static CCGElem * subdiv_ccg_coord_to_elem (const CCGKey *key, const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord)
 
static SubdivCCGCoord * subdiv_ccg_adjacent_edge_add_face (SubdivCCG *subdiv_ccg, SubdivCCGAdjacentEdge *adjacent_edge)
 
static void subdiv_ccg_init_faces_edge_neighborhood (SubdivCCG *subdiv_ccg)
 
static void subdiv_ccg_allocate_adjacent_vertices (SubdivCCG *subdiv_ccg, const int num_vertices)
 
static SubdivCCGCoord * subdiv_ccg_adjacent_vertex_add_face (SubdivCCGAdjacentVertex *adjacent_vertex)
 
static void subdiv_ccg_init_faces_vertex_neighborhood (SubdivCCG *subdiv_ccg)
 
static void subdiv_ccg_init_faces_neighborhood (SubdivCCG *subdiv_ccg)
 

Normals

typedef struct RecalcInnerNormalsData RecalcInnerNormalsData
 
typedef struct RecalcInnerNormalsTLSData RecalcInnerNormalsTLSData
 
typedef struct RecalcModifiedInnerNormalsData RecalcModifiedInnerNormalsData
 
static void subdiv_ccg_recalc_inner_face_normals (SubdivCCG *subdiv_ccg, CCGKey *key, RecalcInnerNormalsTLSData *tls, const int grid_index)
 
static void subdiv_ccg_average_inner_face_normals (SubdivCCG *subdiv_ccg, CCGKey *key, RecalcInnerNormalsTLSData *tls, const int grid_index)
 
static void subdiv_ccg_recalc_inner_normal_task (void *__restrict userdata_v, const int grid_index, const TaskParallelTLS *__restrict tls_v)
 
static void subdiv_ccg_recalc_inner_normal_free (const void *__restrict UNUSED(userdata), void *__restrict tls_v)
 
static void subdiv_ccg_recalc_inner_grid_normals (SubdivCCG *subdiv_ccg)
 
void BKE_subdiv_ccg_recalc_normals (SubdivCCG *subdiv_ccg)
 
static void subdiv_ccg_recalc_modified_inner_normal_task (void *__restrict userdata_v, const int face_index, const TaskParallelTLS *__restrict tls_v)
 
static void subdiv_ccg_recalc_modified_inner_normal_free (const void *__restrict UNUSED(userdata), void *__restrict tls_v)
 
static void subdiv_ccg_recalc_modified_inner_grid_normals (SubdivCCG *subdiv_ccg, struct CCGFace **effected_faces, int num_effected_faces)
 
void BKE_subdiv_ccg_update_normals (SubdivCCG *subdiv_ccg, struct CCGFace **effected_faces, int num_effected_faces)
 

Boundary averaging/stitching

typedef struct AverageInnerGridsData AverageInnerGridsData
 
typedef struct GridElementAccumulator GridElementAccumulator
 
typedef struct AverageGridsBoundariesData AverageGridsBoundariesData
 
typedef struct AverageGridsBoundariesTLSData AverageGridsBoundariesTLSData
 
typedef struct AverageGridsCornerData AverageGridsCornerData
 
typedef struct StitchFacesInnerGridsData StitchFacesInnerGridsData
 
static void average_grid_element_value_v3 (float a[3], float b[3])
 
static void average_grid_element (SubdivCCG *subdiv_ccg, CCGKey *key, CCGElem *grid_element_a, CCGElem *grid_element_b)
 
static void element_accumulator_init (GridElementAccumulator *accumulator)
 
static void element_accumulator_add (GridElementAccumulator *accumulator, const SubdivCCG *subdiv_ccg, CCGKey *key, CCGElem *grid_element)
 
static void element_accumulator_mul_fl (GridElementAccumulator *accumulator, const float f)
 
static void element_accumulator_copy (SubdivCCG *subdiv_ccg, CCGKey *key, CCGElem *destination, const GridElementAccumulator *accumulator)
 
static void subdiv_ccg_average_inner_grids_task (void *__restrict userdata_v, const int face_index, const TaskParallelTLS *__restrict UNUSED(tls_v))
 
static void subdiv_ccg_average_grids_boundary (SubdivCCG *subdiv_ccg, CCGKey *key, SubdivCCGAdjacentEdge *adjacent_edge, AverageGridsBoundariesTLSData *tls)
 
static void subdiv_ccg_average_grids_boundaries_task (void *__restrict userdata_v, const int n, const TaskParallelTLS *__restrict tls_v)
 
static void subdiv_ccg_average_grids_boundaries_free (const void *__restrict UNUSED(userdata), void *__restrict tls_v)
 
static void subdiv_ccg_average_grids_corners (SubdivCCG *subdiv_ccg, CCGKey *key, SubdivCCGAdjacentVertex *adjacent_vertex)
 
static void subdiv_ccg_average_grids_corners_task (void *__restrict userdata_v, const int n, const TaskParallelTLS *__restrict UNUSED(tls_v))
 
static void subdiv_ccg_average_boundaries (SubdivCCG *subdiv_ccg, CCGKey *key, const int *adjacent_edge_index_map, int num_adjacent_edges)
 
static void subdiv_ccg_average_all_boundaries (SubdivCCG *subdiv_ccg, CCGKey *key)
 
static void subdiv_ccg_average_corners (SubdivCCG *subdiv_ccg, CCGKey *key, const int *adjacent_vert_index_map, int num_adjacent_vertices)
 
static void subdiv_ccg_average_all_corners (SubdivCCG *subdiv_ccg, CCGKey *key)
 
void BKE_subdiv_ccg_average_grids (SubdivCCG *subdiv_ccg)
 
static void subdiv_ccg_affected_face_adjacency (SubdivCCG *subdiv_ccg, struct CCGFace **effected_faces, int num_effected_faces, GSet *r_adjacent_vertices, GSet *r_adjacent_edges)
 
static void subdiv_ccg_stitch_face_inner_grids_task (void *__restrict userdata_v, const int face_index, const TaskParallelTLS *__restrict UNUSED(tls_v))
 
void BKE_subdiv_ccg_average_stitch_faces (SubdivCCG *subdiv_ccg, struct CCGFace **effected_faces, int num_effected_faces)
 
void BKE_subdiv_ccg_topology_counters (const SubdivCCG *subdiv_ccg, int *r_num_vertices, int *r_num_edges, int *r_num_faces, int *r_num_loops)
 

Typedef Documentation

◆ AverageGridsBoundariesData

◆ AverageGridsBoundariesTLSData

◆ AverageGridsCornerData

◆ AverageInnerGridsData

◆ CCGEvalGridsData

◆ GridElementAccumulator

◆ RecalcInnerNormalsData

◆ RecalcInnerNormalsTLSData

◆ RecalcModifiedInnerNormalsData

◆ StaticOrHeapIntStorage

◆ StitchFacesInnerGridsData

Function Documentation

◆ adjacent_edge_index_from_coord()

static int adjacent_edge_index_from_coord ( const SubdivCCG *  subdiv_ccg,
const SubdivCCGCoord *  coord 
)
static

◆ adjacent_edge_point_index_from_coord()

static int adjacent_edge_point_index_from_coord ( const SubdivCCG *  subdiv_ccg,
const SubdivCCGCoord *  coord,
const int  adjacent_edge_index 
)
static

◆ adjacent_grid_corner_point_index_on_edge()

static int adjacent_grid_corner_point_index_on_edge ( const SubdivCCG *  subdiv_ccg,
const int  point_index 
)
static

Definition at line 1732 of file subdiv_ccg.c.

References SubdivCCG::grid_size, and point_index.

Referenced by neighbor_coords_edge_get().

◆ adjacent_vertex_index_from_coord()

static int adjacent_vertex_index_from_coord ( const SubdivCCG *  subdiv_ccg,
const SubdivCCGCoord *  coord 
)
static

◆ adjacet_vertices_index_from_adjacent_edge()

static void adjacet_vertices_index_from_adjacent_edge ( const SubdivCCG *  subdiv_ccg,
const SubdivCCGCoord *  coord,
const MLoop *  mloop,
const MPoly *  mpoly,
int *  r_v1,
int *  r_v2 
)
static

◆ average_grid_element()

static void average_grid_element ( SubdivCCG *  subdiv_ccg,
CCGKey *  key,
CCGElem *  grid_element_a,
CCGElem *  grid_element_b 
)
static

◆ average_grid_element_value_v3()

static void average_grid_element_value_v3 ( float  a[3],
float  b[3] 
)
static

Definition at line 902 of file subdiv_ccg.c.

References Freestyle::a, add_v3_v3(), usdtokens::b(), copy_v3_v3(), and mul_v3_fl().

Referenced by average_grid_element().

◆ BKE_subdiv_ccg_average_grids()

void BKE_subdiv_ccg_average_grids ( SubdivCCG *  subdiv_ccg)

◆ BKE_subdiv_ccg_average_stitch_faces()

void BKE_subdiv_ccg_average_stitch_faces ( SubdivCCG *  subdiv_ccg,
struct CCGFace **  effected_faces,
int  num_effected_faces 
)

◆ BKE_subdiv_ccg_check_coord_valid()

bool BKE_subdiv_ccg_check_coord_valid ( const SubdivCCG *  subdiv_ccg,
const SubdivCCGCoord *  coord 
)

◆ BKE_subdiv_ccg_coarse_mesh_adjacency_info_get()

SubdivCCGAdjacencyType BKE_subdiv_ccg_coarse_mesh_adjacency_info_get ( const SubdivCCG *  subdiv_ccg,
const SubdivCCGCoord *  coord,
const MLoop *  mloop,
const MPoly *  mpoly,
int *  r_v1,
int *  r_v2 
)

◆ BKE_subdiv_ccg_destroy()

void BKE_subdiv_ccg_destroy ( SubdivCCG *  subdiv_ccg)

◆ BKE_subdiv_ccg_eval_limit_point()

void BKE_subdiv_ccg_eval_limit_point ( const SubdivCCG *  subdiv_ccg,
const SubdivCCGCoord *  coord,
float  r_point[3] 
)

◆ BKE_subdiv_ccg_grid_hidden_ensure()

void BKE_subdiv_ccg_grid_hidden_ensure ( SubdivCCG *  subdiv_ccg,
int  grid_index 
)

◆ BKE_subdiv_ccg_grid_to_face_index()

int BKE_subdiv_ccg_grid_to_face_index ( const SubdivCCG *  subdiv_ccg,
const int  grid_index 
)

◆ BKE_subdiv_ccg_key()

void BKE_subdiv_ccg_key ( CCGKey *  key,
const SubdivCCG *  subdiv_ccg,
int  level 
)

◆ BKE_subdiv_ccg_key_top_level()

void BKE_subdiv_ccg_key_top_level ( CCGKey *  key,
const SubdivCCG *  subdiv_ccg 
)

◆ BKE_subdiv_ccg_neighbor_coords_get()

void BKE_subdiv_ccg_neighbor_coords_get ( const SubdivCCG *  subdiv_ccg,
const SubdivCCGCoord *  coord,
const bool  include_duplicates,
SubdivCCGNeighbors *  r_neighbors 
)

◆ BKE_subdiv_ccg_print_coord()

void BKE_subdiv_ccg_print_coord ( const char *  message,
const SubdivCCGCoord *  coord 
)

Definition at line 1374 of file subdiv_ccg.c.

References SubdivCCGCoord::grid_index, SubdivCCGCoord::x, and SubdivCCGCoord::y.

◆ BKE_subdiv_ccg_recalc_normals()

void BKE_subdiv_ccg_recalc_normals ( SubdivCCG *  subdiv_ccg)

◆ BKE_subdiv_ccg_start_face_grid_index_ensure()

const int* BKE_subdiv_ccg_start_face_grid_index_ensure ( SubdivCCG *  subdiv_ccg)

◆ BKE_subdiv_ccg_start_face_grid_index_get()

const int* BKE_subdiv_ccg_start_face_grid_index_get ( const SubdivCCG *  subdiv_ccg)

Definition at line 1973 of file subdiv_ccg.c.

References SubdivCCG::cache_, and SubdivCCG::start_face_grid_index.

◆ BKE_subdiv_ccg_topology_counters()

void BKE_subdiv_ccg_topology_counters ( const SubdivCCG *  subdiv_ccg,
int *  r_num_vertices,
int *  r_num_edges,
int *  r_num_faces,
int *  r_num_loops 
)

Definition at line 1352 of file subdiv_ccg.c.

References SubdivCCG::grid_size, and SubdivCCG::num_grids.

Referenced by stats_mesheval().

◆ BKE_subdiv_ccg_update_normals()

void BKE_subdiv_ccg_update_normals ( SubdivCCG *  subdiv_ccg,
struct CCGFace **  effected_faces,
int  num_effected_faces 
)

◆ BKE_subdiv_to_ccg()

SubdivCCG* BKE_subdiv_to_ccg ( Subdiv *  subdiv,
const SubdivToCCGSettings *  settings,
SubdivCCGMaskEvaluator *  mask_evaluator,
SubdivCCGMaterialFlagsEvaluator *  material_flags_evaluator 
)

◆ BKE_subdiv_to_ccg_mesh()

Mesh* BKE_subdiv_to_ccg_mesh ( Subdiv *  subdiv,
const SubdivToCCGSettings *  settings,
const Mesh *  coarse_mesh 
)

◆ coord_at_next_col()

BLI_INLINE SubdivCCGCoord coord_at_next_col ( const SubdivCCG *  subdiv_ccg,
const SubdivCCGCoord *  coord 
)

◆ coord_at_next_row()

BLI_INLINE SubdivCCGCoord coord_at_next_row ( const SubdivCCG *  subdiv_ccg,
const SubdivCCGCoord *  coord 
)

◆ coord_at_prev_col()

BLI_INLINE SubdivCCGCoord coord_at_prev_col ( const SubdivCCG *  UNUSEDsubdiv_ccg,
const SubdivCCGCoord *  coord 
)

◆ coord_at_prev_row()

BLI_INLINE SubdivCCGCoord coord_at_prev_row ( const SubdivCCG *  UNUSEDsubdiv_ccg,
const SubdivCCGCoord *  coord 
)

◆ coord_step_inside_from_boundary()

static SubdivCCGCoord coord_step_inside_from_boundary ( const SubdivCCG *  subdiv_ccg,
const SubdivCCGCoord *  coord 
)
static

Definition at line 1477 of file subdiv_ccg.c.

References BLI_assert_msg, SubdivCCG::grid_size, and result.

Referenced by neighbor_coords_edge_get().

◆ element_accumulator_add()

static void element_accumulator_add ( GridElementAccumulator *  accumulator,
const SubdivCCG *  subdiv_ccg,
CCGKey *  key,
CCGElem *  grid_element 
)
static

◆ element_accumulator_copy()

static void element_accumulator_copy ( SubdivCCG *  subdiv_ccg,
CCGKey *  key,
CCGElem *  destination,
const GridElementAccumulator *  accumulator 
)
static

◆ element_accumulator_init()

static void element_accumulator_init ( GridElementAccumulator *  accumulator)
static

◆ element_accumulator_mul_fl()

static void element_accumulator_mul_fl ( GridElementAccumulator *  accumulator,
const float  f 
)
static

◆ element_size_bytes_get()

static int element_size_bytes_get ( const SubdivCCG *  subdiv_ccg)
static

◆ is_boundary_grid_coord()

BLI_INLINE bool is_boundary_grid_coord ( const SubdivCCG *  subdiv_ccg,
const SubdivCCGCoord *  coord 
)

◆ is_corner_grid_coord()

BLI_INLINE bool is_corner_grid_coord ( const SubdivCCG *  subdiv_ccg,
const SubdivCCGCoord *  coord 
)

◆ is_inner_edge_grid_coordinate()

BLI_INLINE bool is_inner_edge_grid_coordinate ( const SubdivCCG *  subdiv_ccg,
const SubdivCCGCoord *  coord 
)

◆ neighbor_coords_boundary_get()

static void neighbor_coords_boundary_get ( const SubdivCCG *  subdiv_ccg,
const SubdivCCGCoord *  coord,
const bool  include_duplicates,
SubdivCCGNeighbors *  r_neighbors 
)
static

◆ neighbor_coords_boundary_inner_get()

static void neighbor_coords_boundary_inner_get ( const SubdivCCG *  subdiv_ccg,
const SubdivCCGCoord *  coord,
const bool  include_duplicates,
SubdivCCGNeighbors *  r_neighbors 
)
static

◆ neighbor_coords_boundary_outer_get()

static void neighbor_coords_boundary_outer_get ( const SubdivCCG *  subdiv_ccg,
const SubdivCCGCoord *  coord,
const bool  include_duplicates,
SubdivCCGNeighbors *  r_neighbors 
)
static

Definition at line 1874 of file subdiv_ccg.c.

References neighbor_coords_edge_get().

Referenced by neighbor_coords_boundary_get().

◆ neighbor_coords_corner_center_get()

static void neighbor_coords_corner_center_get ( const SubdivCCG *  subdiv_ccg,
const SubdivCCGCoord *  coord,
const bool  include_duplicates,
SubdivCCGNeighbors *  r_neighbors 
)
static

◆ neighbor_coords_corner_edge_get()

static void neighbor_coords_corner_edge_get ( const SubdivCCG *  subdiv_ccg,
const SubdivCCGCoord *  coord,
const bool  include_duplicates,
SubdivCCGNeighbors *  r_neighbors 
)
static

Definition at line 1805 of file subdiv_ccg.c.

References neighbor_coords_edge_get().

Referenced by neighbor_coords_corner_get().

◆ neighbor_coords_corner_get()

static void neighbor_coords_corner_get ( const SubdivCCG *  subdiv_ccg,
const SubdivCCGCoord *  coord,
const bool  include_duplicates,
SubdivCCGNeighbors *  r_neighbors 
)
static

◆ neighbor_coords_corner_vertex_get()

static void neighbor_coords_corner_vertex_get ( const SubdivCCG *  subdiv_ccg,
const SubdivCCGCoord *  coord,
const bool  include_duplicates,
SubdivCCGNeighbors *  r_neighbors 
)
static

◆ neighbor_coords_edge_get()

static void neighbor_coords_edge_get ( const SubdivCCG *  subdiv_ccg,
const SubdivCCGCoord *  coord,
const bool  include_duplicates,
SubdivCCGNeighbors *  r_neighbors 
)
static

◆ neighbor_coords_inner_get()

static void neighbor_coords_inner_get ( const SubdivCCG *  subdiv_ccg,
const SubdivCCGCoord *  coord,
SubdivCCGNeighbors *  r_neighbors 
)
static

◆ next_adjacent_edge_point_index()

static int next_adjacent_edge_point_index ( const SubdivCCG *  subdiv_ccg,
const int  point_index 
)
static

Definition at line 1714 of file subdiv_ccg.c.

References SubdivCCG::grid_size, and point_index.

Referenced by neighbor_coords_edge_get().

◆ next_grid_index_from_coord()

BLI_INLINE int next_grid_index_from_coord ( const SubdivCCG *  subdiv_ccg,
const SubdivCCGCoord *  coord 
)

◆ num_element_float_get()

static int num_element_float_get ( const SubdivCCG *  subdiv_ccg)
static

Definition at line 51 of file subdiv_ccg.c.

References SubdivCCG::has_mask, and SubdivCCG::has_normal.

Referenced by element_size_bytes_get().

◆ prev_adjacent_edge_point_index()

static int prev_adjacent_edge_point_index ( const SubdivCCG *  subdiv_ccg,
const int  point_index 
)
static

Definition at line 1721 of file subdiv_ccg.c.

References SubdivCCG::grid_size, and point_index.

Referenced by neighbor_coords_edge_get().

◆ prev_grid_index_from_coord()

BLI_INLINE int prev_grid_index_from_coord ( const SubdivCCG *  subdiv_ccg,
const SubdivCCGCoord *  coord 
)

◆ static_or_heap_storage_free()

static void static_or_heap_storage_free ( StaticOrHeapIntStorage *  storage)
static

◆ static_or_heap_storage_get()

static int* static_or_heap_storage_get ( StaticOrHeapIntStorage *  storage,
int  heap_len 
)
static

◆ static_or_heap_storage_init()

static void static_or_heap_storage_init ( StaticOrHeapIntStorage *  storage)
static

◆ subdiv_ccg_adjacent_edge_add_face()

static SubdivCCGCoord* subdiv_ccg_adjacent_edge_add_face ( SubdivCCG *  subdiv_ccg,
SubdivCCGAdjacentEdge *  adjacent_edge 
)
static

◆ subdiv_ccg_adjacent_vertex_add_face()

static SubdivCCGCoord* subdiv_ccg_adjacent_vertex_add_face ( SubdivCCGAdjacentVertex *  adjacent_vertex)
static

◆ subdiv_ccg_affected_face_adjacency()

static void subdiv_ccg_affected_face_adjacency ( SubdivCCG *  subdiv_ccg,
struct CCGFace **  effected_faces,
int  num_effected_faces,
GSet *  r_adjacent_vertices,
GSet *  r_adjacent_edges 
)
static

◆ subdiv_ccg_alloc_elements()

static void subdiv_ccg_alloc_elements ( SubdivCCG *  subdiv_ccg,
Subdiv *  subdiv 
)
static

◆ subdiv_ccg_allocate_adjacent_edges()

static void subdiv_ccg_allocate_adjacent_edges ( SubdivCCG *  subdiv_ccg,
const int  num_edges 
)
static

◆ subdiv_ccg_allocate_adjacent_vertices()

static void subdiv_ccg_allocate_adjacent_vertices ( SubdivCCG *  subdiv_ccg,
const int  num_vertices 
)
static

◆ subdiv_ccg_average_all_boundaries()

static void subdiv_ccg_average_all_boundaries ( SubdivCCG *  subdiv_ccg,
CCGKey *  key 
)
static

◆ subdiv_ccg_average_all_boundaries_and_corners()

static void subdiv_ccg_average_all_boundaries_and_corners ( SubdivCCG *  subdiv_ccg,
CCGKey *  key 
)
static

◆ subdiv_ccg_average_all_corners()

static void subdiv_ccg_average_all_corners ( SubdivCCG *  subdiv_ccg,
CCGKey *  key 
)
static

◆ subdiv_ccg_average_boundaries()

static void subdiv_ccg_average_boundaries ( SubdivCCG *  subdiv_ccg,
CCGKey *  key,
const int *  adjacent_edge_index_map,
int  num_adjacent_edges 
)
static

◆ subdiv_ccg_average_corners()

static void subdiv_ccg_average_corners ( SubdivCCG *  subdiv_ccg,
CCGKey *  key,
const int *  adjacent_vert_index_map,
int  num_adjacent_vertices 
)
static

◆ subdiv_ccg_average_faces_boundaries_and_corners()

void subdiv_ccg_average_faces_boundaries_and_corners ( SubdivCCG *  subdiv_ccg,
CCGKey *  key,
struct CCGFace **  effected_faces,
int  num_effected_faces 
)

◆ subdiv_ccg_average_grids_boundaries_free()

static void subdiv_ccg_average_grids_boundaries_free ( const void *__restrict   UNUSEDuserdata,
void *__restrict  tls_v 
)
static

◆ subdiv_ccg_average_grids_boundaries_task()

static void subdiv_ccg_average_grids_boundaries_task ( void *__restrict  userdata_v,
const int  n,
const TaskParallelTLS *__restrict  tls_v 
)
static

◆ subdiv_ccg_average_grids_boundary()

static void subdiv_ccg_average_grids_boundary ( SubdivCCG *  subdiv_ccg,
CCGKey *  key,
SubdivCCGAdjacentEdge *  adjacent_edge,
AverageGridsBoundariesTLSData *  tls 
)
static

◆ subdiv_ccg_average_grids_corners()

static void subdiv_ccg_average_grids_corners ( SubdivCCG *  subdiv_ccg,
CCGKey *  key,
SubdivCCGAdjacentVertex *  adjacent_vertex 
)
static

◆ subdiv_ccg_average_grids_corners_task()

static void subdiv_ccg_average_grids_corners_task ( void *__restrict  userdata_v,
const int  n,
const TaskParallelTLS *__restrict   UNUSEDtls_v 
)
static

◆ subdiv_ccg_average_inner_face_grids()

static void subdiv_ccg_average_inner_face_grids ( SubdivCCG *  subdiv_ccg,
CCGKey *  key,
SubdivCCGFace *  face 
)
static

◆ subdiv_ccg_average_inner_face_normals()

static void subdiv_ccg_average_inner_face_normals ( SubdivCCG *  subdiv_ccg,
CCGKey *  key,
RecalcInnerNormalsTLSData *  tls,
const int  grid_index 
)
static

◆ subdiv_ccg_average_inner_grids_task()

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

◆ subdiv_ccg_coord()

static SubdivCCGCoord subdiv_ccg_coord ( int  grid_index,
int  x,
int  y 
)
static

◆ subdiv_ccg_coord_to_elem()

static CCGElem* subdiv_ccg_coord_to_elem ( const CCGKey *  key,
const SubdivCCG *  subdiv_ccg,
const SubdivCCGCoord *  coord 
)
static

◆ subdiv_ccg_coord_to_ptex_coord()

static void subdiv_ccg_coord_to_ptex_coord ( const SubdivCCG *  subdiv_ccg,
const SubdivCCGCoord *  coord,
int *  r_ptex_face_index,
float *  r_u,
float *  r_v 
)
static

◆ subdiv_ccg_eval_grid_element()

static void subdiv_ccg_eval_grid_element ( CCGEvalGridsData *  data,
const int  ptex_face_index,
const float  u,
const float  v,
unsigned char *  element 
)
static

◆ subdiv_ccg_eval_grid_element_limit()

static void subdiv_ccg_eval_grid_element_limit ( CCGEvalGridsData *  data,
const int  ptex_face_index,
const float  u,
const float  v,
unsigned char *  element 
)
static

◆ subdiv_ccg_eval_grid_element_mask()

static void subdiv_ccg_eval_grid_element_mask ( CCGEvalGridsData *  data,
const int  ptex_face_index,
const float  u,
const float  v,
unsigned char *  element 
)
static

Definition at line 194 of file subdiv_ccg.c.

References data, element, SubdivCCG::has_mask, SubdivCCG::mask_offset, NULL, and v.

Referenced by subdiv_ccg_eval_grid_element().

◆ subdiv_ccg_eval_grids_task()

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

◆ subdiv_ccg_eval_regular_grid()

static void subdiv_ccg_eval_regular_grid ( CCGEvalGridsData *  data,
const int  face_index 
)
static

◆ subdiv_ccg_eval_special_grid()

static void subdiv_ccg_eval_special_grid ( CCGEvalGridsData *  data,
const int  face_index 
)
static

◆ subdiv_ccg_evaluate_grids()

static bool subdiv_ccg_evaluate_grids ( SubdivCCG *  subdiv_ccg,
Subdiv *  subdiv,
SubdivCCGMaskEvaluator *  mask_evaluator,
SubdivCCGMaterialFlagsEvaluator *  material_flags_evaluator 
)
static

◆ subdiv_ccg_init_faces()

static void subdiv_ccg_init_faces ( SubdivCCG *  subdiv_ccg)
static

◆ subdiv_ccg_init_faces_edge_neighborhood()

static void subdiv_ccg_init_faces_edge_neighborhood ( SubdivCCG *  subdiv_ccg)
static

◆ subdiv_ccg_init_faces_neighborhood()

static void subdiv_ccg_init_faces_neighborhood ( SubdivCCG *  subdiv_ccg)
static

◆ subdiv_ccg_init_faces_vertex_neighborhood()

static void subdiv_ccg_init_faces_vertex_neighborhood ( SubdivCCG *  subdiv_ccg)
static

◆ subdiv_ccg_init_layers()

static void subdiv_ccg_init_layers ( SubdivCCG *  subdiv_ccg,
const SubdivToCCGSettings *  settings 
)
static

◆ subdiv_ccg_neighbors_init()

BLI_INLINE void subdiv_ccg_neighbors_init ( SubdivCCGNeighbors *  neighbors,
const int  num_unique,
const int  num_duplicates 
)

◆ subdiv_ccg_recalc_inner_face_normals()

static void subdiv_ccg_recalc_inner_face_normals ( SubdivCCG *  subdiv_ccg,
CCGKey *  key,
RecalcInnerNormalsTLSData *  tls,
const int  grid_index 
)
static

◆ subdiv_ccg_recalc_inner_grid_normals()

static void subdiv_ccg_recalc_inner_grid_normals ( SubdivCCG *  subdiv_ccg)
static

◆ subdiv_ccg_recalc_inner_normal_free()

static void subdiv_ccg_recalc_inner_normal_free ( const void *__restrict   UNUSEDuserdata,
void *__restrict  tls_v 
)
static

◆ subdiv_ccg_recalc_inner_normal_task()

static void subdiv_ccg_recalc_inner_normal_task ( void *__restrict  userdata_v,
const int  grid_index,
const TaskParallelTLS *__restrict  tls_v 
)
static

◆ subdiv_ccg_recalc_modified_inner_grid_normals()

static void subdiv_ccg_recalc_modified_inner_grid_normals ( SubdivCCG *  subdiv_ccg,
struct CCGFace **  effected_faces,
int  num_effected_faces 
)
static

◆ subdiv_ccg_recalc_modified_inner_normal_free()

static void subdiv_ccg_recalc_modified_inner_normal_free ( const void *__restrict   UNUSEDuserdata,
void *__restrict  tls_v 
)
static

◆ subdiv_ccg_recalc_modified_inner_normal_task()

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

◆ subdiv_ccg_stitch_face_inner_grids_task()

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

Definition at line 1315 of file subdiv_ccg.c.

References data, and subdiv_ccg_average_inner_face_grids().

Referenced by BKE_subdiv_ccg_average_stitch_faces().

◆ topology_refiner_count_face_corners()

static int topology_refiner_count_face_corners ( OpenSubdiv_TopologyRefiner *  topology_refiner)
static