35 #define BM_FACE_TESSELLATE_THREADED_LIMIT 1024
47 const bool face_normal)
60 BMLoop **l_ptr = looptris[0];
72 BMLoop **l_ptr_a = looptris[0];
73 BMLoop **l_ptr_b = looptris[1];
75 (l_ptr_a[1] =
l =
l->
next);
76 (l_ptr_a[2] = l_ptr_b[1] =
l =
l->
next);
77 (l_ptr_b[2] =
l->
next);
81 efa->
no, l_ptr_a[0]->
v->
co, l_ptr_a[1]->
v->
co, l_ptr_a[2]->
v->
co, l_ptr_b[2]->
v->
co);
90 l_ptr_a[2] = l_ptr_b[2];
91 l_ptr_b[0] = l_ptr_a[1];
103 float axis_mat[3][3];
104 float(*projverts)[2];
107 const int tris_len = efa->
len - 2;
126 }
while ((l_iter = l_iter->
next) != l_first);
130 for (i = 0; i < tris_len; i++) {
131 BMLoop **l_ptr = looptris[i];
134 l_ptr[0] = l_arr[tri[0]];
135 l_ptr[1] = l_arr[tri[1]];
136 l_ptr[2] = l_arr[tri[2]];
167 const char face_normals)
212 BMLoop *(*looptris)[3] = userdata;
224 BMLoop *(*looptris)[3] = userdata;
232 void *__restrict tls_v)
242 const char face_normals)
277 .face_normals =
false,
309 void *__restrict userdata,
const int index,
const TaskParallelTLS *__restrict tls)
320 const void *__restrict
UNUSED(userdata),
void *__restrict tls_v)
333 const int faces_len = bmpinfo->
faces_len;
362 const int faces_len = bmpinfo->
faces_len;
367 if (
params->face_normals) {
368 for (
int index = 0; index < faces_len; index++) {
376 for (
int index = 0; index < faces_len; index++) {
433 BMLoop **l_ptr = looptris[0];
452 l_v1->
v, l_v2->
v, l_v3->
v, l_v4->
v, 0, 0) < 0.0f);
454 float axis_mat[3][3], v_quad[4][2];
462 v_quad[0], v_quad[1], v_quad[2], v_quad[3]) < 0.0f;
465 BMLoop **l_ptr_a = looptris[0];
466 BMLoop **l_ptr_b = looptris[1];
489 Heap *pf_heap = *pf_heap_p;
498 float axis_mat[3][3];
499 float(*projverts)[2];
502 const int tris_len = efa->
len - 2;
516 }
while ((l_iter = l_iter->
next) != l_first);
522 for (i = 0; i < tris_len; i++) {
523 BMLoop **l_ptr = looptris[i];
526 l_ptr[0] = l_arr[tri[0]];
527 l_ptr[1] = l_arr[tri[1]];
528 l_ptr[2] = l_arr[tri[2]];
typedef float(TangentPoint)[2]
A min-heap / priority queue ADT.
void BLI_heap_free(Heap *heap, HeapFreeFP ptrfreefp) ATTR_NONNULL(1)
Heap * BLI_heap_new_ex(unsigned int reserve_num) ATTR_WARN_UNUSED_RESULT
float normal_quad_v3(float n[3], const float v1[3], const float v2[3], const float v3[3], const float v4[3])
bool is_quad_flip_v3_first_third_fast_with_normal(const float v1[3], const float v2[3], const float v3[3], const float v4[3], const float normal[3])
void axis_dominant_v3_to_m3_negate(float r_mat[3][3], const float normal[3])
void axis_dominant_v3_to_m3(float r_mat[3][3], const float normal[3])
Normal to x,y matrix.
MINLINE int poly_to_tri_count(int poly_count, int corner_count)
float normal_tri_v3(float n[3], const float v1[3], const float v2[3], const float v3[3])
void mul_v2_m3v3(float r[2], const float M[3][3], const float a[3])
void BLI_memarena_free(struct MemArena *ma) ATTR_NONNULL(1)
struct MemArena * BLI_memarena_new(size_t bufsize, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL ATTR_NONNULL(2) ATTR_MALLOC
#define BLI_MEMARENA_STD_BUFSIZE
void * BLI_memarena_alloc(struct MemArena *ma, size_t size) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC ATTR_ALLOC_SIZE(2)
void void BLI_memarena_clear(MemArena *ma) ATTR_NONNULL(1)
void BLI_polyfill_calc_arena(const float(*coords)[2], unsigned int coords_num, int coords_sign, unsigned int(*r_tris)[3], struct MemArena *arena)
#define BLI_POLYFILL_ALLOC_NGON_RESERVE
#define BLI_polyfill_beautify_quad_rotate_calc(v1, v2, v3, v4)
void BLI_polyfill_beautify(const float(*coords)[2], unsigned int coords_num, unsigned int(*tris)[3], struct MemArena *arena, struct Heap *eheap)
struct MempoolIterData MempoolIterData
void BLI_task_parallel_range(int start, int stop, void *userdata, TaskParallelRangeFunc func, const TaskParallelSettings *settings)
BLI_INLINE void BLI_parallel_range_settings_defaults(TaskParallelSettings *settings)
BLI_INLINE void BLI_parallel_mempool_settings_defaults(TaskParallelSettings *settings)
Read Guarded memory(de)allocation.
float BM_verts_calc_rotate_beauty(const BMVert *v1, const BMVert *v2, const BMVert *v3, const BMVert *v4, const short flag, const short method)
#define BM_FACE_FIRST_LOOP(p)
#define BM_elem_index_get(ele)
#define BM_ITER_MESH(ele, iter, bm, itype)
ATTR_WARN_UNUSED_RESULT BMesh * bm
void BM_mesh_elem_index_ensure(BMesh *bm, const char htype)
BLI_INLINE void bmesh_calc_tessellation_for_face_impl(BMLoop *(*looptris)[3], BMFace *efa, MemArena **pf_arena_p, const bool face_normal)
static void bmesh_calc_tessellation_for_face_with_normal(BMLoop *(*looptris)[3], BMFace *efa, MemArena **pf_arena_p)
static int bmesh_calc_tessellation_for_face_beauty(BMLoop *(*looptris)[3], BMFace *efa, MemArena **pf_arena_p, Heap **pf_heap_p)
static void bm_mesh_calc_tessellation__single_threaded(BMesh *bm, BMLoop *(*looptris)[3], const char face_normals)
BM_mesh_calc_tessellation get the looptris and its number from a certain bmesh.
static void bmesh_calc_tessellation_for_face_partial_with_normals_fn(void *__restrict userdata, const int index, const TaskParallelTLS *__restrict tls)
static void bm_mesh_calc_tessellation__multi_threaded(BMesh *bm, BMLoop *(*looptris)[3], const char face_normals)
static void bm_mesh_calc_tessellation_with_partial__multi_threaded(BMLoop *(*looptris)[3], const BMPartialUpdate *bmpinfo, const struct BMeshCalcTessellation_Params *params)
void BM_mesh_calc_tessellation_with_partial(BMesh *bm, BMLoop *(*looptris)[3], const BMPartialUpdate *bmpinfo)
void BM_mesh_calc_tessellation_ex(BMesh *bm, BMLoop *(*looptris)[3], const struct BMeshCalcTessellation_Params *params)
static void bmesh_calc_tessellation_for_face(BMLoop *(*looptris)[3], BMFace *efa, MemArena **pf_arena_p)
static void bm_mesh_calc_tessellation_with_partial__single_threaded(BMLoop *(*looptris)[3], const BMPartialUpdate *bmpinfo, const struct BMeshCalcTessellation_Params *params)
#define BM_FACE_TESSELLATE_THREADED_LIMIT
void BM_mesh_calc_tessellation_beauty(BMesh *bm, BMLoop *(*looptris)[3])
static void bmesh_calc_tessellation_for_face_partial_free_fn(const void *__restrict UNUSED(userdata), void *__restrict tls_v)
void BM_mesh_calc_tessellation(BMesh *bm, BMLoop *(*looptris)[3])
static void bmesh_calc_tessellation_for_face_with_normals_fn(void *__restrict userdata, MempoolIterData *mp_f, const TaskParallelTLS *__restrict tls)
static void bmesh_calc_tessellation_for_face_free_fn(const void *__restrict UNUSED(userdata), void *__restrict tls_v)
void BM_mesh_calc_tessellation_with_partial_ex(BMesh *bm, BMLoop *(*looptris)[3], const BMPartialUpdate *bmpinfo, const struct BMeshCalcTessellation_Params *params)
static void bmesh_calc_tessellation_for_face_fn(void *__restrict userdata, MempoolIterData *mp_f, const TaskParallelTLS *__restrict tls)
static void bmesh_calc_tessellation_for_face_partial_fn(void *__restrict userdata, const int index, const TaskParallelTLS *__restrict tls)
float BM_face_calc_normal(const BMFace *f, float r_no[3])
BMESH UPDATE FACE NORMAL.
bool BM_face_is_normal_valid(const BMFace *f)
ATTR_WARN_UNUSED_RESULT const BMLoop * l
ATTR_WARN_UNUSED_RESULT const BMVert * v
ccl_gpu_kernel_postfix ccl_global float int int int int float bool int offset
BMPartialUpdate_Params params
TaskParallelFreeFunc func_free
size_t userdata_chunk_size