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
SubdivCCGBKE_subdiv_to_ccg (Subdiv *subdiv, const SubdivToCCGSettings *settings, SubdivCCGMaskEvaluator *mask_evaluator, SubdivCCGMaterialFlagsEvaluator *material_flags_evaluator)
 
MeshBKE_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 CCGElemsubdiv_ccg_coord_to_elem (const CCGKey *key, const SubdivCCG *subdiv_ccg, const SubdivCCGCoord *coord)
 
static SubdivCCGCoordsubdiv_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 SubdivCCGCoordsubdiv_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