[Bf-blender-cvs] [d6456466e9b] soc-2019-npr: LANPR: Renoved workbench engine registeration. Now LANPR registers correctly. Memory free working.

Yiming Wu noreply at git.blender.org
Mon Jun 10 07:54:39 CEST 2019


Commit: d6456466e9b95d8f6737f63dbd235c820df95369
Author: Yiming Wu
Date:   Mon Jun 10 13:52:43 2019 +0800
Branches: soc-2019-npr
https://developer.blender.org/rBd6456466e9b95d8f6737f63dbd235c820df95369

LANPR: Renoved workbench engine registeration. Now LANPR registers correctly. Memory free working.

===================================================================

M	source/blender/draw/engines/lanpr/lanpr_access.c
M	source/blender/draw/engines/lanpr/lanpr_all.h
M	source/blender/draw/engines/lanpr/lanpr_engine.c
M	source/blender/draw/engines/lanpr/lanpr_ops.c
M	source/blender/draw/intern/draw_manager.c

===================================================================

diff --git a/source/blender/draw/engines/lanpr/lanpr_access.c b/source/blender/draw/engines/lanpr/lanpr_access.c
index c2a44730475..e17daec4a48 100644
--- a/source/blender/draw/engines/lanpr/lanpr_access.c
+++ b/source/blender/draw/engines/lanpr/lanpr_access.c
@@ -288,7 +288,7 @@ void lanpr_update_data_for_external(Depsgraph *depsgraph)
   SceneLANPR *lanpr = &scene->lanpr;
   if (lanpr->master_mode != LANPR_MASTER_MODE_SOFTWARE)
     return;
-  if (lanpr->render_buffer && lanpr->render_buffer->cached_for_frame != scene->r.cfra) {
+  if (!lanpr->render_buffer || lanpr->render_buffer->cached_for_frame != scene->r.cfra) {
     lanpr_compute_feature_lines_internal(depsgraph, lanpr, scene);
   }
 }
diff --git a/source/blender/draw/engines/lanpr/lanpr_all.h b/source/blender/draw/engines/lanpr/lanpr_all.h
index 30812d3cba2..05fa5a47491 100644
--- a/source/blender/draw/engines/lanpr/lanpr_all.h
+++ b/source/blender/draw/engines/lanpr/lanpr_all.h
@@ -95,6 +95,8 @@ typedef struct LANPR_SharedResource {
   void *ved_viewport;
   void *ved_render;
 
+  void *rb_ref;
+
   int init_complete;
 
   SpinLock render_flag_lock;
@@ -231,9 +233,6 @@ typedef struct LANPR_PrivateData {
   GPUBatch *snake_batch;
 
   ListBase dpix_batch_list;
-
-  LANPR_RenderBuffer *rb_ref;
-
 } LANPR_PrivateData;
 
 typedef struct LANPR_StorageList {
diff --git a/source/blender/draw/engines/lanpr/lanpr_engine.c b/source/blender/draw/engines/lanpr/lanpr_engine.c
index 307851d44be..db0528dd182 100644
--- a/source/blender/draw/engines/lanpr/lanpr_engine.c
+++ b/source/blender/draw/engines/lanpr/lanpr_engine.c
@@ -157,21 +157,24 @@ static void lanpr_engine_init(void *ved)
 static void lanpr_engine_free(void)
 {
   void *ved = lanpr_share.ved_viewport;
-  LANPR_Data *vedata = (LANPR_Data *)ved;
-  LANPR_StorageList *stl = ((LANPR_Data *)vedata)->stl;
+  if(ved){
+    LANPR_Data *vedata = (LANPR_Data *)ved;
+    LANPR_StorageList *stl = ((LANPR_Data *)vedata)->stl;
 
-  // only free custom data in storage list.
+    // only free custom data in storage list.
 
-  BLI_mempool_destroy(stl->g_data->mp_line_strip);
-  BLI_mempool_destroy(stl->g_data->mp_line_strip_point);
-  BLI_mempool_destroy(stl->g_data->mp_sample);
-  BLI_mempool_destroy(stl->g_data->mp_batch_list);
+    BLI_mempool_destroy(stl->g_data->mp_line_strip);
+    BLI_mempool_destroy(stl->g_data->mp_line_strip_point);
+    BLI_mempool_destroy(stl->g_data->mp_sample);
+    BLI_mempool_destroy(stl->g_data->mp_batch_list);
 
-  lanpr_destroy_atlas(vedata);
+    lanpr_destroy_atlas(vedata);
 
-  lanpr_destroy_render_data(stl->g_data->rb_ref);
+    stl->g_data = 0;
+  }
+
+  lanpr_destroy_render_data(lanpr_share.rb_ref);
 
-  stl->g_data = 0;
 }
 
 void lanpr_calculate_normal_object_vector(LANPR_LineLayer *ll, float *normal_object_direction);
@@ -536,7 +539,7 @@ static void lanpr_draw_scene_exec(void *vedata, GPUFrameBuffer *dfb, int is_rend
   }
 
   // Draw can create stuff there.
-  pd->rb_ref = lanpr->render_buffer;
+  lanpr_share.rb_ref = lanpr->render_buffer;
 }
 
 static void lanpr_draw_scene(void *vedata)
@@ -659,7 +662,7 @@ static void lanpr_render_to_image(LANPR_Data *vedata,
   lanpr_cache_finish(vedata);
 
   /* get ref for destroy data */
-  stl->g_data->rb_ref = lanpr->render_buffer;
+  lanpr_share.rb_ref = lanpr->render_buffer;
 
   DRW_render_instance_buffer_finish();
 
@@ -759,4 +762,5 @@ RenderEngineType DRW_engine_viewport_lanpr_type = {
     NULL,  // update in script
     NULL,  // update in render pass
     &draw_engine_lanpr_type,
-    {NULL, NULL, NULL}};
+    {NULL, NULL, NULL}
+};
diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c b/source/blender/draw/engines/lanpr/lanpr_ops.c
index f5575fc6aa1..bb7ec5b3051 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -40,14 +40,7 @@
 #include "RNA_access.h"
 #include "RNA_define.h"
 
-/*
-
-   Ported from NUL4.0
-
-   Author(s):WuYiming - xp8110 at outlook.com
-
- */
-
+extern LANPR_SharedResource lanpr_share;
 struct Object;
 
 int lanpr_triangle_line_imagespace_intersection_v2(SpinLock *spl,
@@ -3941,6 +3934,9 @@ int lanpr_compute_feature_lines_internal(Depsgraph *depsgraph, SceneLANPR *lanpr
   LANPR_RenderBuffer *rb;
 
   rb = lanpr_create_render_buffer(lanpr);
+
+  lanpr_share.rb_ref = rb;
+
   rb->scene = scene;
   rb->w = scene->r.xsch;
   rb->h = scene->r.ysch;
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index e5d0d04d673..84fd92d4cd2 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -3058,9 +3058,9 @@ void DRW_engine_register(DrawEngineType *draw_engine_type)
 void DRW_engines_register(void)
 {
   RE_engines_register(&DRW_engine_viewport_eevee_type);
-  RE_engines_register(&DRW_engine_viewport_workbench_type);
+  //RE_engines_register(&DRW_engine_viewport_workbench_type); //registered as two DRW_engines below.
   RE_engines_register(&DRW_engine_viewport_lanpr_type);
-
+  
   DRW_engine_register(&draw_engine_workbench_solid);
   DRW_engine_register(&draw_engine_workbench_transparent);



More information about the Bf-blender-cvs mailing list