[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