[Bf-blender-cvs] [6e1be5b09e8] soc-2019-npr: LANPR: removed GP Stroke modifier, Object modifier now only create visible strokes and follow level values.
YimingWu
noreply at git.blender.org
Mon Jun 24 10:55:08 CEST 2019
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. @@
More information about the Bf-blender-cvs
mailing list