[Bf-blender-cvs] [858539520e9] soc-2019-npr: LANPR: Only calculates intersection lines when not in software modes.
YimingWu
noreply at git.blender.org
Tue Jul 2 08:16:29 CEST 2019
Commit: 858539520e97d724326ccf021faf90244c070e8b
Author: YimingWu
Date: Tue Jul 2 14:16:01 2019 +0800
Branches: soc-2019-npr
https://developer.blender.org/rB858539520e97d724326ccf021faf90244c070e8b
LANPR: Only calculates intersection lines when not in software modes.
===================================================================
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_engine.c
M source/blender/draw/engines/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 08de3ab2aa2..27c9357dfcd 100644
--- a/source/blender/draw/engines/lanpr/lanpr_access.c
+++ b/source/blender/draw/engines/lanpr/lanpr_access.c
@@ -129,7 +129,7 @@ void lanpr_update_data_for_external(Depsgraph *depsgraph)
}
if (!lanpr_share.render_buffer_shared ||
lanpr_share.render_buffer_shared->cached_for_frame != scene->r.cfra) {
- lanpr_compute_feature_lines_internal(depsgraph);
+ lanpr_compute_feature_lines_internal(depsgraph, 0);
}
}
diff --git a/source/blender/draw/engines/lanpr/lanpr_access.h b/source/blender/draw/engines/lanpr/lanpr_access.h
index 16e21311040..426ecc53a11 100644
--- a/source/blender/draw/engines/lanpr/lanpr_access.h
+++ b/source/blender/draw/engines/lanpr/lanpr_access.h
@@ -26,7 +26,7 @@ int lanpr_count_chain(LANPR_RenderLineChain *rlc);
void lanpr_chain_clear_picked_flag(struct LANPR_RenderBuffer *rb);
-int lanpr_compute_feature_lines_internal(Depsgraph *depsgraph);
+int lanpr_compute_feature_lines_internal(Depsgraph *depsgraph, int instersections_only);
void lanpr_destroy_render_data(struct LANPR_RenderBuffer *rb);
diff --git a/source/blender/draw/engines/lanpr/lanpr_engine.c b/source/blender/draw/engines/lanpr/lanpr_engine.c
index 780c271a7be..c349940053e 100644
--- a/source/blender/draw/engines/lanpr/lanpr_engine.c
+++ b/source/blender/draw/engines/lanpr/lanpr_engine.c
@@ -618,7 +618,7 @@ static void lanpr_render_matrices_init(RenderEngine *engine, Depsgraph *depsgrap
DRW_view_set_active(view);
}
-int lanpr_compute_feature_lines_internal(Depsgraph *depsgraph);
+int lanpr_compute_feature_lines_internal(Depsgraph *depsgraph, int instersections_only);
LANPR_RenderBuffer *lanpr_create_render_buffer();
extern DrawEngineType draw_engine_lanpr_type;
@@ -663,7 +663,8 @@ static void lanpr_render_to_image(LANPR_Data *vedata,
}
if (lanpr_share.render_buffer_shared->cached_for_frame != scene->r.cfra ||
LANPR_GLOBAL_update_tag) {
- lanpr_compute_feature_lines_internal(draw_ctx->depsgraph);
+ int intersections_only = (lanpr->master_mode != LANPR_MASTER_MODE_SOFTWARE);
+ lanpr_compute_feature_lines_internal(draw_ctx->depsgraph, intersections_only);
}
}
diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c b/source/blender/draw/engines/lanpr/lanpr_ops.c
index 04448ce7838..b75301bf490 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -4178,7 +4178,7 @@ void lanpr_software_draw_scene(void *vedata, GPUFrameBuffer *dfb, int is_render)
/* ============================================ operators =========================================
*/
-int lanpr_compute_feature_lines_internal(Depsgraph *depsgraph)
+int lanpr_compute_feature_lines_internal(Depsgraph *depsgraph, int intersectons_only)
{
LANPR_RenderBuffer *rb;
Scene *s = DEG_get_evaluated_scene(depsgraph);
@@ -4208,14 +4208,19 @@ int lanpr_compute_feature_lines_internal(Depsgraph *depsgraph)
lanpr_make_initial_bounding_areas(rb);
- lanpr_compute_scene_contours(rb, lanpr->crease_threshold);
+ if (!intersectons_only) {
+ lanpr_compute_scene_contours(rb, lanpr->crease_threshold);
+ }
lanpr_add_triangles(rb);
- lanpr_THREAD_calculate_line_occlusion_begin(rb);
+ if (!intersectons_only) {
+ lanpr_THREAD_calculate_line_occlusion_begin(rb);
+ }
/* When not using LANPR engine, chaining is forced in order to generate data for GPencil. */
- if (lanpr->enable_chaining || strcmp(s->r.engine, RE_engine_id_BLENDER_LANPR)) {
+ if ((lanpr->enable_chaining || strcmp(s->r.engine, RE_engine_id_BLENDER_LANPR)) &&
+ (!intersectons_only)) {
lanpr_NO_THREAD_chain_feature_lines(rb); /* should use user_adjustable value */
lanpr_split_chains_for_fixed_occlusion(rb);
lanpr_connect_chains(rb, 1);
@@ -4256,12 +4261,14 @@ static int lanpr_compute_feature_lines_exec(struct bContext *C, struct wmOperato
return OPERATOR_FINISHED;
}
- WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, NULL);
+ int intersections_only = (lanpr->master_mode != LANPR_MASTER_MODE_SOFTWARE);
- result = lanpr_compute_feature_lines_internal(CTX_data_depsgraph(C));
+ result = lanpr_compute_feature_lines_internal(CTX_data_depsgraph(C), intersections_only);
lanpr_rebuild_all_command(lanpr);
+ WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, NULL);
+
return result;
}
static void lanpr_compute_feature_lines_cancel(struct bContext *C, struct wmOperator *op)
@@ -4629,7 +4636,7 @@ int lanpr_bake_gp_strokes_exec(struct bContext *C, struct wmOperator *op)
// BKE_scene_frame_set(scene,frame);
DEG_evaluate_on_framechange(CTX_data_main(C), dg, frame);
- lanpr_compute_feature_lines_internal(dg);
+ lanpr_compute_feature_lines_internal(dg, 0);
lanpr_chain_clear_picked_flag(lanpr_share.render_buffer_shared);
More information about the Bf-blender-cvs
mailing list