Commit: 6e1be5b09e8d2b84399451aee6a88ae1a1a07c65 Author: YimingWu Date: Mon Jun 24 16:49:04 2019 +0800 Branches: soc-2019-npr https://developer.blender.org/rB6e1be5b09e8d2b84399451aee6a88ae1a1a07c65
LANPR: removed GP Stroke modifier, Object modifier now only create visible strokes and follow level values. =================================================================== M source/blender/blenkernel/BKE_gpencil_modifier.h M source/blender/draw/engines/lanpr/lanpr_access.c M source/blender/draw/engines/lanpr/lanpr_access.h M source/blender/draw/engines/lanpr/lanpr_chain.c M source/blender/draw/engines/lanpr/lanpr_data_types.h M source/blender/draw/engines/lanpr/lanpr_ops.c M source/blender/gpencil_modifiers/CMakeLists.txt M source/blender/gpencil_modifiers/MOD_gpencil_modifiertypes.h M source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c D source/blender/gpencil_modifiers/intern/MOD_gpencilstroke.c M source/blender/makesdna/DNA_gpencil_modifier_types.h M source/blender/makesrna/RNA_access.h M source/blender/makesrna/intern/rna_gpencil_modifier.c M source/blender/makesrna/intern/rna_modifier.c =================================================================== diff --git a/source/blender/blenkernel/BKE_gpencil_modifier.h b/source/blender/blenkernel/BKE_gpencil_modifier.h index d616c74520a..bb0db5d44a3 100644 --- a/source/blender/blenkernel/BKE_gpencil_modifier.h +++ b/source/blender/blenkernel/BKE_gpencil_modifier.h @@ -53,7 +53,7 @@ struct bGPDstroke; typedef enum { /* Should not be used, only for None modifier type */ - eGpencilModifierTypeType_None, + Type_None, /* grease pencil modifiers */ eGpencilModifierTypeType_Gpencil, diff --git a/source/blender/draw/engines/lanpr/lanpr_access.c b/source/blender/draw/engines/lanpr/lanpr_access.c index 3cd915b9713..d1873e77b11 100644 --- a/source/blender/draw/engines/lanpr/lanpr_access.c +++ b/source/blender/draw/engines/lanpr/lanpr_access.c @@ -39,203 +39,8 @@ static BMVert *split_edge_and_move(BMesh *bm, BMEdge *edge, const float new_pos[ return vert; } -void lanpr_generate_gpencil_geometry( - GpencilModifierData *md, Depsgraph *depsgraph, Object *ob, bGPDlayer *gpl, bGPDframe *gpf) -{ - StrokeGpencilModifierData *gpmd = (StrokeGpencilModifierData *)md; - Scene *scene = DEG_get_evaluated_scene(depsgraph); - LANPR_RenderBuffer *rb = lanpr_share.render_buffer_shared; - - if (gpmd->object == NULL) { - printf("NULL object!\n"); - return; - } - - if (rb == NULL) { - printf("NULL LANPR rb!\n"); - return; - } - - int color_idx = 0; - int tot_points = 0; - short thickness = 1; - - float mat[4][4]; - - unit_m4(mat); - - BMesh *bm; - - bm = BKE_mesh_to_bmesh_ex(gpmd->object->data, - &(struct BMeshCreateParams){0}, - &(struct BMeshFromMeshParams){ - .calc_face_normal = true, - .cd_mask_extra = CD_MASK_ORIGINDEX, - }); - - // Split countour lines at occlution points and deselect occluded segment - LANPR_RenderLine *rl; - LANPR_RenderLineSegment *rls, *irls; - for (rl = rb->all_render_lines.first; rl; rl = (LANPR_RenderLine *)rl->item.next) { - BMEdge *e = BM_edge_at_index_find(bm, rl->edge_idx); - BMVert *v1 = e->v1; // Segment goes from v1 to v2 - BMVert *v2 = e->v2; - - BMVert *cur_vert = v1; - for (rls = rl->segments.first; rls; rls = (LANPR_RenderLineSegment *)rls->item.next) { - irls = (LANPR_RenderLineSegment *)rls->item.next; - - if (rls->occlusion != 0) { - BM_elem_flag_disable(cur_vert, BM_ELEM_SELECT); - } - - if (!irls) { - break; - } - - // safety reasons - CLAMP(rls->at, 0, 1); - CLAMP(irls->at, 0, 1); - - if (irls->at == 1.0f) { - if (irls->occlusion != 0) { - BM_elem_flag_disable(v2, BM_ELEM_SELECT); - } - break; - } - - float split_pos[3]; - - interp_v3_v3v3(split_pos, v1->co, v2->co, irls->at); - - cur_vert = split_edge_and_move(bm, e, split_pos); - - e = BM_edge_exists(cur_vert, v2); - } - } - - // Chain together strokes - BMVert *vert; - BMIter iter; - - BM_ITER_MESH (vert, &iter, bm, BM_VERTS_OF_MESH) { - - // Have we already used this vert? - // if(!BM_elem_flag_test(vert, BM_ELEM_SELECT)){ - // continue; - //} - - BMVert *prepend_vert = NULL; - BMVert *next_vert = vert; - // Chain together the C verts and export them as GP strokes (chain in object space) - BMVert *edge_vert; - BMEdge *e; - BMIter iter_e; - - LinkNodePair chain = {NULL, NULL}; - - int connected_c_verts; - - while (next_vert != NULL) { - - connected_c_verts = 0; - vert = next_vert; - - BLI_linklist_append(&chain, vert); - - BM_elem_flag_disable(vert, BM_ELEM_SELECT); - - BM_ITER_ELEM (e, &iter_e, vert, BM_EDGES_OF_VERT) { - edge_vert = BM_edge_other_vert(e, vert); - - if (BM_elem_flag_test(edge_vert, BM_ELEM_SELECT)) { - if (connected_c_verts == 0) { - next_vert = edge_vert; - } - else if (connected_c_verts == 1 && prepend_vert == NULL) { - prepend_vert = edge_vert; - } - else { - printf("C verts not connected in a simple line!\n"); - } - connected_c_verts++; - } - } - - if (connected_c_verts == 0) { - next_vert = NULL; - } - } - - LinkNode *pre_list = chain.list; - - while (prepend_vert != NULL) { - - connected_c_verts = 0; - vert = prepend_vert; - - BLI_linklist_prepend(&pre_list, vert); - - BM_elem_flag_disable(vert, BM_ELEM_SELECT); - - BM_ITER_ELEM (e, &iter_e, vert, BM_EDGES_OF_VERT) { - edge_vert = BM_edge_other_vert(e, vert); - - if (BM_elem_flag_test(edge_vert, BM_ELEM_SELECT)) { - if (connected_c_verts == 0) { - prepend_vert = edge_vert; - } - else { - printf("C verts not connected in a simple line!\n"); - } - connected_c_verts++; - } - } - - if (connected_c_verts == 0) { - prepend_vert = NULL; - } - } - - tot_points = BLI_linklist_count(pre_list); - - printf("Tot points: %d\n", tot_points); - - if (tot_points <= 1) { - // Don't draw a stroke, chain too short. - printf("Chain to short\n"); - continue; - } - - float *stroke_data = BLI_array_alloca(stroke_data, tot_points * GP_PRIM_DATABUF_SIZE); - - int array_idx = 0; - - for (LinkNode *entry = pre_list; entry; entry = entry->next) { - vert = entry->link; - stroke_data[array_idx] = vert->co[0]; - stroke_data[array_idx + 1] = vert->co[1]; - stroke_data[array_idx + 2] = vert->co[2]; - - stroke_data[array_idx + 3] = 1.0f; // thickness - stroke_data[array_idx + 4] = 1.0f; // hardness? - - array_idx += 5; - } - - /* generate stroke */ - bGPDstroke *gps; - gps = BKE_gpencil_add_stroke(gpf, color_idx, tot_points, thickness); - BKE_gpencil_stroke_add_points(gps, stroke_data, tot_points, mat); - - BLI_linklist_free(pre_list, NULL); - } - - BM_mesh_free(bm); -} - void lanpr_generate_gpencil_from_chain( - Depsgraph *depsgraph, Object *ob, bGPDlayer *gpl, bGPDframe *gpf) + Depsgraph *depsgraph, Object *ob, bGPDlayer *gpl, bGPDframe *gpf, int qi_begin, int qi_end) { Scene *scene = DEG_get_evaluated_scene(depsgraph); LANPR_RenderBuffer *rb = lanpr_share.render_buffer_shared; @@ -266,6 +71,9 @@ void lanpr_generate_gpencil_from_chain( if (!rlc->object_ref) continue; // XXX: intersection lines are lost + if (rlc->level>qi_end || rlc->level<qi_begin) + continue; + if (ob && &ob->id != rlc->object_ref->id.orig_id) continue; @@ -276,11 +84,11 @@ void lanpr_generate_gpencil_from_chain( float *stroke_data = BLI_array_alloca(stroke_data, count * GP_PRIM_DATABUF_SIZE); for (rlci = rlc->chain.first; rlci; rlci = (LANPR_RenderLineChainItem *)rlci->item.next) { - float opatity = rlci->occlusion ? 0.0f : 1.0f; + float opatity = 1.0f; //rlci->occlusion ? 0.0f : 1.0f; stroke_data[array_idx] = rlci->gpos[0]; stroke_data[array_idx + 1] = rlci->gpos[1]; stroke_data[array_idx + 2] = rlci->gpos[2]; - stroke_data[array_idx + 3] = opatity; // thickness + stroke_data[array_idx + 3] = 1; // thickness stroke_data[array_idx + 4] = opatity; // hardness? array_idx += 5; } diff --git a/source/blender/draw/engines/lanpr/lanpr_access.h b/source/blender/draw/engines/lanpr/lanpr_access.h index 82168e71942..1bd71b7353b 100644 --- a/source/blender/draw/engines/lanpr/lanpr_access.h +++ b/source/blender/draw/engines/lanpr/lanpr_access.h @@ -10,11 +10,8 @@ typedef struct LANPR_RenderLineChain LANPR_RenderLineChain; -void lanpr_generate_gpencil_geometry( - GpencilModifierData *md, Depsgraph *depsgraph, Object *ob, bGPDlayer *gpl, bGPDframe *gpf); - void lanpr_generate_gpencil_from_chain( - Depsgraph *depsgraph, Object *ob, bGPDlayer *gpl, bGPDframe *gpf); + Depsgraph *depsgraph, Object *ob, bGPDlayer *gpl, bGPDframe *gpf, int qi_begin, int qi_end); void lanpr_update_data_for_external(Depsgraph *depsgraph); diff --git a/source/blender/draw/engines/lanpr/lanpr_chain.c b/source/blender/draw/engines/lanpr/lanpr_chain.c index efbd92413d0..af636a87b96 100644 --- a/source/blender/draw/engines/lanpr/lanpr_chain.c +++ b/source/blender/draw/engines/lanpr/lanpr_chain.c @@ -504,6 +504,7 @@ void lanpr_split_chains_for_fixed_occlusion(LANPR_RenderBuffer *rb) BLI_addtail(&rb->chains, rlc); LANPR_RenderLineChainItem *first_rlci = (LANPR_RenderLineChainItem *)rlc->chain.first; int fixed_occ = first_rlci->occlusion; + rlc->level = fixed_occ; for (rlci = (LANPR_RenderLineChainItem *)first_rlci->item.next; rlci; rlci = next_rlci) { next_rlci = (LANPR_RenderLineChainItem *)rlci->item.next; if (rlci->occlusion != fixed_occ) { @@ -528,6 +529,7 @@ void lanpr_split_chains_for_fixed_occlusion(LANPR_RenderBuffer *rb) new_rlc->object_ref = rlc->object_ref; rlc = new_rlc; fixed_occ = rlci->occlusion; + rlc->level = fixed_occ; } } } diff --git a/source/blender/draw/engines/lanpr/lanpr_data_types.h b/source/blender/draw/engines/lanpr/lanpr_data_types.h index 95c1328d81b..d979efdff3b 100644 --- a/source/blender/draw/engines/lanpr/lanpr_data_types.h +++ b/source/blender/draw/engines/lanpr/lanpr_data_types.h @@ -126,6 +126,7 @@ typedef struct LANPR_RenderLineChain { // int SegmentCount; // we count before draw cmd. float length; // calculated before draw cmd. char picked; // used when re-connecting + char level; struct Object *object_ref; } LANPR_RenderLineChain; diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c b/source/blender/draw/engines/lanpr/lanpr_ops.c index 602a6fab6cc..cc15313a598 100644 --- a/source/blender/draw/engines/lanpr/lanpr_ops.c +++ b/source/blender/draw/engines/lanpr/lanpr_ops.c @@ -4312,7 +4312,8 @@ void lanpr_update_gp_strokes_recursive(Depsgraph *dg, struct Collection *col, in gpf = BKE_gpencil_frame_addnew(gpl, frame); BKE_gpencil_free_strokes(gpf); // force clear now - lanpr_generate_gpencil_from_chain(dg, ob, gpl, gpf); + @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs