[Bf-blender-cvs] [897db2ba772] soc-2019-npr: LANPR: Move GPencil operators into ED
YimingWu
noreply at git.blender.org
Sat Jul 13 08:14:15 CEST 2019
Commit: 897db2ba7725f7a636b56280717434ac991658d7
Author: YimingWu
Date: Sat Jul 13 14:13:42 2019 +0800
Branches: soc-2019-npr
https://developer.blender.org/rB897db2ba7725f7a636b56280717434ac991658d7
LANPR: Move GPencil operators into ED
===================================================================
M source/blender/draw/engines/lanpr/lanpr_access.c
M source/blender/draw/engines/lanpr/lanpr_ops.c
M source/blender/editors/include/ED_lanpr.h
M source/blender/editors/lanpr/lanpr_ops.c
===================================================================
diff --git a/source/blender/draw/engines/lanpr/lanpr_access.c b/source/blender/draw/engines/lanpr/lanpr_access.c
index 235fd2f153e..8a671efc6d9 100644
--- a/source/blender/draw/engines/lanpr/lanpr_access.c
+++ b/source/blender/draw/engines/lanpr/lanpr_access.c
@@ -26,158 +26,3 @@
#include "lanpr_access.h"
extern LANPR_SharedResource lanpr_share;
-
-static BMVert *split_edge_and_move(BMesh *bm, BMEdge *edge, const float new_pos[3])
-{
- /* Split edge one time and move the created vert to new_pos */
- BMVert *vert;
-
- vert = bmesh_kernel_split_edge_make_vert(bm, edge->v1, edge, NULL);
-
- copy_v3_v3(vert->co, new_pos);
-
- return vert;
-}
-
-void lanpr_generate_gpencil_from_chain(Depsgraph *depsgraph,
- Object *ob,
- bGPDlayer *gpl,
- bGPDframe *gpf,
- int qi_begin,
- int qi_end,
- int material_nr,
- Collection *col,
- int types)
-{
- Scene *scene = DEG_get_evaluated_scene(depsgraph);
- LANPR_RenderBuffer *rb = lanpr_share.render_buffer_shared;
-
- if (rb == NULL) {
- printf("NULL LANPR rb!\n");
- return;
- }
- if (scene->lanpr.master_mode != LANPR_MASTER_MODE_SOFTWARE) {
- return;
- }
-
- int color_idx = 0;
- int tot_points = 0;
- short thickness = 1;
-
- float mat[4][4];
-
- unit_m4(mat);
-
- /* Split countour lines at occlution points and deselect occluded segment */
- LANPR_RenderLine *rl;
- LANPR_RenderLineSegment *rls, *irls;
-
- LANPR_RenderLineChain *rlc;
- LANPR_RenderLineChainItem *rlci;
- for (rlc = rb->chains.first; rlc; rlc = rlc->next) {
-
- if (rlc->picked) {
- continue;
- }
- if (ob && !rlc->object_ref) {
- continue; /* intersection lines are all in the first collection running into here */
- }
- if (!(rlc->type & types)) {
- continue;
- }
- if (rlc->level > qi_end || rlc->level < qi_begin) {
- continue;
- }
- if (ob && &ob->id != rlc->object_ref->id.orig_id) {
- continue;
- }
- if (col && rlc->object_ref) {
- if (!BKE_collection_has_object_recursive(col, (Object *)rlc->object_ref->id.orig_id)) {
- continue;
- }
- }
-
- rlc->picked = 1;
-
- int array_idx = 0;
- int count = lanpr_count_chain(rlc);
- bGPDstroke *gps = BKE_gpencil_add_stroke(gpf, color_idx, count, thickness);
-
- float *stroke_data = BLI_array_alloca(stroke_data, count * GP_PRIM_DATABUF_SIZE);
-
- for (rlci = rlc->chain.first; rlci; rlci = rlci->next) {
- 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] = 1; /* thickness */
- stroke_data[array_idx + 4] = opatity; /* hardness? */
- array_idx += 5;
- }
-
- BKE_gpencil_stroke_add_points(gps, stroke_data, count, mat);
- gps->mat_nr = material_nr;
- }
-}
-
-void lanpr_update_data_for_external(Depsgraph *depsgraph)
-{
- Scene *scene = DEG_get_evaluated_scene(depsgraph);
- SceneLANPR *lanpr = &scene->lanpr;
- if (lanpr->master_mode != LANPR_MASTER_MODE_SOFTWARE) {
- return;
- }
- if (!lanpr_share.render_buffer_shared ||
- lanpr_share.render_buffer_shared->cached_for_frame != scene->r.cfra) {
- lanpr_compute_feature_lines_internal(depsgraph, 0);
- }
-}
-
-bool lanpr_dpix_shader_error()
-{
- return lanpr_share.dpix_shader_error;
-}
-
-bool lanpr_disable_edge_splits(Scene *s)
-{
- return (s->lanpr.enabled && s->lanpr.disable_edge_splits);
-}
-
-void lanpr_copy_data(Scene *from, Scene *to)
-{
- SceneLANPR *lanpr = &from->lanpr;
- LANPR_RenderBuffer *rb = lanpr_share.render_buffer_shared, *new_rb;
- LANPR_LineLayer *ll, *new_ll;
- LANPR_LineLayerComponent *llc, *new_llc;
-
- list_handle_empty(&to->lanpr.line_layers);
-
- for (ll = lanpr->line_layers.first; ll; ll = ll->next) {
- new_ll = MEM_callocN(sizeof(LANPR_LineLayer), "Copied Line Layer");
- memcpy(new_ll, ll, sizeof(LANPR_LineLayer));
- list_handle_empty(&new_ll->components);
- new_ll->next = new_ll->prev = NULL;
- BLI_addtail(&to->lanpr.line_layers, new_ll);
- for (llc = ll->components.first; llc; llc = llc->next) {
- new_llc = MEM_callocN(sizeof(LANPR_LineLayerComponent), "Copied Line Layer Component");
- memcpy(new_llc, llc, sizeof(LANPR_LineLayerComponent));
- new_llc->next = new_llc->prev = NULL;
- BLI_addtail(&new_ll->components, new_llc);
- }
- }
-
- /* render_buffer now only accessible from lanpr_share */
-}
-
-void lanpr_free_everything(Scene *s)
-{
- SceneLANPR *lanpr = &s->lanpr;
- LANPR_LineLayer *ll;
- LANPR_LineLayerComponent *llc;
-
- while (ll = BLI_pophead(&lanpr->line_layers)) {
- while (llc = BLI_pophead(&ll->components))
- MEM_freeN(llc);
- MEM_freeN(ll);
- }
-}
diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c b/source/blender/draw/engines/lanpr/lanpr_ops.c
index c96cbe5918a..5c5420dcf49 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -4725,273 +4725,7 @@ int lanpr_auto_create_line_layer_exec(struct bContext *C, struct wmOperator *op)
return OPERATOR_FINISHED;
}
-void lanpr_clear_gp_lanpr_flags(Depsgraph *dg, int frame)
-{
- DEG_OBJECT_ITER_BEGIN (dg,
- o,
- DEG_ITER_OBJECT_FLAG_LINKED_DIRECTLY | DEG_ITER_OBJECT_FLAG_VISIBLE |
- DEG_ITER_OBJECT_FLAG_DUPLI | DEG_ITER_OBJECT_FLAG_LINKED_VIA_SET) {
- if (o->type == OB_GPENCIL) {
- bGPdata *gpd = ((Object *)o->id.orig_id)->data;
- bGPDlayer *gpl;
- for (gpl = gpd->layers.first; gpl; gpl = gpl->next) {
- bGPDframe *gpf = BKE_gpencil_layer_find_frame(gpl, frame);
- if (!gpf) {
- continue;
- }
- gpf->flag &= ~GP_FRAME_LANPR_CLEARED;
- }
- }
- }
- DEG_OBJECT_ITER_END;
-}
-
-void lanpr_update_gp_strokes_recursive(
- Depsgraph *dg, struct Collection *col, int frame, Object *source_only, Object *target_only)
-{
- Object *ob;
- Object *gpobj;
- ModifierData *md;
- bGPdata *gpd;
- bGPDlayer *gpl;
- bGPDframe *gpf;
- CollectionObject *co;
- CollectionChild *cc;
-
- for (co = col->gobject.first; co || source_only; co = co->next) {
- ob = source_only ? source_only : co->ob;
- for (md = ob->modifiers.first; md; md = md->next) {
- if (md->type == eModifierType_FeatureLine) {
- FeatureLineModifierData *flmd = (FeatureLineModifierData *)md;
- if (flmd->target && flmd->target->type == OB_GPENCIL) {
- gpobj = flmd->target;
-
- if (target_only && target_only != gpobj) {
- continue;
- }
-
- gpd = gpobj->data;
- gpl = BKE_gpencil_layer_get_index(gpd, flmd->layer, 1);
- if (!gpl) {
- gpl = BKE_gpencil_layer_addnew(gpd, "lanpr_layer", true);
- }
- gpf = BKE_gpencil_layer_getframe(gpl, frame, GP_GETFRAME_ADD_NEW);
-
- if (gpf->strokes.first &&
- !lanpr_share.render_buffer_shared->scene->lanpr.gpencil_overwrite) {
- continue;
- }
-
- if (!(gpf->flag & GP_FRAME_LANPR_CLEARED)) {
- BKE_gpencil_free_strokes(gpf);
- gpf->flag |= GP_FRAME_LANPR_CLEARED;
- }
-
- lanpr_generate_gpencil_from_chain(dg,
- ob,
- gpl,
- gpf,
- flmd->level_begin,
- flmd->use_multiple_levels ? flmd->level_end :
- flmd->level_begin,
- flmd->material,
- NULL,
- flmd->types);
- DEG_id_tag_update(&gpd->id,
- ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY | ID_RECALC_COPY_ON_WRITE);
- }
- }
- }
- if (source_only) {
- return;
- }
- }
- for (cc = col->children.first; cc; cc = cc->next) {
- lanpr_update_gp_strokes_recursive(dg, cc->collection, frame, source_only, target_only);
- }
-}
-void lanpr_update_gp_strokes_collection(
- Depsgraph *dg, struct Collection *col, int frame, int this_only, Object *target_only)
-{
- Object *ob;
- Object *gpobj;
- ModifierData *md;
- bGPdata *gpd;
- bGPDlayer *gpl;
- bGPDframe *gpf;
- CollectionObject *co;
- CollectionChild *cc;
-
- /* depth first */
- if (!this_only) {
- for (cc = col->children.first; cc; cc = cc->next) {
- lanpr_update_gp_strokes_collection(dg, cc->collection, frame, this_only, target_only);
- }
- }
-
- if (col->lanpr.usage != COLLECTION_LANPR_INCLUDE || !col->lanpr.target) {
- return;
- }
-
- gpobj = col->lanpr.target;
-
- if (target_only && target_only != gpobj) {
- return;
- }
-
- gpd = gpobj->data;
- gpl = BKE_gpencil_layer_get_index(gpd, col->lanpr.layer, 1);
- if (!gpl) {
- gpl = BKE_gpencil_layer_addnew(gpd, "lanpr_layer", true);
- }
- gpf = BKE_gpencil_layer_getframe(gpl, frame, GP_GETFRAME_ADD_NEW);
-
- if (gpf->strokes.first && !lanpr_share.render_buffer_shared->scene->lanpr.gpencil_overwrite) {
- return;
- }
-
- if (!(gpf->flag & GP_FRAME_LANPR_CLEARED)) {
- BKE_gpencil_free_strokes(gpf);
- gpf->flag |= GP_FRAME_LANPR_CLEARED;
- }
-
- lanpr_generate_gpencil_from_chain(dg,
- NULL,
- gpl,
- gpf,
- col->lanpr.level_begin,
- col->lanpr.use_multiple_levels ? col->lanpr.level_end :
- col->lanpr.level_begin,
- col->lanpr.material,
-
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list