[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