Changeset View
Changeset View
Standalone View
Standalone View
source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
| Show First 20 Lines • Show All 742 Lines • ▼ Show 20 Lines | static void lineart_triangle_cull_single(LineartRenderBuffer *rb, | ||||
| LineartTriangle *rt1 = (void *)(((uchar *)t_eln->pointer) + rb->triangle_size * t_count); | LineartTriangle *rt1 = (void *)(((uchar *)t_eln->pointer) + rb->triangle_size * t_count); | ||||
| LineartTriangle *rt2 = (void *)(((uchar *)t_eln->pointer) + rb->triangle_size * (t_count + 1)); | LineartTriangle *rt2 = (void *)(((uchar *)t_eln->pointer) + rb->triangle_size * (t_count + 1)); | ||||
| new_e = &((LineartEdge *)e_eln->pointer)[e_count]; | new_e = &((LineartEdge *)e_eln->pointer)[e_count]; | ||||
| /* Init `rl` to the last `rl` entry. */ | /* Init `rl` to the last `rl` entry. */ | ||||
| e = new_e; | e = new_e; | ||||
| #define INCREASE_RL \ | #define INCREASE_RL \ | ||||
| e_count++; \ | |||||
| v1_obi = e->v1_obindex; \ | v1_obi = e->v1_obindex; \ | ||||
| v2_obi = e->v2_obindex; \ | v2_obi = e->v2_obindex; \ | ||||
| new_e = &((LineartEdge *)e_eln->pointer)[e_count]; \ | new_e = &((LineartEdge *)e_eln->pointer)[e_count]; \ | ||||
| e_count++; \ | |||||
| e = new_e; \ | e = new_e; \ | ||||
| e->v1_obindex = v1_obi; \ | e->v1_obindex = v1_obi; \ | ||||
| e->v2_obindex = v2_obi; \ | e->v2_obindex = v2_obi; \ | ||||
| rls = lineart_mem_aquire(&rb->render_data_pool, sizeof(LineartLineSegment)); \ | rls = lineart_mem_aquire(&rb->render_data_pool, sizeof(LineartLineSegment)); \ | ||||
| BLI_addtail(&e->segments, rls); | BLI_addtail(&e->segments, rls); | ||||
| #define SELECT_RL(e_num, v1_link, v2_link, newrt) \ | #define SELECT_RL(e_num, v1_link, v2_link, newrt) \ | ||||
| if (rta->e[e_num]) { \ | if (rta->e[e_num]) { \ | ||||
| ▲ Show 20 Lines • Show All 728 Lines • ▼ Show 20 Lines | static void lineart_geometry_object_load(Depsgraph *dg, | ||||
| Mesh *use_mesh; | Mesh *use_mesh; | ||||
| float use_crease = 0; | float use_crease = 0; | ||||
| int usage = override_usage ? override_usage : ob->lineart.usage; | int usage = override_usage ? override_usage : ob->lineart.usage; | ||||
| #define LRT_MESH_FINISH \ | #define LRT_MESH_FINISH \ | ||||
| BM_mesh_free(bm); \ | BM_mesh_free(bm); \ | ||||
| if (ob->type != OB_MESH) { \ | if (ob->type != OB_MESH) { \ | ||||
| BKE_mesh_free(use_mesh); \ | BKE_mesh_free_data(use_mesh); \ | ||||
| MEM_freeN(use_mesh); \ | MEM_freeN(use_mesh); \ | ||||
| } | } | ||||
| if (usage == OBJECT_LRT_EXCLUDE) { | if (usage == OBJECT_LRT_EXCLUDE) { | ||||
| return; | return; | ||||
| } | } | ||||
| if (ELEM(ob->type, OB_MESH, OB_MBALL, OB_CURVE, OB_SURF, OB_FONT)) { | if (ELEM(ob->type, OB_MESH, OB_MBALL, OB_CURVE, OB_SURF, OB_FONT)) { | ||||
| ▲ Show 20 Lines • Show All 628 Lines • ▼ Show 20 Lines | else if (st_r == 1) { | ||||
| INTERSECT_JUST_GREATER(is, order, 1 - DBL_TRIANGLE_LIM, RCross); | INTERSECT_JUST_GREATER(is, order, 1 - DBL_TRIANGLE_LIM, RCross); | ||||
| } | } | ||||
| else { | else { | ||||
| INTERSECT_JUST_SMALLER(is, order, 1 + DBL_TRIANGLE_LIM, LCross); | INTERSECT_JUST_SMALLER(is, order, 1 + DBL_TRIANGLE_LIM, LCross); | ||||
| INTERSECT_JUST_GREATER(is, order, 1 + DBL_TRIANGLE_LIM, RCross); | INTERSECT_JUST_GREATER(is, order, 1 + DBL_TRIANGLE_LIM, RCross); | ||||
| } | } | ||||
| } | } | ||||
| else if (st_r == 0) { | else if (st_r == 0) { | ||||
| INTERSECT_JUST_GREATER(is, order, 0, LCross); | INTERSECT_JUST_GREATER(is, order, DBL_TRIANGLE_LIM, LCross); | ||||
| if (LRT_ABC(LCross) && is[LCross] > 0) { | if (LRT_ABC(LCross) && is[LCross] > DBL_TRIANGLE_LIM) { | ||||
| INTERSECT_JUST_GREATER(is, order, is[LCross], RCross); | INTERSECT_JUST_GREATER(is, order, is[LCross], RCross); | ||||
| } | } | ||||
| else { | else { | ||||
| INTERSECT_JUST_GREATER(is, order, is[LCross], LCross); | INTERSECT_JUST_GREATER(is, order, is[LCross], LCross); | ||||
| INTERSECT_JUST_GREATER(is, order, is[LCross], RCross); | INTERSECT_JUST_GREATER(is, order, is[LCross], RCross); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 1,497 Lines • ▼ Show 20 Lines | |||||
| * \return True when a change is made. | * \return True when a change is made. | ||||
| */ | */ | ||||
| bool MOD_lineart_compute_feature_lines(Depsgraph *depsgraph, LineartGpencilModifierData *lmd) | bool MOD_lineart_compute_feature_lines(Depsgraph *depsgraph, LineartGpencilModifierData *lmd) | ||||
| { | { | ||||
| LineartRenderBuffer *rb; | LineartRenderBuffer *rb; | ||||
| Scene *scene = DEG_get_evaluated_scene(depsgraph); | Scene *scene = DEG_get_evaluated_scene(depsgraph); | ||||
| int intersections_only = 0; /* Not used right now, but preserve for future. */ | int intersections_only = 0; /* Not used right now, but preserve for future. */ | ||||
| BKE_scene_camera_switch_update(scene); | |||||
| if (!scene->camera) { | if (!scene->camera) { | ||||
| return false; | return false; | ||||
| } | } | ||||
| rb = lineart_create_render_buffer(scene, lmd); | rb = lineart_create_render_buffer(scene, lmd); | ||||
| /* Triangle thread testing data size varies depending on the thread count. | /* Triangle thread testing data size varies depending on the thread count. | ||||
| * See definition of LineartTriangleThread for details. */ | * See definition of LineartTriangleThread for details. */ | ||||
| ▲ Show 20 Lines • Show All 333 Lines • Show Last 20 Lines | |||||