diff options
author | Hans Goudey <h.goudey@me.com> | 2022-11-13 23:16:15 +0300 |
---|---|---|
committer | Hans Goudey <h.goudey@me.com> | 2022-11-13 23:16:24 +0300 |
commit | 3eb2bc2c3fd1170b0bfe8f96db3a285aff9759d2 (patch) | |
tree | bc6178c92aa29b6aae8500bbe88f8300f2ab0290 | |
parent | fba7461e1a51643ea4762f2dc5d4811b49cedbef (diff) |
Cleanup: Move lineart_cpu.c to C++
To enable further mesh data structure refactoring-- access to loose
edges in particular.
-rw-r--r-- | source/blender/gpencil_modifiers/CMakeLists.txt | 2 | ||||
-rw-r--r-- | source/blender/gpencil_modifiers/MOD_gpencil_lineart.h | 8 | ||||
-rw-r--r-- | source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h | 9 | ||||
-rw-r--r-- | source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.cc (renamed from source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c) | 596 | ||||
-rw-r--r-- | source/blender/gpencil_modifiers/intern/lineart/lineart_intern.h | 10 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_object_types.h | 3 |
6 files changed, 331 insertions, 297 deletions
diff --git a/source/blender/gpencil_modifiers/CMakeLists.txt b/source/blender/gpencil_modifiers/CMakeLists.txt index 8dbac602c06..8c85d977263 100644 --- a/source/blender/gpencil_modifiers/CMakeLists.txt +++ b/source/blender/gpencil_modifiers/CMakeLists.txt @@ -67,7 +67,7 @@ set(SRC # Lineart code intern/lineart/lineart_chain.c intern/lineart/lineart_cpp_bridge.cc - intern/lineart/lineart_cpu.c + intern/lineart/lineart_cpu.cc intern/lineart/lineart_ops.c intern/lineart/lineart_shadow.c intern/lineart/lineart_util.c diff --git a/source/blender/gpencil_modifiers/MOD_gpencil_lineart.h b/source/blender/gpencil_modifiers/MOD_gpencil_lineart.h index 713f070de77..0c284f8e540 100644 --- a/source/blender/gpencil_modifiers/MOD_gpencil_lineart.h +++ b/source/blender/gpencil_modifiers/MOD_gpencil_lineart.h @@ -10,6 +10,10 @@ /* Operator types should be in exposed header. */ +#ifdef __cplusplus +extern "C" { +#endif + void OBJECT_OT_lineart_bake_strokes(struct wmOperatorType *ot); void OBJECT_OT_lineart_bake_strokes_all(struct wmOperatorType *ot); void OBJECT_OT_lineart_clear(struct wmOperatorType *ot); @@ -20,3 +24,7 @@ void WM_operatortypes_lineart(void); struct LineartCache; void MOD_lineart_clear_cache(struct LineartCache **lc); + +#ifdef __cplusplus +} +#endif diff --git a/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h b/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h index 22037d10a71..97a3a782131 100644 --- a/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h +++ b/source/blender/gpencil_modifiers/intern/lineart/MOD_lineart.h @@ -14,6 +14,10 @@ #include <math.h> +#ifdef __cplusplus +extern "C" { +#endif + typedef struct LineartStaticMemPoolNode { Link item; size_t size; @@ -74,6 +78,7 @@ typedef enum eLineArtElementNodeFlag { LRT_ELEMENT_NO_INTERSECTION = (1 << 2), LRT_ELEMENT_INTERSECTION_DATA = (1 << 3), } eLineArtElementNodeFlag; +ENUM_OPERATORS(eLineArtElementNodeFlag, LRT_ELEMENT_INTERSECTION_DATA); typedef struct LineartElementLinkNode { struct LineartElementLinkNode *next, *prev; @@ -929,3 +934,7 @@ void MOD_lineart_gpencil_generate(LineartCache *cache, float MOD_lineart_chain_compute_length(LineartEdgeChain *ec); void ED_operatortypes_lineart(void); + +#ifdef __cplusplus +} +#endif diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.cc index 4b5c40c0e38..b4025454022 100644 --- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c +++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.cc @@ -49,12 +49,12 @@ #include "lineart_intern.h" -typedef struct LineartIsecSingle { +struct LineartIsecSingle { double v1[3], v2[3]; LineartTriangle *tri1, *tri2; -} LineartIsecSingle; +}; -typedef struct LineartIsecThread { +struct LineartIsecThread { int thread_id; /* Scheduled work range. */ @@ -71,13 +71,13 @@ typedef struct LineartIsecThread { /* For individual thread reference. */ LineartData *ld; -} LineartIsecThread; +}; -typedef struct LineartIsecData { +struct LineartIsecData { LineartData *ld; LineartIsecThread *threads; int thread_count; -} LineartIsecData; +}; static void lineart_bounding_area_link_edge(LineartData *ld, LineartBoundingArea *root_ba, @@ -105,7 +105,7 @@ static void lineart_bounding_area_link_triangle(LineartData *ld, int recursive, int recursive_level, bool do_intersection, - struct LineartIsecThread *th); + LineartIsecThread *th); static void lineart_free_bounding_area_memory(LineartBoundingArea *ba, bool recursive); @@ -155,7 +155,7 @@ void lineart_edge_cut(LineartData *ld, uchar mat_occlusion, uint32_t shadow_bits) { - LineartEdgeSegment *seg, *i_seg, *next_seg, *prev_seg; + LineartEdgeSegment *i_seg, *prev_seg; LineartEdgeSegment *cut_start_before = 0, *cut_end_before = 0; LineartEdgeSegment *new_seg1 = 0, *new_seg2 = 0; int untouched = 0; @@ -184,13 +184,13 @@ void lineart_edge_cut(LineartData *ld, /* Begin looking for starting position of the segment. */ /* Not using a list iteration macro because of it more clear when using for loops to iterate * through the segments. */ - for (seg = e->segments.first; seg; seg = seg->next) { + LISTBASE_FOREACH (LineartEdgeSegment *, seg, &e->segments) { if (LRT_DOUBLE_CLOSE_ENOUGH(seg->ratio, start)) { cut_start_before = seg; new_seg1 = cut_start_before; break; } - if (seg->next == NULL) { + if (seg->next == nullptr) { break; } i_seg = seg->next; @@ -203,7 +203,7 @@ void lineart_edge_cut(LineartData *ld, if (!cut_start_before && LRT_DOUBLE_CLOSE_ENOUGH(1, end)) { untouched = 1; } - for (seg = cut_start_before; seg; seg = seg->next) { + for (LineartEdgeSegment *seg = cut_start_before; seg; seg = seg->next) { /* We tried to cut ratio existing cutting point (e.g. where the line's occluded by a triangle * strip). */ if (LRT_DOUBLE_CLOSE_ENOUGH(seg->ratio, end)) { @@ -228,10 +228,10 @@ void lineart_edge_cut(LineartData *ld, } /* When we still can't find any existing cut in the line, we allocate new ones. */ - if (new_seg1 == NULL) { + if (new_seg1 == nullptr) { new_seg1 = lineart_give_segment(ld); } - if (new_seg2 == NULL) { + if (new_seg2 == nullptr) { if (untouched) { new_seg2 = new_seg1; cut_end_before = new_seg2; @@ -244,7 +244,7 @@ void lineart_edge_cut(LineartData *ld, if (cut_start_before) { if (cut_start_before != new_seg1) { /* Insert cutting points for when a new cut is needed. */ - i_seg = cut_start_before->prev ? cut_start_before->prev : NULL; + i_seg = cut_start_before->prev ? cut_start_before->prev : nullptr; if (i_seg) { new_seg1->occlusion = i_seg->occlusion; new_seg1->material_mask_bits = i_seg->material_mask_bits; @@ -257,7 +257,7 @@ void lineart_edge_cut(LineartData *ld, else { /* We have yet to reach a existing cutting point even after we searched the whole line, so we * append the new cut to the end. */ - i_seg = e->segments.last; + i_seg = static_cast<LineartEdgeSegment *>(e->segments.last); new_seg1->occlusion = i_seg->occlusion; new_seg1->material_mask_bits = i_seg->material_mask_bits; new_seg1->shadow_mask_bits = i_seg->shadow_mask_bits; @@ -266,7 +266,7 @@ void lineart_edge_cut(LineartData *ld, if (cut_end_before) { /* The same manipulation as on "cut_start_before". */ if (cut_end_before != new_seg2) { - i_seg = cut_end_before->prev ? cut_end_before->prev : NULL; + i_seg = cut_end_before->prev ? cut_end_before->prev : nullptr; if (i_seg) { new_seg2->occlusion = i_seg->occlusion; new_seg2->material_mask_bits = i_seg->material_mask_bits; @@ -276,7 +276,7 @@ void lineart_edge_cut(LineartData *ld, } } else { - i_seg = e->segments.last; + i_seg = static_cast<LineartEdgeSegment *>(e->segments.last); new_seg2->occlusion = i_seg->occlusion; new_seg2->material_mask_bits = i_seg->material_mask_bits; new_seg2->shadow_mask_bits = i_seg->shadow_mask_bits; @@ -297,7 +297,7 @@ void lineart_edge_cut(LineartData *ld, } /* Register 1 level of occlusion for all touched segments. */ - for (seg = new_seg1; seg && seg != new_seg2; seg = seg->next) { + for (LineartEdgeSegment *seg = new_seg1; seg && seg != new_seg2; seg = seg->next) { seg->occlusion += mat_occlusion; seg->material_mask_bits |= material_mask_bits; @@ -319,9 +319,8 @@ void lineart_edge_cut(LineartData *ld, /* Reduce adjacent cutting points of the same level, which saves memory. */ int8_t min_occ = 127; - prev_seg = NULL; - for (seg = e->segments.first; seg; seg = next_seg) { - next_seg = seg->next; + prev_seg = nullptr; + LISTBASE_FOREACH_MUTABLE (LineartEdgeSegment *, seg, &e->segments) { if (prev_seg && prev_seg->occlusion == seg->occlusion && prev_seg->material_mask_bits == seg->material_mask_bits && @@ -352,8 +351,8 @@ BLI_INLINE bool lineart_occlusion_is_adjacent_intersection(LineartEdge *e, Linea static void lineart_bounding_area_triangle_reallocate(LineartBoundingArea *ba) { ba->max_triangle_count *= 2; - ba->linked_triangles = MEM_recallocN(ba->linked_triangles, - sizeof(LineartTriangle *) * ba->max_triangle_count); + ba->linked_triangles = static_cast<LineartTriangle **>( + MEM_recallocN(ba->linked_triangles, sizeof(LineartTriangle *) * ba->max_triangle_count)); } static void lineart_bounding_area_line_add(LineartBoundingArea *ba, LineartEdge *e) @@ -365,8 +364,8 @@ static void lineart_bounding_area_line_add(LineartBoundingArea *ba, LineartEdge return; } if (ba->line_count >= ba->max_line_count) { - LineartEdge **new_array = MEM_mallocN(sizeof(LineartEdge *) * ba->max_line_count * 2, - "new ba_line_array"); + LineartEdge **new_array = static_cast<LineartEdge **>( + MEM_malloc_arrayN(ba->max_line_count * 2, sizeof(LineartEdge *), __func__)); memcpy(new_array, ba->linked_lines, sizeof(LineartEdge *) * ba->max_line_count); ba->max_line_count *= 2; MEM_freeN(ba->linked_lines); @@ -443,7 +442,7 @@ static int lineart_occlusion_make_task_info(LineartData *ld, LineartRenderTaskIn return res; } -static void lineart_occlusion_worker(TaskPool *__restrict UNUSED(pool), LineartRenderTaskInfo *rti) +static void lineart_occlusion_worker(TaskPool *__restrict /*pool*/, LineartRenderTaskInfo *rti) { LineartData *ld = rti->ld; LineartEdge *eip; @@ -464,16 +463,16 @@ static void lineart_occlusion_worker(TaskPool *__restrict UNUSED(pool), LineartR void lineart_main_occlusion_begin(LineartData *ld) { int thread_count = ld->thread_count; - LineartRenderTaskInfo *rti = MEM_callocN(sizeof(LineartRenderTaskInfo) * thread_count, - "Task Pool"); + LineartRenderTaskInfo *rti = static_cast<LineartRenderTaskInfo *>( + MEM_callocN(sizeof(LineartRenderTaskInfo) * thread_count, __func__)); int i; - TaskPool *tp = BLI_task_pool_create(NULL, TASK_PRIORITY_HIGH); + TaskPool *tp = BLI_task_pool_create(nullptr, TASK_PRIORITY_HIGH); for (i = 0; i < thread_count; i++) { rti[i].thread_id = i; rti[i].ld = ld; - BLI_task_pool_push(tp, (TaskRunFunction)lineart_occlusion_worker, &rti[i], 0, NULL); + BLI_task_pool_push(tp, (TaskRunFunction)lineart_occlusion_worker, &rti[i], 0, nullptr); } BLI_task_pool_work_and_wait(tp); BLI_task_pool_free(tp); @@ -571,7 +570,10 @@ enum LineartPointTri { * Same algorithm as lineart_point_inside_triangle(), but returns differently: * 0-outside 1-on the edge 2-inside. */ -static int lineart_point_triangle_relation(double v[2], double v0[2], double v1[2], double v2[2]) +static LineartPointTri lineart_point_triangle_relation(double v[2], + double v0[2], + double v1[2], + double v2[2]) { double cl, c; double r; @@ -656,17 +658,16 @@ static bool lineart_point_inside_triangle3d(double v[3], double v0[3], double v1 */ static LineartElementLinkNode *lineart_memory_get_triangle_space(LineartData *ld) { - LineartElementLinkNode *eln; - /* We don't need to allocate a whole bunch of triangles because the amount of clipped triangles * are relatively small. */ - LineartTriangle *render_triangles = lineart_mem_acquire(&ld->render_data_pool, - 64 * ld->sizeof_triangle); - - eln = lineart_list_append_pointer_pool_sized(&ld->geom.triangle_buffer_pointers, - &ld->render_data_pool, - render_triangles, - sizeof(LineartElementLinkNode)); + LineartTriangle *render_triangles = static_cast<LineartTriangle *>( + lineart_mem_acquire(&ld->render_data_pool, 64 * ld->sizeof_triangle)); + + LineartElementLinkNode *eln = static_cast<LineartElementLinkNode *>( + lineart_list_append_pointer_pool_sized(&ld->geom.triangle_buffer_pointers, + &ld->render_data_pool, + render_triangles, + sizeof(LineartElementLinkNode))); eln->element_count = 64; eln->flags |= LRT_ELEMENT_IS_ADDITIONAL; @@ -675,15 +676,14 @@ static LineartElementLinkNode *lineart_memory_get_triangle_space(LineartData *ld static LineartElementLinkNode *lineart_memory_get_vert_space(LineartData *ld) { - LineartElementLinkNode *eln; - - LineartVert *render_vertices = lineart_mem_acquire(&ld->render_data_pool, - sizeof(LineartVert) * 64); - - eln = lineart_list_append_pointer_pool_sized(&ld->geom.vertex_buffer_pointers, - &ld->render_data_pool, - render_vertices, - sizeof(LineartElementLinkNode)); + LineartVert *render_vertices = static_cast<LineartVert *>( + lineart_mem_acquire(&ld->render_data_pool, sizeof(LineartVert) * 64)); + + LineartElementLinkNode *eln = static_cast<LineartElementLinkNode *>( + lineart_list_append_pointer_pool_sized(&ld->geom.vertex_buffer_pointers, + &ld->render_data_pool, + render_vertices, + sizeof(LineartElementLinkNode))); eln->element_count = 64; eln->flags |= LRT_ELEMENT_IS_ADDITIONAL; @@ -692,14 +692,14 @@ static LineartElementLinkNode *lineart_memory_get_vert_space(LineartData *ld) static LineartElementLinkNode *lineart_memory_get_edge_space(LineartData *ld) { - LineartElementLinkNode *eln; - - LineartEdge *render_edges = lineart_mem_acquire(ld->edge_data_pool, sizeof(LineartEdge) * 64); - - eln = lineart_list_append_pointer_pool_sized(&ld->geom.line_buffer_pointers, - ld->edge_data_pool, - render_edges, - sizeof(LineartElementLinkNode)); + LineartEdge *render_edges = static_cast<LineartEdge *>( + lineart_mem_acquire(ld->edge_data_pool, sizeof(LineartEdge) * 64)); + + LineartElementLinkNode *eln = static_cast<LineartElementLinkNode *>( + lineart_list_append_pointer_pool_sized(&ld->geom.line_buffer_pointers, + ld->edge_data_pool, + render_edges, + sizeof(LineartElementLinkNode))); eln->element_count = 64; eln->crease_threshold = ld->conf.crease_threshold; eln->flags |= LRT_ELEMENT_IS_ADDITIONAL; @@ -771,7 +771,6 @@ static void lineart_triangle_cull_single(LineartData *ld, LineartEdge *new_e, *e, *old_e; LineartEdgeSegment *es; - LineartTriangleAdjacent *tri_adj; if (tri->flags & (LRT_CULL_USED | LRT_CULL_GENERATED | LRT_CULL_DISCARD)) { return; @@ -779,12 +778,14 @@ static void lineart_triangle_cull_single(LineartData *ld, /* See definition of tri->intersecting_verts and the usage in * lineart_geometry_object_load() for details. */ - tri_adj = (void *)tri->intersecting_verts; + LineartTriangleAdjacent *tri_adj = reinterpret_cast<LineartTriangleAdjacent *>( + tri->intersecting_verts); LineartVert *vt = &((LineartVert *)v_eln->pointer)[v_count]; - LineartTriangle *tri1 = (void *)(((uchar *)t_eln->pointer) + ld->sizeof_triangle * t_count); - LineartTriangle *tri2 = (void *)(((uchar *)t_eln->pointer) + - ld->sizeof_triangle * (t_count + 1)); + LineartTriangle *tri1 = static_cast<LineartTriangle *>( + (void *)(((uchar *)t_eln->pointer) + ld->sizeof_triangle * t_count)); + LineartTriangle *tri2 = static_cast<LineartTriangle *>( + (void *)(((uchar *)t_eln->pointer) + ld->sizeof_triangle * (t_count + 1))); new_e = &((LineartEdge *)e_eln->pointer)[e_count]; /* Init `edge` to the last `edge` entry. */ @@ -794,7 +795,8 @@ static void lineart_triangle_cull_single(LineartData *ld, new_e = &((LineartEdge *)e_eln->pointer)[e_count]; \ e_count++; \ e = new_e; \ - es = lineart_mem_acquire(&ld->render_data_pool, sizeof(LineartEdgeSegment)); \ + es = static_cast<LineartEdgeSegment *>( \ + lineart_mem_acquire(&ld->render_data_pool, sizeof(LineartEdgeSegment))); \ BLI_addtail(&e->segments, es); #define SELECT_EDGE(e_num, v1_link, v2_link, new_tri) \ @@ -1303,10 +1305,11 @@ void lineart_main_cull_triangles(LineartData *ld, bool clip_far) if (eln->flags & LRT_ELEMENT_IS_ADDITIONAL) { continue; } - ob = eln->object_ref; + ob = static_cast<Object *>(eln->object_ref); for (i = 0; i < eln->element_count; i++) { /* Select the triangle in the array. */ - tri = (void *)(((uchar *)eln->pointer) + ld->sizeof_triangle * i); + tri = static_cast<LineartTriangle *>( + (void *)(((uchar *)eln->pointer) + ld->sizeof_triangle * i)); if (tri->flags & LRT_CULL_DISCARD) { continue; @@ -1346,16 +1349,17 @@ void lineart_main_cull_triangles(LineartData *ld, bool clip_far) void lineart_main_free_adjacent_data(LineartData *ld) { LinkData *link; - while ((link = BLI_pophead(&ld->geom.triangle_adjacent_pointers)) != NULL) { + while ((link = static_cast<LinkData *>(BLI_pophead(&ld->geom.triangle_adjacent_pointers))) != + nullptr) { MEM_freeN(link->data); } LISTBASE_FOREACH (LineartElementLinkNode *, eln, &ld->geom.triangle_buffer_pointers) { - LineartTriangle *tri = eln->pointer; + LineartTriangle *tri = static_cast<LineartTriangle *>(eln->pointer); int i; for (i = 0; i < eln->element_count; i++) { /* See definition of tri->intersecting_verts and the usage in * lineart_geometry_object_load() for detailed. */ - tri->intersecting_verts = NULL; + tri->intersecting_verts = nullptr; tri = (LineartTriangle *)(((uchar *)tri) + ld->sizeof_triangle); } } @@ -1363,12 +1367,9 @@ void lineart_main_free_adjacent_data(LineartData *ld) void lineart_main_perspective_division(LineartData *ld) { - LineartVert *vt; - int i; - LISTBASE_FOREACH (LineartElementLinkNode *, eln, &ld->geom.vertex_buffer_pointers) { - vt = eln->pointer; - for (i = 0; i < eln->element_count; i++) { + LineartVert *vt = static_cast<LineartVert *>(eln->pointer); + for (int i = 0; i < eln->element_count; i++) { if (ld->conf.cam_is_persp) { /* Do not divide Z, we use Z to back transform cut points in later chaining process. */ vt[i].fbcoord[0] /= vt[i].fbcoord[3]; @@ -1404,22 +1405,22 @@ void lineart_main_discard_out_of_frame_edges(LineartData *ld) } } -typedef struct LineartEdgeNeighbor { +struct LineartEdgeNeighbor { int e; uint16_t flags; int v1, v2; -} LineartEdgeNeighbor; +}; -typedef struct VertData { +struct VertData { const MVert *mvert; LineartVert *v_arr; double (*model_view)[4]; double (*model_view_proj)[4]; -} VertData; +}; static void lineart_mvert_transform_task(void *__restrict userdata, const int i, - const TaskParallelTLS *__restrict UNUSED(tls)) + const TaskParallelTLS *__restrict /*tls*/) { VertData *vert_task_data = (VertData *)userdata; const MVert *m_v = &vert_task_data->mvert[i]; @@ -1467,7 +1468,7 @@ static LineartTriangle *lineart_triangle_from_index(LineartData *ld, return (LineartTriangle *)b; } -typedef struct EdgeFeatData { +struct EdgeFeatData { LineartData *ld; Mesh *me; Object *ob_eval; /* For evaluated materials. */ @@ -1482,13 +1483,13 @@ typedef struct EdgeFeatData { bool use_freestyle_edge; int freestyle_edge_index; LineartEdgeNeighbor *edge_nabr; -} EdgeFeatData; +}; -typedef struct EdgeFeatReduceData { +struct EdgeFeatReduceData { int feat_edges; -} EdgeFeatReduceData; +}; -static void feat_data_sum_reduce(const void *__restrict UNUSED(userdata), +static void feat_data_sum_reduce(const void *__restrict /*userdata*/, void *__restrict chunk_join, void *__restrict chunk) { @@ -1533,7 +1534,7 @@ static void lineart_identify_mlooptri_feature_edges(void *__restrict userdata, else { /* Handle mesh boundary cases: We want mesh boundaries to respect * `filter_face_mark_boundaries` option the same way as face mark boundaries, and the code - * path is simper when it's assuming both ff1 and ff2 not NULL. */ + * path is simper when it's assuming both ff1 and ff2 not nullptr. */ ff2 = ff1; } if (e_feat_data->ld->conf.filter_face_mark_boundaries ^ @@ -1710,16 +1711,16 @@ static void lineart_identify_mlooptri_feature_edges(void *__restrict userdata, } } -typedef struct LooseEdgeData { +struct LooseEdgeData { int loose_count; int loose_max; int *loose_array; const MEdge *edges; -} LooseEdgeData; +}; static void lineart_loose_data_reallocate(LooseEdgeData *loose_data, int count) { - int *new_arr = MEM_calloc_arrayN(count, sizeof(int), "loose edge array"); + int *new_arr = static_cast<int *>(MEM_calloc_arrayN(count, sizeof(int), "loose edge array")); if (loose_data->loose_array) { memcpy(new_arr, loose_data->loose_array, sizeof(int) * loose_data->loose_max); MEM_SAFE_FREE(loose_data->loose_array); @@ -1742,7 +1743,7 @@ static void lineart_join_loose_edge_arr(LooseEdgeData *loose_data, LooseEdgeData sizeof(int) * to_be_joined->loose_count); loose_data->loose_count += to_be_joined->loose_count; MEM_freeN(to_be_joined->loose_array); - to_be_joined->loose_array = NULL; + to_be_joined->loose_array = nullptr; } static void lineart_add_loose_edge(LooseEdgeData *loose_data, const int i) @@ -1755,7 +1756,7 @@ static void lineart_add_loose_edge(LooseEdgeData *loose_data, const int i) loose_data->loose_count++; } -static void lineart_identify_loose_edges(void *__restrict UNUSED(userdata), +static void lineart_identify_loose_edges(void *__restrict /*userdata*/, const int i, const TaskParallelTLS *__restrict tls) { @@ -1766,7 +1767,7 @@ static void lineart_identify_loose_edges(void *__restrict UNUSED(userdata), } } -static void loose_data_sum_reduce(const void *__restrict UNUSED(userdata), +static void loose_data_sum_reduce(const void *__restrict /*userdata*/, void *__restrict chunk_join, void *__restrict chunk) { @@ -1782,8 +1783,8 @@ void lineart_add_edge_to_array(LineartPendingEdges *pe, LineartEdge *e) pe->max = 1000; } - LineartEdge **new_array = MEM_mallocN(sizeof(LineartEdge *) * pe->max * 2, - "LineartPendingEdges array"); + LineartEdge **new_array = static_cast<LineartEdge **>( + MEM_mallocN(sizeof(LineartEdge *) * pe->max * 2, "LineartPendingEdges array")); if (LIKELY(pe->array)) { memcpy(new_array, pe->array, sizeof(LineartEdge *) * pe->max); MEM_freeN(pe->array); @@ -1808,8 +1809,8 @@ void lineart_finalize_object_edge_array_reserve(LineartPendingEdges *pe, int cou } pe->max = count; - LineartEdge **new_array = MEM_mallocN(sizeof(LineartEdge *) * pe->max, - "LineartPendingEdges array final"); + LineartEdge **new_array = static_cast<LineartEdge **>( + MEM_mallocN(sizeof(LineartEdge *) * pe->max, "LineartPendingEdges array final")); pe->array = new_array; } @@ -1842,7 +1843,7 @@ static void lineart_triangle_adjacent_assign(LineartTriangle *tri, } } -typedef struct TriData { +struct TriData { LineartObjectInfo *ob_info; const MLoopTri *mlooptri; const int *material_indices; @@ -1850,11 +1851,11 @@ typedef struct TriData { LineartTriangle *tri_arr; int lineart_triangle_size; LineartTriangleAdjacent *tri_adj; -} TriData; +}; static void lineart_load_tri_task(void *__restrict userdata, const int i, - const TaskParallelTLS *__restrict UNUSED(tls)) + const TaskParallelTLS *__restrict /*tls*/) { TriData *tri_task_data = (TriData *)userdata; Mesh *me = tri_task_data->ob_info->original_me; @@ -1913,18 +1914,18 @@ static void lineart_load_tri_task(void *__restrict userdata, } /* Re-use this field to refer to adjacent info, will be cleared after culling stage. */ - tri->intersecting_verts = (void *)&tri_task_data->tri_adj[i]; + tri->intersecting_verts = static_cast<LinkNode *>((void *)&tri_task_data->tri_adj[i]); } -typedef struct EdgeNeighborData { +struct EdgeNeighborData { LineartEdgeNeighbor *edge_nabr; LineartAdjacentEdge *adj_e; const MLoopTri *mlooptri; const MLoop *mloop; -} EdgeNeighborData; +}; static void lineart_edge_neighbor_init_task(void *__restrict userdata, const int i, - const TaskParallelTLS *__restrict UNUSED(tls)) + const TaskParallelTLS *__restrict /*tls*/) { EdgeNeighborData *en_data = (EdgeNeighborData *)userdata; LineartAdjacentEdge *adj_e = &en_data->adj_e[i]; @@ -1948,10 +1949,10 @@ static void lineart_edge_neighbor_init_task(void *__restrict userdata, static LineartEdgeNeighbor *lineart_build_edge_neighbor(Mesh *me, int total_edges) { /* Because the mesh is triangulated, so `me->totedge` should be reliable? */ - LineartAdjacentEdge *adj_e = MEM_mallocN(sizeof(LineartAdjacentEdge) * total_edges, - "LineartAdjacentEdge arr"); - LineartEdgeNeighbor *edge_nabr = MEM_mallocN(sizeof(LineartEdgeNeighbor) * total_edges, - "LineartEdgeNeighbor arr"); + LineartAdjacentEdge *adj_e = static_cast<LineartAdjacentEdge *>( + MEM_mallocN(sizeof(LineartAdjacentEdge) * total_edges, "LineartAdjacentEdge arr")); + LineartEdgeNeighbor *edge_nabr = static_cast<LineartEdgeNeighbor *>( + MEM_mallocN(sizeof(LineartEdgeNeighbor) * total_edges, "LineartEdgeNeighbor arr")); TaskParallelSettings en_settings; BLI_parallel_range_settings_defaults(&en_settings); @@ -1984,14 +1985,7 @@ static void lineart_geometry_object_load(LineartObjectInfo *ob_info, LineartData *la_data, ListBase *shadow_elns) { - LineartElementLinkNode *elem_link_node; - LineartVert *la_v_arr; - LineartEdge *la_edge_arr; - LineartEdgeSegment *la_seg_arr; - LineartTriangle *la_tri_arr; - Mesh *me = ob_info->original_me; - if (!me->totedge) { return; } @@ -2019,19 +2013,19 @@ static void lineart_geometry_object_load(LineartObjectInfo *ob_info, /* If we allow duplicated edges, one edge should get added multiple times if is has been * classified as more than one edge type. This is so we can create multiple different line type * chains containing the same edge. */ - la_v_arr = lineart_mem_acquire_thread(&la_data->render_data_pool, - sizeof(LineartVert) * me->totvert); - la_tri_arr = lineart_mem_acquire_thread(&la_data->render_data_pool, - tot_tri * la_data->sizeof_triangle); + LineartVert *la_v_arr = static_cast<LineartVert *>( + lineart_mem_acquire_thread(&la_data->render_data_pool, sizeof(LineartVert) * me->totvert)); + LineartTriangle *la_tri_arr = static_cast<LineartTriangle *>( + lineart_mem_acquire_thread(&la_data->render_data_pool, tot_tri * la_data->sizeof_triangle)); Object *orig_ob = ob_info->original_ob; BLI_spin_lock(&la_data->lock_task); - elem_link_node = lineart_list_append_pointer_pool_sized_thread( - &la_data->geom.vertex_buffer_pointers, - &la_data->render_data_pool, - la_v_arr, - sizeof(LineartElementLinkNode)); + LineartElementLinkNode *elem_link_node = static_cast<LineartElementLinkNode *>( + lineart_list_append_pointer_pool_sized_thread(&la_data->geom.vertex_buffer_pointers, + &la_data->render_data_pool, + la_v_arr, + sizeof(LineartElementLinkNode))); BLI_spin_unlock(&la_data->lock_task); elem_link_node->obindex = ob_info->obindex; @@ -2059,22 +2053,24 @@ static void lineart_geometry_object_load(LineartObjectInfo *ob_info, } BLI_spin_lock(&la_data->lock_task); - elem_link_node = lineart_list_append_pointer_pool_sized_thread( - &la_data->geom.triangle_buffer_pointers, - &la_data->render_data_pool, - la_tri_arr, - sizeof(LineartElementLinkNode)); + elem_link_node = static_cast<LineartElementLinkNode *>( + lineart_list_append_pointer_pool_sized_thread(&la_data->geom.triangle_buffer_pointers, + &la_data->render_data_pool, + la_tri_arr, + sizeof(LineartElementLinkNode))); BLI_spin_unlock(&la_data->lock_task); int usage = ob_info->usage; elem_link_node->element_count = tot_tri; elem_link_node->object_ref = orig_ob; - elem_link_node->flags |= (usage == OBJECT_LRT_NO_INTERSECTION ? LRT_ELEMENT_NO_INTERSECTION : 0); + elem_link_node->flags = eLineArtElementNodeFlag( + elem_link_node->flags | + ((usage == OBJECT_LRT_NO_INTERSECTION) ? LRT_ELEMENT_NO_INTERSECTION : 0)); /* Note this memory is not from pool, will be deleted after culling. */ - LineartTriangleAdjacent *tri_adj = MEM_callocN(sizeof(LineartTriangleAdjacent) * tot_tri, - "LineartTriangleAdjacent"); + LineartTriangleAdjacent *tri_adj = static_cast<LineartTriangleAdjacent *>( + MEM_callocN(sizeof(LineartTriangleAdjacent) * tot_tri, "LineartTriangleAdjacent")); /* Link is minimal so we use pool anyway. */ BLI_spin_lock(&la_data->lock_task); lineart_list_append_pointer_pool_thread( @@ -2175,22 +2171,22 @@ static void lineart_geometry_object_load(LineartObjectInfo *ob_info, int allocate_la_e = edge_reduce.feat_edges + loose_data.loose_count; - la_edge_arr = lineart_mem_acquire_thread(la_data->edge_data_pool, - sizeof(LineartEdge) * allocate_la_e); - la_seg_arr = lineart_mem_acquire_thread(la_data->edge_data_pool, - sizeof(LineartEdgeSegment) * allocate_la_e); + LineartEdge *la_edge_arr = static_cast<LineartEdge *>( + lineart_mem_acquire_thread(la_data->edge_data_pool, sizeof(LineartEdge) * allocate_la_e)); + LineartEdgeSegment *la_seg_arr = static_cast<LineartEdgeSegment *>(lineart_mem_acquire_thread( + la_data->edge_data_pool, sizeof(LineartEdgeSegment) * allocate_la_e)); BLI_spin_lock(&la_data->lock_task); - elem_link_node = lineart_list_append_pointer_pool_sized_thread( - &la_data->geom.line_buffer_pointers, - la_data->edge_data_pool, - la_edge_arr, - sizeof(LineartElementLinkNode)); + elem_link_node = static_cast<LineartElementLinkNode *>( + lineart_list_append_pointer_pool_sized_thread(&la_data->geom.line_buffer_pointers, + la_data->edge_data_pool, + la_edge_arr, + sizeof(LineartElementLinkNode))); BLI_spin_unlock(&la_data->lock_task); elem_link_node->element_count = allocate_la_e; elem_link_node->object_ref = orig_ob; elem_link_node->obindex = ob_info->obindex; - LineartElementLinkNode *shadow_eln = NULL; + LineartElementLinkNode *shadow_eln = nullptr; if (shadow_elns) { shadow_eln = lineart_find_matching_eln(shadow_elns, ob_info->obindex); } @@ -2213,7 +2209,7 @@ static void lineart_geometry_object_load(LineartObjectInfo *ob_info, continue; } - LineartEdge *edge_added = NULL; + LineartEdge *edge_added = nullptr; /* See eLineartEdgeFlag for details. */ for (int flag_bit = 0; flag_bit < LRT_MESH_EDGE_TYPES_COUNT; flag_bit++) { @@ -2305,11 +2301,11 @@ static void lineart_geometry_object_load(LineartObjectInfo *ob_info, MEM_freeN(edge_feat_data.edge_nabr); if (ob_info->free_use_mesh) { - BKE_id_free(NULL, me); + BKE_id_free(nullptr, me); } } -static void lineart_object_load_worker(TaskPool *__restrict UNUSED(pool), +static void lineart_object_load_worker(TaskPool *__restrict /*pool*/, LineartObjectLoadTaskInfo *olti) { for (LineartObjectInfo *obi = olti->pending; obi; obi = obi->next) { @@ -2480,7 +2476,8 @@ static void lineart_object_load_single_instance(LineartData *ld, int thread_count, int obindex) { - LineartObjectInfo *obi = lineart_mem_acquire(&ld->render_data_pool, sizeof(LineartObjectInfo)); + LineartObjectInfo *obi = static_cast<LineartObjectInfo *>( + lineart_mem_acquire(&ld->render_data_pool, sizeof(LineartObjectInfo))); obi->usage = lineart_usage_check(scene->master_collection, ob, is_render); obi->override_intersection_mask = lineart_intersection_mask_check(scene->master_collection, ob); obi->intersection_priority = lineart_intersection_priority_check(scene->master_collection, ob); @@ -2550,10 +2547,10 @@ void lineart_main_load_geometries(Depsgraph *depsgraph, float inv[4][4]; if (!do_shadow_casting) { - Camera *cam = camera->data; + Camera *cam = static_cast<Camera *>(camera->data); float sensor = BKE_camera_sensor_size(cam->sensor_fit, cam->sensor_x, cam->sensor_y); int fit = BKE_camera_sensor_fit(cam->sensor_fit, ld->w, ld->h); - double asp = ((double)ld->w / (double)ld->h); + double asp = (double(ld->w) / double(ld->h)); if (cam->type == CAM_PERSP) { if (fit == CAMERA_SENSOR_FIT_VERT && asp > 1) { sensor *= asp; @@ -2591,8 +2588,8 @@ void lineart_main_load_geometries(Depsgraph *depsgraph, int obindex = 0; /* This memory is in render buffer memory pool. So we don't need to free those after loading. */ - LineartObjectLoadTaskInfo *olti = lineart_mem_acquire( - &ld->render_data_pool, sizeof(LineartObjectLoadTaskInfo) * thread_count); + LineartObjectLoadTaskInfo *olti = static_cast<LineartObjectLoadTaskInfo *>(lineart_mem_acquire( + &ld->render_data_pool, sizeof(LineartObjectLoadTaskInfo) * thread_count)); eEvaluationMode eval_mode = DEG_get_mode(depsgraph); bool is_render = eval_mode == DAG_EVAL_RENDER; @@ -2642,7 +2639,7 @@ void lineart_main_load_geometries(Depsgraph *depsgraph, } DEG_OBJECT_ITER_END; - TaskPool *tp = BLI_task_pool_create(NULL, TASK_PRIORITY_HIGH); + TaskPool *tp = BLI_task_pool_create(nullptr, TASK_PRIORITY_HIGH); if (G.debug_value == 4000) { printf("thread count: %d\n", thread_count); @@ -2651,7 +2648,7 @@ void lineart_main_load_geometries(Depsgraph *depsgraph, olti[i].ld = ld; olti[i].shadow_elns = shadow_elns; olti[i].thread_id = i; - BLI_task_pool_push(tp, (TaskRunFunction)lineart_object_load_worker, &olti[i], 0, NULL); + BLI_task_pool_push(tp, (TaskRunFunction)lineart_object_load_worker, &olti[i], 0, nullptr); } BLI_task_pool_work_and_wait(tp); BLI_task_pool_free(tp); @@ -3182,7 +3179,7 @@ static LineartVert *lineart_triangle_share_point(const LineartTriangle *l, if (l->v[2] == r->v[2]) { return r->v[2]; } - return NULL; + return nullptr; } static bool lineart_triangle_2v_intersection_math( @@ -3229,7 +3226,7 @@ static bool lineart_triangle_intersect_math(LineartTriangle *tri, double *v1, double *v2) { - double *next = v1, *last = NULL; + double *next = v1, *last = nullptr; LineartVert *sv1, *sv2; LineartVert *share = lineart_triangle_share_point(t2, tri); @@ -3305,8 +3302,8 @@ static void lineart_add_isec_thread(LineartIsecThread *th, { if (th->current == th->max) { - LineartIsecSingle *new_array = MEM_mallocN(sizeof(LineartIsecSingle) * th->max * 2, - "LineartIsecSingle"); + LineartIsecSingle *new_array = static_cast<LineartIsecSingle *>( + MEM_mallocN(sizeof(LineartIsecSingle) * th->max * 2, "LineartIsecSingle")); memcpy(new_array, th->array, sizeof(LineartIsecSingle) * th->max); th->max *= 2; MEM_freeN(th->array); @@ -3355,7 +3352,9 @@ static bool lineart_schedule_new_triangle_task(LineartIsecThread *th) } } - th->pending_to = eln ? eln : ld->geom.triangle_buffer_pointers.last; + th->pending_to = eln ? eln : + static_cast<LineartElementLinkNode *>( + ld->geom.triangle_buffer_pointers.last); th->index_to = ld->isect_scheduled_up_to_index; BLI_spin_unlock(&ld->lock_task); @@ -3370,16 +3369,19 @@ static bool lineart_schedule_new_triangle_task(LineartIsecThread *th) */ static void lineart_init_isec_thread(LineartIsecData *d, LineartData *ld, int thread_count) { - d->threads = MEM_callocN(sizeof(LineartIsecThread) * thread_count, "LineartIsecThread arr"); + d->threads = static_cast<LineartIsecThread *>( + MEM_callocN(sizeof(LineartIsecThread) * thread_count, "LineartIsecThread arr")); d->ld = ld; d->thread_count = thread_count; - ld->isect_scheduled_up_to = ld->geom.triangle_buffer_pointers.first; + ld->isect_scheduled_up_to = static_cast<LineartElementLinkNode *>( + ld->geom.triangle_buffer_pointers.first); ld->isect_scheduled_up_to_index = 0; for (int i = 0; i < thread_count; i++) { LineartIsecThread *it = &d->threads[i]; - it->array = MEM_mallocN(sizeof(LineartIsecSingle) * 100, "LineartIsecSingle arr"); + it->array = static_cast<LineartIsecSingle *>( + MEM_mallocN(sizeof(LineartIsecSingle) * 100, "LineartIsecSingle arr")); it->max = 100; it->current = 0; it->thread_id = i; @@ -3401,7 +3403,7 @@ static void lineart_triangle_intersect_in_bounding_area(LineartTriangle *tri, LineartIsecThread *th, int up_to) { - BLI_assert(th != NULL); + BLI_assert(th != nullptr); if (!th) { return; @@ -3496,7 +3498,7 @@ static void lineart_end_bounding_area_recursive(LineartBoundingArea *ba) void lineart_destroy_render_data_keep_init(LineartData *ld) { - if (ld == NULL) { + if (ld == nullptr) { return; } @@ -3521,7 +3523,7 @@ void lineart_destroy_render_data_keep_init(LineartData *ld) static void lineart_destroy_render_data(LineartData *ld) { - if (ld == NULL) { + if (ld == nullptr) { return; } @@ -3542,7 +3544,7 @@ void MOD_lineart_destroy_render_data(LineartGpencilModifierData *lmd) if (ld) { MEM_freeN(ld); - lmd->la_data_ptr = NULL; + lmd->la_data_ptr = nullptr; } if (G.debug_value == 4000) { @@ -3552,18 +3554,19 @@ void MOD_lineart_destroy_render_data(LineartGpencilModifierData *lmd) static LineartCache *lineart_init_cache(void) { - LineartCache *lc = MEM_callocN(sizeof(LineartCache), "Lineart Cache"); + LineartCache *lc = static_cast<LineartCache *>( + MEM_callocN(sizeof(LineartCache), "Lineart Cache")); return lc; } -void MOD_lineart_clear_cache(struct LineartCache **lc) +void MOD_lineart_clear_cache(LineartCache **lc) { if (!(*lc)) { return; } lineart_mem_destroy(&((*lc)->chain_data_pool)); MEM_freeN(*lc); - (*lc) = NULL; + (*lc) = nullptr; } static LineartData *lineart_create_render_buffer(Scene *scene, @@ -3572,16 +3575,16 @@ static LineartData *lineart_create_render_buffer(Scene *scene, Object *active_camera, LineartCache *lc) { - LineartData *ld = MEM_callocN(sizeof(LineartData), "Line Art render buffer"); - + LineartData *ld = static_cast<LineartData *>( + MEM_callocN(sizeof(LineartData), "Line Art render buffer")); lmd->cache = lc; lmd->la_data_ptr = ld; lc->all_enabled_edge_types = lmd->edge_types_override; if (!scene || !camera || !lc) { - return NULL; + return nullptr; } - Camera *c = camera->data; + Camera *c = static_cast<Camera *>(camera->data); double clipping_offset = 0; if (lmd->calculation_flags & LRT_ALLOW_CLIPPING_BOUNDARIES) { @@ -3608,7 +3611,7 @@ static LineartData *lineart_create_render_buffer(Scene *scene, ld->qtree.recursive_level = LRT_TILE_RECURSIVE_ORTHO; } - double asp = ((double)ld->w / (double)ld->h); + double asp = (double(ld->w) / double(ld->h)); int fit = BKE_camera_sensor_fit(c->sensor_fit, ld->w, ld->h); ld->conf.shift_x = fit == CAMERA_SENSOR_FIT_HOR ? c->shiftx : c->shiftx / asp; ld->conf.shift_y = fit == CAMERA_SENSOR_FIT_VERT ? c->shifty : c->shifty * asp; @@ -3666,9 +3669,9 @@ static LineartData *lineart_create_render_buffer(Scene *scene, ld->conf.use_intersections = (edge_types & LRT_EDGE_FLAG_INTERSECTION) != 0; ld->conf.use_loose = (edge_types & LRT_EDGE_FLAG_LOOSE) != 0; ld->conf.use_light_contour = ((edge_types & LRT_EDGE_FLAG_LIGHT_CONTOUR) != 0 && - (lmd->light_contour_object != NULL)); + (lmd->light_contour_object != nullptr)); ld->conf.use_shadow = ((edge_types & LRT_EDGE_FLAG_PROJECTED_SHADOW) != 0 && - (lmd->light_contour_object != NULL)); + (lmd->light_contour_object != nullptr)); ld->conf.shadow_selection = lmd->shadow_selection_override; ld->conf.shadow_enclose_shapes = lmd->shadow_selection_override == @@ -3723,8 +3726,8 @@ void lineart_main_bounding_area_make_initial(LineartData *ld) /* Because NDC (Normalized Device Coordinates) range is (-1,1), * so the span for each initial tile is double of that in the (0,1) range. */ - double span_w = (double)1 / sp_w * 2.0; - double span_h = (double)1 / sp_h * 2.0; + double span_w = 1.0 / sp_w * 2.0; + double span_h = 1.0 / sp_h * 2.0; ld->qtree.count_x = sp_w; ld->qtree.count_y = sp_h; @@ -3732,8 +3735,8 @@ void lineart_main_bounding_area_make_initial(LineartData *ld) ld->qtree.tile_height = span_h; ld->qtree.initial_tile_count = sp_w * sp_h; - ld->qtree.initials = lineart_mem_acquire( - &ld->render_data_pool, sizeof(LineartBoundingArea) * ld->qtree.initial_tile_count); + ld->qtree.initials = static_cast<LineartBoundingArea *>(lineart_mem_acquire( + &ld->render_data_pool, sizeof(LineartBoundingArea) * ld->qtree.initial_tile_count)); for (int i = 0; i < ld->qtree.initial_tile_count; i++) { BLI_spin_init(&ld->qtree.initials[i].lock); } @@ -3755,10 +3758,10 @@ void lineart_main_bounding_area_make_initial(LineartData *ld) /* Init linked_triangles array. */ ba->max_triangle_count = LRT_TILE_SPLITTING_TRIANGLE_LIMIT; ba->max_line_count = LRT_TILE_EDGE_COUNT_INITIAL; - ba->linked_triangles = MEM_callocN(sizeof(LineartTriangle *) * ba->max_triangle_count, - "ba_linked_triangles"); - ba->linked_lines = MEM_callocN(sizeof(LineartEdge *) * ba->max_line_count, - "ba_linked_lines"); + ba->linked_triangles = static_cast<LineartTriangle **>( + MEM_callocN(sizeof(LineartTriangle *) * ba->max_triangle_count, "ba_linked_triangles")); + ba->linked_lines = static_cast<LineartEdge **>( + MEM_callocN(sizeof(LineartEdge *) * ba->max_line_count, "ba_linked_lines")); BLI_spin_init(&ba->lock); } @@ -3790,7 +3793,7 @@ static void lineart_bounding_areas_connect_new(LineartData *ld, LineartBoundingA /* For example, we are dealing with parent's left side * "tba" represents each adjacent neighbor of the parent. */ - tba = lip->data; + tba = static_cast<LineartBoundingArea *>(lip->data); /* if this neighbor is adjacent to * the two new areas on the left side of the parent, @@ -3805,7 +3808,7 @@ static void lineart_bounding_areas_connect_new(LineartData *ld, LineartBoundingA } } LISTBASE_FOREACH (LinkData *, lip, &root->rp) { - tba = lip->data; + tba = static_cast<LineartBoundingArea *>(lip->data); if (ba[0].u > tba->b && ba[0].b < tba->u) { lineart_list_append_pointer_pool(&ba[0].rp, mph, tba); lineart_list_append_pointer_pool(&tba->lp, mph, &ba[0]); @@ -3816,7 +3819,7 @@ static void lineart_bounding_areas_connect_new(LineartData *ld, LineartBoundingA } } LISTBASE_FOREACH (LinkData *, lip, &root->up) { - tba = lip->data; + tba = static_cast<LineartBoundingArea *>(lip->data); if (ba[0].r > tba->l && ba[0].l < tba->r) { lineart_list_append_pointer_pool(&ba[0].up, mph, tba); lineart_list_append_pointer_pool(&tba->bp, mph, &ba[0]); @@ -3827,7 +3830,7 @@ static void lineart_bounding_areas_connect_new(LineartData *ld, LineartBoundingA } } LISTBASE_FOREACH (LinkData *, lip, &root->bp) { - tba = lip->data; + tba = static_cast<LineartBoundingArea *>(lip->data); if (ba[2].r > tba->l && ba[2].l < tba->r) { lineart_list_append_pointer_pool(&ba[2].bp, mph, tba); lineart_list_append_pointer_pool(&tba->up, mph, &ba[2]); @@ -3841,9 +3844,10 @@ static void lineart_bounding_areas_connect_new(LineartData *ld, LineartBoundingA /* Then remove the parent bounding areas from * their original adjacent areas. */ LISTBASE_FOREACH (LinkData *, lip, &root->lp) { - for (lip2 = ((LineartBoundingArea *)lip->data)->rp.first; lip2; lip2 = next_lip) { + for (lip2 = static_cast<LinkData *>(((LineartBoundingArea *)lip->data)->rp.first); lip2; + lip2 = next_lip) { next_lip = lip2->next; - tba = lip2->data; + tba = static_cast<LineartBoundingArea *>(lip2->data); if (tba == root) { lineart_list_remove_pointer_item_no_free(&((LineartBoundingArea *)lip->data)->rp, lip2); if (ba[1].u > tba->b && ba[1].b < tba->u) { @@ -3856,9 +3860,10 @@ static void lineart_bounding_areas_connect_new(LineartData *ld, LineartBoundingA } } LISTBASE_FOREACH (LinkData *, lip, &root->rp) { - for (lip2 = ((LineartBoundingArea *)lip->data)->lp.first; lip2; lip2 = next_lip) { + for (lip2 = static_cast<LinkData *>(((LineartBoundingArea *)lip->data)->lp.first); lip2; + lip2 = next_lip) { next_lip = lip2->next; - tba = lip2->data; + tba = static_cast<LineartBoundingArea *>(lip2->data); if (tba == root) { lineart_list_remove_pointer_item_no_free(&((LineartBoundingArea *)lip->data)->lp, lip2); if (ba[0].u > tba->b && ba[0].b < tba->u) { @@ -3871,9 +3876,10 @@ static void lineart_bounding_areas_connect_new(LineartData *ld, LineartBoundingA } } LISTBASE_FOREACH (LinkData *, lip, &root->up) { - for (lip2 = ((LineartBoundingArea *)lip->data)->bp.first; lip2; lip2 = next_lip) { + for (lip2 = static_cast<LinkData *>(((LineartBoundingArea *)lip->data)->bp.first); lip2; + lip2 = next_lip) { next_lip = lip2->next; - tba = lip2->data; + tba = static_cast<LineartBoundingArea *>(lip2->data); if (tba == root) { lineart_list_remove_pointer_item_no_free(&((LineartBoundingArea *)lip->data)->bp, lip2); if (ba[0].r > tba->l && ba[0].l < tba->r) { @@ -3886,9 +3892,10 @@ static void lineart_bounding_areas_connect_new(LineartData *ld, LineartBoundingA } } LISTBASE_FOREACH (LinkData *, lip, &root->bp) { - for (lip2 = ((LineartBoundingArea *)lip->data)->up.first; lip2; lip2 = next_lip) { + for (lip2 = static_cast<LinkData *>(((LineartBoundingArea *)lip->data)->up.first); lip2; + lip2 = next_lip) { next_lip = lip2->next; - tba = lip2->data; + tba = static_cast<LineartBoundingArea *>(lip2->data); if (tba == root) { lineart_list_remove_pointer_item_no_free(&((LineartBoundingArea *)lip->data)->up, lip2); if (ba[2].r > tba->l && ba[2].l < tba->r) { @@ -3958,9 +3965,8 @@ static void lineart_bounding_area_split(LineartData *ld, LineartBoundingArea *root, int recursive_level) { - - LineartBoundingArea *ba = lineart_mem_acquire_thread(&ld->render_data_pool, - sizeof(LineartBoundingArea) * 4); + LineartBoundingArea *ba = static_cast<LineartBoundingArea *>( + lineart_mem_acquire_thread(&ld->render_data_pool, sizeof(LineartBoundingArea) * 4)); ba[0].l = root->cx; ba[0].r = root->r; ba[0].u = root->u; @@ -3993,10 +3999,10 @@ static void lineart_bounding_area_split(LineartData *ld, for (int i = 0; i < 4; i++) { ba[i].max_triangle_count = LRT_TILE_SPLITTING_TRIANGLE_LIMIT; ba[i].max_line_count = LRT_TILE_EDGE_COUNT_INITIAL; - ba[i].linked_triangles = MEM_callocN(sizeof(LineartTriangle *) * ba[i].max_triangle_count, - "ba_linked_triangles"); - ba[i].linked_lines = MEM_callocN(sizeof(LineartEdge *) * ba[i].max_line_count, - "ba_linked_lines"); + ba[i].linked_triangles = static_cast<LineartTriangle **>( + MEM_callocN(sizeof(LineartTriangle *) * ba[i].max_triangle_count, "ba_linked_triangles")); + ba[i].linked_lines = static_cast<LineartEdge **>( + MEM_callocN(sizeof(LineartEdge *) * ba[i].max_line_count, "ba_linked_lines")); BLI_spin_init(&ba[i].lock); } @@ -4012,16 +4018,20 @@ static void lineart_bounding_area_split(LineartData *ld, /* Re-link triangles into child tiles, not doing intersection lines during this because this * batch of triangles are all tested with each other for intersections. */ if (LRT_BOUND_AREA_CROSSES(b, &ba[0].l)) { - lineart_bounding_area_link_triangle(ld, &ba[0], tri, b, 0, recursive_level + 1, false, NULL); + lineart_bounding_area_link_triangle( + ld, &ba[0], tri, b, 0, recursive_level + 1, false, nullptr); } if (LRT_BOUND_AREA_CROSSES(b, &ba[1].l)) { - lineart_bounding_area_link_triangle(ld, &ba[1], tri, b, 0, recursive_level + 1, false, NULL); + lineart_bounding_area_link_triangle( + ld, &ba[1], tri, b, 0, recursive_level + 1, false, nullptr); } if (LRT_BOUND_AREA_CROSSES(b, &ba[2].l)) { - lineart_bounding_area_link_triangle(ld, &ba[2], tri, b, 0, recursive_level + 1, false, NULL); + lineart_bounding_area_link_triangle( + ld, &ba[2], tri, b, 0, recursive_level + 1, false, nullptr); } if (LRT_BOUND_AREA_CROSSES(b, &ba[3].l)) { - lineart_bounding_area_link_triangle(ld, &ba[3], tri, b, 0, recursive_level + 1, false, NULL); + lineart_bounding_area_link_triangle( + ld, &ba[3], tri, b, 0, recursive_level + 1, false, nullptr); } } @@ -4030,7 +4040,7 @@ static void lineart_bounding_area_split(LineartData *ld, root->child = ba; } -static bool lineart_bounding_area_edge_intersect(LineartData *UNUSED(fb), +static bool lineart_bounding_area_edge_intersect(LineartData * /*fb*/, const double l[2], const double r[2], LineartBoundingArea *ba) @@ -4128,7 +4138,7 @@ static void lineart_bounding_area_link_triangle(LineartData *ld, int recursive, int recursive_level, bool do_intersection, - struct LineartIsecThread *th) + LineartIsecThread *th) { bool triangle_vert_inside; if (!lineart_bounding_area_triangle_intersect(ld, tri, root_ba, &triangle_vert_inside)) { @@ -4138,8 +4148,8 @@ static void lineart_bounding_area_link_triangle(LineartData *ld, LineartBoundingArea *old_ba = root_ba; if (old_ba->child) { - /* If old_ba->child is not NULL, then tile splitting is fully finished, safe to directly insert - * into child tiles. */ + /* If old_ba->child is not nullptr, then tile splitting is fully finished, safe to directly + * insert into child tiles. */ double *B1 = l_r_u_b; double b[4]; if (!l_r_u_b) { @@ -4158,7 +4168,7 @@ static void lineart_bounding_area_link_triangle(LineartData *ld, return; } - /* When splitting tiles, triangles are relinked into new tiles by a single thread, #th is NULL + /* When splitting tiles, triangles are relinked into new tiles by a single thread, #th is nullptr * in that situation. */ if (th) { BLI_spin_lock(&old_ba->lock); @@ -4189,7 +4199,7 @@ static void lineart_bounding_area_link_triangle(LineartData *ld, if (recursive_level < ld->qtree.recursive_level && old_ba->insider_triangle_count >= LRT_TILE_SPLITTING_TRIANGLE_LIMIT) { if (!old_ba->child) { - /* old_ba->child==NULL, means we are the thread that's doing the splitting. */ + /* old_ba->child==nullptr, means we are the thread that's doing the splitting. */ lineart_bounding_area_split(ld, old_ba, recursive_level); } /* Otherwise other thread has completed the splitting process. */ } @@ -4239,7 +4249,7 @@ static void lineart_bounding_area_link_edge(LineartData *ld, LineartBoundingArea *root_ba, LineartEdge *e) { - if (root_ba->child == NULL) { + if (root_ba->child == nullptr) { lineart_bounding_area_line_add(root_ba, e); } else { @@ -4274,8 +4284,8 @@ static void lineart_clear_linked_edges_recursive(LineartData *ld, LineartBoundin } root_ba->line_count = 0; root_ba->max_line_count = 128; - root_ba->linked_lines = MEM_callocN(sizeof(LineartEdge *) * root_ba->max_line_count, - "cleared lineart edges"); + root_ba->linked_lines = static_cast<LineartEdge **>( + MEM_callocN(sizeof(LineartEdge *) * root_ba->max_line_count, "cleared lineart edges")); } void lineart_main_clear_linked_edges(LineartData *ld) { @@ -4335,8 +4345,8 @@ static void lineart_main_remove_unused_lines_recursive(LineartBoundingArea *ba, return; } - LineartEdge **new_array = MEM_callocN(sizeof(LineartEdge *) * usable_count, - "cleaned lineart edge array"); + LineartEdge **new_array = static_cast<LineartEdge **>( + MEM_callocN(sizeof(LineartEdge *) * usable_count, "cleaned lineart edge array")); int new_i = 0; for (int i = 0; i < ba->line_count; i++) { @@ -4382,10 +4392,10 @@ static bool lineart_get_triangle_bounding_areas( return false; } - (*colbegin) = (int)((b[0] + 1.0) / sp_w); - (*colend) = (int)((b[1] + 1.0) / sp_w); - (*rowend) = ld->qtree.count_y - (int)((b[2] + 1.0) / sp_h) - 1; - (*rowbegin) = ld->qtree.count_y - (int)((b[3] + 1.0) / sp_h) - 1; + (*colbegin) = int((b[0] + 1.0) / sp_w); + (*colend) = int((b[1] + 1.0) / sp_w); + (*rowend) = ld->qtree.count_y - int((b[2] + 1.0) / sp_h) - 1; + (*rowbegin) = ld->qtree.count_y - int((b[3] + 1.0) / sp_h) - 1; if ((*colend) >= ld->qtree.count_x) { (*colend) = ld->qtree.count_x - 1; @@ -4426,10 +4436,10 @@ static bool lineart_get_edge_bounding_areas( return false; } - (*colbegin) = (int)((b[0] + 1.0) / sp_w); - (*colend) = (int)((b[1] + 1.0) / sp_w); - (*rowend) = ld->qtree.count_y - (int)((b[2] + 1.0) / sp_h) - 1; - (*rowbegin) = ld->qtree.count_y - (int)((b[3] + 1.0) / sp_h) - 1; + (*colbegin) = int((b[0] + 1.0) / sp_w); + (*colend) = int((b[1] + 1.0) / sp_w); + (*rowend) = ld->qtree.count_y - int((b[2] + 1.0) / sp_h) - 1; + (*rowbegin) = ld->qtree.count_y - int((b[3] + 1.0) / sp_h) - 1; /* It's possible that the line stretches too much out to the side, resulting negative value. */ if ((*rowend) < (*rowbegin)) { @@ -4457,8 +4467,8 @@ LineartBoundingArea *MOD_lineart_get_parent_bounding_area(LineartData *ld, doubl return 0; } - col = (int)((x + 1.0) / sp_w); - row = ld->qtree.count_y - (int)((y + 1.0) / sp_h) - 1; + col = int((x + 1.0) / sp_w); + row = ld->qtree.count_y - int((y + 1.0) / sp_h) - 1; if (col >= ld->qtree.count_x) { col = ld->qtree.count_x - 1; @@ -4480,8 +4490,8 @@ static LineartBoundingArea *lineart_get_bounding_area(LineartData *ld, double x, { LineartBoundingArea *iba; double sp_w = ld->qtree.tile_width, sp_h = ld->qtree.tile_height; - int c = (int)((x + 1.0) / sp_w); - int r = ld->qtree.count_y - (int)((y + 1.0) / sp_h) - 1; + int c = int((x + 1.0) / sp_w); + int r = ld->qtree.count_y - int((y + 1.0) / sp_h) - 1; if (r < 0) { r = 0; } @@ -4520,13 +4530,13 @@ static LineartBoundingArea *lineart_get_bounding_area(LineartData *ld, double x, LineartBoundingArea *MOD_lineart_get_bounding_area(LineartData *ld, double x, double y) { LineartBoundingArea *ba; - if ((ba = MOD_lineart_get_parent_bounding_area(ld, x, y)) != NULL) { + if ((ba = MOD_lineart_get_parent_bounding_area(ld, x, y)) != nullptr) { return lineart_get_bounding_area(ld, x, y); } - return NULL; + return nullptr; } -static void lineart_add_triangles_worker(TaskPool *__restrict UNUSED(pool), LineartIsecThread *th) +static void lineart_add_triangles_worker(TaskPool *__restrict /*pool*/, LineartIsecThread *th) { LineartData *ld = th->ld; int _dir_control = 0; @@ -4535,12 +4545,13 @@ static void lineart_add_triangles_worker(TaskPool *__restrict UNUSED(pool), Line eln = eln->next) { int index_start = eln == th->pending_from ? th->index_from : 0; int index_end = eln == th->pending_to ? th->index_to : eln->element_count; - LineartTriangle *tri = (void *)(((uchar *)eln->pointer) + ld->sizeof_triangle * index_start); + LineartTriangle *tri = static_cast<LineartTriangle *>( + (void *)(((uchar *)eln->pointer) + ld->sizeof_triangle * index_start)); for (int ei = index_start; ei < index_end; ei++) { int x1, x2, y1, y2; int r, co; if ((tri->flags & LRT_CULL_USED) || (tri->flags & LRT_CULL_DISCARD)) { - tri = (void *)(((uchar *)tri) + ld->sizeof_triangle); + tri = static_cast<LineartTriangle *>((void *)(((uchar *)tri) + ld->sizeof_triangle)); continue; } if (lineart_get_triangle_bounding_areas(ld, tri, &y1, &y2, &x1, &x2)) { @@ -4552,7 +4563,7 @@ static void lineart_add_triangles_worker(TaskPool *__restrict UNUSED(pool), Line } } } /* Else throw away. */ - tri = (void *)(((uchar *)tri) + ld->sizeof_triangle); + tri = static_cast<LineartTriangle *>((void *)(((uchar *)tri) + ld->sizeof_triangle)); } } } @@ -4582,13 +4593,15 @@ static void lineart_create_edges_from_isec_data(LineartIsecData *d) /* We don't care about removing duplicated vert in this method, chaining can handle that, * and it saves us from using locks and look up tables. */ - LineartVert *v = lineart_mem_acquire(ld->edge_data_pool, sizeof(LineartVert) * total_lines * 2); - LineartEdge *e = lineart_mem_acquire(ld->edge_data_pool, sizeof(LineartEdge) * total_lines); - LineartEdgeSegment *es = lineart_mem_acquire(ld->edge_data_pool, - sizeof(LineartEdgeSegment) * total_lines); - - LineartElementLinkNode *eln = lineart_mem_acquire(ld->edge_data_pool, - sizeof(LineartElementLinkNode)); + LineartVert *v = static_cast<LineartVert *>( + lineart_mem_acquire(ld->edge_data_pool, sizeof(LineartVert) * total_lines * 2)); + LineartEdge *e = static_cast<LineartEdge *>( + lineart_mem_acquire(ld->edge_data_pool, sizeof(LineartEdge) * total_lines)); + LineartEdgeSegment *es = static_cast<LineartEdgeSegment *>( + lineart_mem_acquire(ld->edge_data_pool, sizeof(LineartEdgeSegment) * total_lines)); + + LineartElementLinkNode *eln = static_cast<LineartElementLinkNode *>( + lineart_mem_acquire(ld->edge_data_pool, sizeof(LineartElementLinkNode))); eln->element_count = total_lines; eln->pointer = e; eln->flags |= LRT_ELEMENT_INTERSECTION_DATA; @@ -4641,8 +4654,8 @@ static void lineart_create_edges_from_isec_data(LineartIsecData *d) LineartElementLinkNode *eln2 = obi1 == obi2 ? eln1 : lineart_find_matching_eln( &ld->geom.line_buffer_pointers, obi2); - Object *ob1 = eln1 ? eln1->object_ref : NULL; - Object *ob2 = eln2 ? eln2->object_ref : NULL; + Object *ob1 = eln1 ? static_cast<Object *>(eln1->object_ref) : nullptr; + Object *ob2 = eln2 ? static_cast<Object *>(eln2->object_ref) : nullptr; if (e->t1->intersection_priority > e->t2->intersection_priority) { e->object_ref = ob1; } @@ -4681,9 +4694,10 @@ void lineart_main_add_triangles(LineartData *ld) LineartIsecData d = {0}; lineart_init_isec_thread(&d, ld, ld->thread_count); - TaskPool *tp = BLI_task_pool_create(NULL, TASK_PRIORITY_HIGH); + TaskPool *tp = BLI_task_pool_create(nullptr, TASK_PRIORITY_HIGH); for (int i = 0; i < ld->thread_count; i++) { - BLI_task_pool_push(tp, (TaskRunFunction)lineart_add_triangles_worker, &d.threads[i], 0, NULL); + BLI_task_pool_push( + tp, (TaskRunFunction)lineart_add_triangles_worker, &d.threads[i], 0, nullptr); } BLI_task_pool_work_and_wait(tp); BLI_task_pool_free(tp); @@ -4738,7 +4752,7 @@ LineartBoundingArea *lineart_edge_first_bounding_area(LineartData *ld, * This march along one render line in image space and * get the next bounding area the line is crossing. */ -LineartBoundingArea *lineart_bounding_area_next(LineartBoundingArea *this, +LineartBoundingArea *lineart_bounding_area_next(LineartBoundingArea *self, double *fbcoord1, double *fbcoord2, double x, @@ -4755,12 +4769,12 @@ LineartBoundingArea *lineart_bounding_area_next(LineartBoundingArea *this, /* If we are marching towards the right. */ if (positive_x > 0) { - rx = this->r; + rx = self->r; ry = y + k * (rx - x); /* If we are marching towards the top. */ if (positive_y > 0) { - uy = this->u; + uy = self->u; ux = x + (uy - y) / k; r1 = ratiod(fbcoord1[0], fbcoord2[0], rx); r2 = ratiod(fbcoord1[0], fbcoord2[0], ux); @@ -4770,8 +4784,8 @@ LineartBoundingArea *lineart_bounding_area_next(LineartBoundingArea *this, /* We reached the right side before the top side. */ if (r1 <= r2) { - LISTBASE_FOREACH (LinkData *, lip, &this->rp) { - ba = lip->data; + LISTBASE_FOREACH (LinkData *, lip, &self->rp) { + ba = static_cast<LineartBoundingArea *>(lip->data); if (ba->u >= ry && ba->b < ry) { *next_x = rx; *next_y = ry; @@ -4781,8 +4795,8 @@ LineartBoundingArea *lineart_bounding_area_next(LineartBoundingArea *this, } /* We reached the top side before the right side. */ else { - LISTBASE_FOREACH (LinkData *, lip, &this->up) { - ba = lip->data; + LISTBASE_FOREACH (LinkData *, lip, &self->up) { + ba = static_cast<LineartBoundingArea *>(lip->data); if (ba->r >= ux && ba->l < ux) { *next_x = ux; *next_y = uy; @@ -4793,7 +4807,7 @@ LineartBoundingArea *lineart_bounding_area_next(LineartBoundingArea *this, } /* If we are marching towards the bottom. */ else if (positive_y < 0) { - by = this->b; + by = self->b; bx = x + (by - y) / k; r1 = ratiod(fbcoord1[0], fbcoord2[0], rx); r2 = ratiod(fbcoord1[0], fbcoord2[0], bx); @@ -4801,8 +4815,8 @@ LineartBoundingArea *lineart_bounding_area_next(LineartBoundingArea *this, return 0; } if (r1 <= r2) { - LISTBASE_FOREACH (LinkData *, lip, &this->rp) { - ba = lip->data; + LISTBASE_FOREACH (LinkData *, lip, &self->rp) { + ba = static_cast<LineartBoundingArea *>(lip->data); if (ba->u >= ry && ba->b < ry) { *next_x = rx; *next_y = ry; @@ -4811,8 +4825,8 @@ LineartBoundingArea *lineart_bounding_area_next(LineartBoundingArea *this, } } else { - LISTBASE_FOREACH (LinkData *, lip, &this->bp) { - ba = lip->data; + LISTBASE_FOREACH (LinkData *, lip, &self->bp) { + ba = static_cast<LineartBoundingArea *>(lip->data); if (ba->r >= bx && ba->l < bx) { *next_x = bx; *next_y = by; @@ -4823,14 +4837,14 @@ LineartBoundingArea *lineart_bounding_area_next(LineartBoundingArea *this, } /* If the line is completely horizontal, in which Y difference == 0. */ else { - r1 = ratiod(fbcoord1[0], fbcoord2[0], this->r); + r1 = ratiod(fbcoord1[0], fbcoord2[0], self->r); if (r1 > 1) { return 0; } - LISTBASE_FOREACH (LinkData *, lip, &this->rp) { - ba = lip->data; + LISTBASE_FOREACH (LinkData *, lip, &self->rp) { + ba = static_cast<LineartBoundingArea *>(lip->data); if (ba->u >= y && ba->b < y) { - *next_x = this->r; + *next_x = self->r; *next_y = y; return ba; } @@ -4840,12 +4854,12 @@ LineartBoundingArea *lineart_bounding_area_next(LineartBoundingArea *this, /* If we are marching towards the left. */ else if (positive_x < 0) { - lx = this->l; + lx = self->l; ly = y + k * (lx - x); /* If we are marching towards the top. */ if (positive_y > 0) { - uy = this->u; + uy = self->u; ux = x + (uy - y) / k; r1 = ratiod(fbcoord1[0], fbcoord2[0], lx); r2 = ratiod(fbcoord1[0], fbcoord2[0], ux); @@ -4853,8 +4867,8 @@ LineartBoundingArea *lineart_bounding_area_next(LineartBoundingArea *this, return 0; } if (r1 <= r2) { - LISTBASE_FOREACH (LinkData *, lip, &this->lp) { - ba = lip->data; + LISTBASE_FOREACH (LinkData *, lip, &self->lp) { + ba = static_cast<LineartBoundingArea *>(lip->data); if (ba->u >= ly && ba->b < ly) { *next_x = lx; *next_y = ly; @@ -4863,8 +4877,8 @@ LineartBoundingArea *lineart_bounding_area_next(LineartBoundingArea *this, } } else { - LISTBASE_FOREACH (LinkData *, lip, &this->up) { - ba = lip->data; + LISTBASE_FOREACH (LinkData *, lip, &self->up) { + ba = static_cast<LineartBoundingArea *>(lip->data); if (ba->r >= ux && ba->l < ux) { *next_x = ux; *next_y = uy; @@ -4876,7 +4890,7 @@ LineartBoundingArea *lineart_bounding_area_next(LineartBoundingArea *this, /* If we are marching towards the bottom. */ else if (positive_y < 0) { - by = this->b; + by = self->b; bx = x + (by - y) / k; r1 = ratiod(fbcoord1[0], fbcoord2[0], lx); r2 = ratiod(fbcoord1[0], fbcoord2[0], bx); @@ -4884,8 +4898,8 @@ LineartBoundingArea *lineart_bounding_area_next(LineartBoundingArea *this, return 0; } if (r1 <= r2) { - LISTBASE_FOREACH (LinkData *, lip, &this->lp) { - ba = lip->data; + LISTBASE_FOREACH (LinkData *, lip, &self->lp) { + ba = static_cast<LineartBoundingArea *>(lip->data); if (ba->u >= ly && ba->b < ly) { *next_x = lx; *next_y = ly; @@ -4894,8 +4908,8 @@ LineartBoundingArea *lineart_bounding_area_next(LineartBoundingArea *this, } } else { - LISTBASE_FOREACH (LinkData *, lip, &this->bp) { - ba = lip->data; + LISTBASE_FOREACH (LinkData *, lip, &self->bp) { + ba = static_cast<LineartBoundingArea *>(lip->data); if (ba->r >= bx && ba->l < bx) { *next_x = bx; *next_y = by; @@ -4906,14 +4920,14 @@ LineartBoundingArea *lineart_bounding_area_next(LineartBoundingArea *this, } /* Again, horizontal. */ else { - r1 = ratiod(fbcoord1[0], fbcoord2[0], this->l); + r1 = ratiod(fbcoord1[0], fbcoord2[0], self->l); if (r1 > 1) { return 0; } - LISTBASE_FOREACH (LinkData *, lip, &this->lp) { - ba = lip->data; + LISTBASE_FOREACH (LinkData *, lip, &self->lp) { + ba = static_cast<LineartBoundingArea *>(lip->data); if (ba->u >= y && ba->b < y) { - *next_x = this->l; + *next_x = self->l; *next_y = y; return ba; } @@ -4923,29 +4937,29 @@ LineartBoundingArea *lineart_bounding_area_next(LineartBoundingArea *this, /* If the line is completely vertical, hence X difference == 0. */ else { if (positive_y > 0) { - r1 = ratiod(fbcoord1[1], fbcoord2[1], this->u); + r1 = ratiod(fbcoord1[1], fbcoord2[1], self->u); if (r1 > 1) { return 0; } - LISTBASE_FOREACH (LinkData *, lip, &this->up) { - ba = lip->data; + LISTBASE_FOREACH (LinkData *, lip, &self->up) { + ba = static_cast<LineartBoundingArea *>(lip->data); if (ba->r > x && ba->l <= x) { *next_x = x; - *next_y = this->u; + *next_y = self->u; return ba; } } } else if (positive_y < 0) { - r1 = ratiod(fbcoord1[1], fbcoord2[1], this->b); + r1 = ratiod(fbcoord1[1], fbcoord2[1], self->b); if (r1 > 1) { return 0; } - LISTBASE_FOREACH (LinkData *, lip, &this->bp) { - ba = lip->data; + LISTBASE_FOREACH (LinkData *, lip, &self->bp) { + ba = static_cast<LineartBoundingArea *>(lip->data); if (ba->r > x && ba->l <= x) { *next_x = x; - *next_y = this->b; + *next_y = self->b; return ba; } } @@ -5004,9 +5018,9 @@ bool MOD_lineart_compute_feature_lines(Depsgraph *depsgraph, * See definition of LineartTriangleThread for details. */ ld->sizeof_triangle = lineart_triangle_size_get(ld); - LineartData *shadow_rb = NULL; + LineartData *shadow_rb = nullptr; LineartElementLinkNode *shadow_veln, *shadow_eeln; - ListBase *shadow_elns = ld->conf.shadow_selection ? &lc->shadow_elns : NULL; + ListBase *shadow_elns = ld->conf.shadow_selection ? &lc->shadow_elns : nullptr; bool shadow_generated = lineart_main_try_generate_shadow(depsgraph, scene, ld, @@ -5152,7 +5166,7 @@ static void lineart_gpencil_generate(LineartCache *cache, Depsgraph *depsgraph, Object *gpencil_object, float (*gp_obmat_inverse)[4], - bGPDlayer *UNUSED(gpl), + bGPDlayer * /*gpl*/, bGPDframe *gpf, int level_start, int level_end, @@ -5171,9 +5185,9 @@ static void lineart_gpencil_generate(LineartCache *cache, const char *vgname, int modifier_flags) { - if (cache == NULL) { + if (cache == nullptr) { if (G.debug_value == 4000) { - printf("NULL Lineart cache!\n"); + printf("nullptr Lineart cache!\n"); } return; } @@ -5181,12 +5195,12 @@ static void lineart_gpencil_generate(LineartCache *cache, int stroke_count = 0; int color_idx = 0; - Object *orig_ob = NULL; + Object *orig_ob = nullptr; if (source_object) { orig_ob = source_object->id.orig_id ? (Object *)source_object->id.orig_id : source_object; } - Collection *orig_col = NULL; + Collection *orig_col = nullptr; if (source_collection) { orig_col = source_collection->id.orig_id ? (Collection *)source_collection->id.orig_id : source_collection; @@ -5365,7 +5379,7 @@ static void lineart_gpencil_generate(LineartCache *cache, if (G.debug_value == 4000) { BKE_gpencil_stroke_set_random_color(gps); } - BKE_gpencil_stroke_geometry_update(gpencil_object->data, gps); + BKE_gpencil_stroke_geometry_update(static_cast<bGPdata *>(gpencil_object->data), gps); stroke_count++; } @@ -5401,8 +5415,8 @@ void MOD_lineart_gpencil_generate(LineartCache *cache, return; } - Object *source_object = NULL; - Collection *source_collection = NULL; + Object *source_object = nullptr; + Collection *source_collection = nullptr; int16_t use_types = edge_types; if (source_type == LRT_SOURCE_OBJECT) { if (!source_reference) { diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_intern.h b/source/blender/gpencil_modifiers/intern/lineart/lineart_intern.h index 947586aaec4..f33208ff931 100644 --- a/source/blender/gpencil_modifiers/intern/lineart/lineart_intern.h +++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_intern.h @@ -17,6 +17,10 @@ #include <math.h> #include <string.h> +#ifdef __cplusplus +extern "C" { +#endif + struct LineartEdge; struct LineartData; struct LineartStaticMemPool; @@ -148,7 +152,7 @@ bool lineart_edge_from_triangle(const struct LineartTriangle *tri, LineartBoundingArea *lineart_edge_first_bounding_area(struct LineartData *ld, double *fbcoord1, double *fbcoord2); -LineartBoundingArea *lineart_bounding_area_next(struct LineartBoundingArea *_this, +LineartBoundingArea *lineart_bounding_area_next(struct LineartBoundingArea *self, double *fbcoord1, double *fbcoord2, double x, @@ -169,10 +173,6 @@ void lineart_add_edge_to_array(struct LineartPendingEdges *pe, struct LineartEdg void lineart_finalize_object_edge_array_reserve(struct LineartPendingEdges *pe, int count); void lineart_destroy_render_data_keep_init(struct LineartData *ld); -#ifdef __cplusplus -extern "C" { -#endif - void lineart_sort_adjacent_items(struct LineartAdjacentEdge *ai, int length); #ifdef __cplusplus diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h index 494295f7bb9..0e0da516ebd 100644 --- a/source/blender/makesdna/DNA_object_types.h +++ b/source/blender/makesdna/DNA_object_types.h @@ -8,6 +8,8 @@ #pragma once +#include "BLI_utildefines.h" + #include "DNA_object_enums.h" #include "DNA_customdata_types.h" @@ -233,6 +235,7 @@ enum eObjectLineArt_Usage { OBJECT_LRT_NO_INTERSECTION = (1 << 4), OBJECT_LRT_FORCE_INTERSECTION = (1 << 5), }; +ENUM_OPERATORS(eObjectLineArt_Usage, OBJECT_LRT_FORCE_INTERSECTION); enum eObjectLineArt_Flags { OBJECT_LRT_OWN_CREASE = (1 << 0), |