[Bf-blender-cvs] [5e2fab456de] soc-2019-npr: LANPR: sample and batch pool goes to lanpr_share.
Yiming Wu
noreply at git.blender.org
Mon Jun 10 11:17:35 CEST 2019
Commit: 5e2fab456de6eb92ab7df64eee345ff0077bf4f5
Author: Yiming Wu
Date: Mon Jun 10 17:17:29 2019 +0800
Branches: soc-2019-npr
https://developer.blender.org/rB5e2fab456de6eb92ab7df64eee345ff0077bf4f5
LANPR: sample and batch pool goes to lanpr_share.
===================================================================
M source/blender/draw/engines/lanpr/lanpr_all.h
M source/blender/draw/engines/lanpr/lanpr_dpix.c
M source/blender/draw/engines/lanpr/lanpr_engine.c
M source/blender/draw/engines/lanpr/lanpr_snake.c
===================================================================
diff --git a/source/blender/draw/engines/lanpr/lanpr_all.h b/source/blender/draw/engines/lanpr/lanpr_all.h
index c302de82bb3..bbf07ce39e8 100644
--- a/source/blender/draw/engines/lanpr/lanpr_all.h
+++ b/source/blender/draw/engines/lanpr/lanpr_all.h
@@ -78,6 +78,12 @@ typedef struct LANPR_SharedResource {
/* We only allocate once for all */
LANPR_RenderBuffer *render_buffer_shared;
+ /* cache */
+ BLI_mempool *mp_sample;
+ BLI_mempool *mp_line_strip;
+ BLI_mempool *mp_line_strip_point;
+ BLI_mempool *mp_batch_list;
+
/* Snake */
GPUShader *multichannel_shader;
GPUShader *edge_detect_shader;
@@ -192,11 +198,6 @@ typedef struct LANPR_PrivateData {
int width, height; // if not match recreate buffer.
void **sample_table;
- BLI_mempool *mp_sample;
- BLI_mempool *mp_line_strip;
- BLI_mempool *mp_line_strip_point;
- BLI_mempool *mp_batch_list;
-
ListBase pending_samples;
ListBase erased_samples;
ListBase line_strips;
diff --git a/source/blender/draw/engines/lanpr/lanpr_dpix.c b/source/blender/draw/engines/lanpr/lanpr_dpix.c
index f81d7c7a504..674c622ff02 100644
--- a/source/blender/draw/engines/lanpr/lanpr_dpix.c
+++ b/source/blender/draw/engines/lanpr/lanpr_dpix.c
@@ -327,7 +327,7 @@ int lanpr_feed_atlas_trigger_preview_obj(void *vedata, Object *ob, int begin_ind
GPUBatch *gb2 = GPU_batch_create_ex(
GPU_PRIM_POINTS, vbo2, 0, GPU_USAGE_STATIC | GPU_BATCH_OWNS_VBO);
- LANPR_BatchItem *bi = BLI_mempool_alloc(pd->mp_batch_list);
+ LANPR_BatchItem *bi = BLI_mempool_alloc(lanpr_share.mp_batch_list);
BLI_addtail(&pd->dpix_batch_list, bi);
bi->dpix_transform_batch = gb;
bi->dpix_preview_batch = gb2;
diff --git a/source/blender/draw/engines/lanpr/lanpr_engine.c b/source/blender/draw/engines/lanpr/lanpr_engine.c
index 5e2e1d820bf..e3724dcd1db 100644
--- a/source/blender/draw/engines/lanpr/lanpr_engine.c
+++ b/source/blender/draw/engines/lanpr/lanpr_engine.c
@@ -157,25 +157,19 @@ static void lanpr_engine_init(void *ved)
static void lanpr_engine_free(void)
{
void *ved = lanpr_share.ved_viewport;
- if(ved){
- LANPR_Data *vedata = (LANPR_Data *)ved;
- LANPR_StorageList *stl = ((LANPR_Data *)vedata)->stl;
- // only free custom data in storage list.
+ BLI_mempool* mp = lanpr_share.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);
-
- stl->g_data = 0;
+ if(mp){
+ BLI_mempool_destroy(mp);
+ mp=NULL;
+ }
+
+ if(lanpr_share.render_buffer_shared){
+ lanpr_destroy_render_data(lanpr_share.render_buffer_shared);
+ MEM_freeN(lanpr_share.render_buffer_shared);
+ lanpr_share.render_buffer_shared=NULL;
}
-
- lanpr_destroy_render_data(lanpr_share.render_buffer_shared);
- MEM_freeN(lanpr_share.render_buffer_shared);//no longer needed.
- lanpr_share.render_buffer_shared=NULL;
}
void lanpr_calculate_normal_object_vector(LANPR_LineLayer *ll, float *normal_object_direction);
@@ -194,13 +188,10 @@ static void lanpr_cache_init(void *vedata)
if (!stl->g_data) {
/* Alloc transient pointers */
stl->g_data = MEM_callocN(sizeof(*stl->g_data), __func__);
- stl->g_data->mp_sample = BLI_mempool_create(
- sizeof(LANPR_TextureSample), 0, 512, BLI_MEMPOOL_NOP);
- stl->g_data->mp_line_strip = BLI_mempool_create(
- sizeof(LANPR_LineStrip), 0, 512, BLI_MEMPOOL_NOP);
- stl->g_data->mp_line_strip_point = BLI_mempool_create(
- sizeof(LANPR_LineStripPoint), 0, 1024, BLI_MEMPOOL_NOP);
- stl->g_data->mp_batch_list = BLI_mempool_create(
+ }
+
+ if(!lanpr_share.mp_batch_list){
+ lanpr_share.mp_batch_list = BLI_mempool_create(
sizeof(LANPR_BatchItem), 0, 128, BLI_MEMPOOL_NOP);
}
@@ -381,7 +372,7 @@ static void lanpr_cache_init(void *vedata)
pd->atlas_edge_mask = MEM_callocN(fsize, "atlas_edge_mask"); // should always be float
pd->dpix_batch_list.first = pd->dpix_batch_list.last = 0;
- BLI_mempool_clear(pd->mp_batch_list);
+ BLI_mempool_clear(lanpr_share.mp_batch_list);
}
}
else if (lanpr->master_mode == LANPR_MASTER_MODE_SOFTWARE) {
diff --git a/source/blender/draw/engines/lanpr/lanpr_snake.c b/source/blender/draw/engines/lanpr/lanpr_snake.c
index 612ce328e75..fe6dfe9a533 100644
--- a/source/blender/draw/engines/lanpr/lanpr_snake.c
+++ b/source/blender/draw/engines/lanpr/lanpr_snake.c
@@ -96,13 +96,13 @@ int lanpr_detect_direction(LANPR_PrivateData *pd, int col, int row, int LastDire
LANPR_LineStrip *lanpr_create_line_strip(LANPR_PrivateData *pd)
{
- LANPR_LineStrip *ls = BLI_mempool_calloc(pd->mp_line_strip);
+ LANPR_LineStrip *ls = BLI_mempool_calloc(lanpr_share.mp_line_strip);
return ls;
}
LANPR_LineStripPoint *lanpr_append_point(
LANPR_PrivateData *pd, LANPR_LineStrip *ls, real X, real Y, real Z)
{
- LANPR_LineStripPoint *lsp = BLI_mempool_calloc(pd->mp_line_strip_point);
+ LANPR_LineStripPoint *lsp = BLI_mempool_calloc(lanpr_share.mp_line_strip_point);
lsp->P[0] = X;
lsp->P[1] = Y;
@@ -117,7 +117,7 @@ LANPR_LineStripPoint *lanpr_append_point(
LANPR_LineStripPoint *lanpr_push_point(
LANPR_PrivateData *pd, LANPR_LineStrip *ls, real X, real Y, real Z)
{
- LANPR_LineStripPoint *lsp = BLI_mempool_calloc(pd->mp_line_strip_point);
+ LANPR_LineStripPoint *lsp = BLI_mempool_calloc(lanpr_share.mp_line_strip_point);
lsp->P[0] = X;
lsp->P[1] = Y;
@@ -134,9 +134,9 @@ void lanpr_destroy_line_strip(LANPR_PrivateData *pd, LANPR_LineStrip *ls)
{
LANPR_LineStripPoint *lsp;
while (lsp = BLI_pophead(&ls->points)) {
- BLI_mempool_free(pd->mp_line_strip_point, lsp);
+ BLI_mempool_free(lanpr_share.mp_line_strip_point, lsp);
}
- BLI_mempool_free(pd->mp_line_strip, ls);
+ BLI_mempool_free(lanpr_share.mp_line_strip, ls);
}
void lanpr_remove_sample(LANPR_PrivateData *pd, int row, int col)
@@ -353,7 +353,7 @@ GPUBatch *lanpr_get_snake_batch(LANPR_PrivateData *pd)
GPU_PRIM_LINES_ADJ, vbo, GPU_indexbuf_build(&elb), GPU_USAGE_STATIC | GPU_BATCH_OWNS_VBO);
}
-void lanpr_snake_free_pool_data(LANPR_PrivateData *pd)
+void lanpr_snake_prepare_cache(LANPR_PrivateData *pd)
{
if (pd->line_result_8bit)
MEM_freeN(pd->line_result_8bit);
@@ -361,10 +361,26 @@ void lanpr_snake_free_pool_data(LANPR_PrivateData *pd)
if (pd->line_result)
MEM_freeN(pd->line_result);
pd->line_result = 0;
- BLI_mempool_clear(pd->mp_line_strip);
- BLI_mempool_clear(pd->mp_line_strip_point);
- BLI_mempool_clear(pd->mp_sample);
- BLI_mempool_clear(pd->mp_batch_list);
+ lanpr_share.mp_sample = BLI_mempool_create(
+ sizeof(LANPR_TextureSample), 0, 512, BLI_MEMPOOL_NOP);
+ lanpr_share.mp_line_strip = BLI_mempool_create(
+ sizeof(LANPR_LineStrip), 0, 512, BLI_MEMPOOL_NOP);
+ lanpr_share.mp_line_strip_point = BLI_mempool_create(
+ sizeof(LANPR_LineStripPoint), 0, 1024, BLI_MEMPOOL_NOP);
+
+}
+void lanpe_sanke_free_cache(LANPR_PrivateData *pd)
+{
+ if (pd->line_result_8bit)
+ MEM_freeN(pd->line_result_8bit);
+ pd->line_result_8bit = 0;
+ if (pd->line_result)
+ MEM_freeN(pd->line_result);
+ pd->line_result = 0;
+
+ BLI_mempool_destroy(lanpr_share.mp_line_strip);
+ BLI_mempool_destroy(lanpr_share.mp_line_strip_point);
+ BLI_mempool_destroy(lanpr_share.mp_sample);
}
void lanpr_snake_free_readback_data(LANPR_PrivateData *pd)
{
@@ -486,7 +502,7 @@ void lanpr_snake_draw_scene(LANPR_TextureList *txl,
int index = h * texw + w;
if ((sample = pd->line_result[index]) > 0.9) {
pd->line_result_8bit[index] = 255;
- LANPR_TextureSample *ts = BLI_mempool_calloc(pd->mp_sample);
+ LANPR_TextureSample *ts = BLI_mempool_calloc(lanpr_share.mp_sample);
BLI_addtail(&pd->pending_samples, ts);
pd->sample_table[index] = ts;
ts->X = w;
@@ -533,7 +549,7 @@ void lanpr_snake_draw_scene(LANPR_TextureList *txl,
GPUBatch *snake_batch = lanpr_get_snake_batch(pd);
- lanpr_snake_free_pool_data(pd);
+ lanpr_snake_prepare_cache(pd);
psl->snake_pass = DRW_pass_create("Snake Visualization Pass",
DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH |
@@ -554,9 +570,9 @@ void lanpr_snake_draw_scene(LANPR_TextureList *txl,
DRW_draw_pass(psl->snake_pass);
GPU_batch_discard(snake_batch);
- BLI_mempool_clear(pd->mp_sample);
- BLI_mempool_clear(pd->mp_line_strip);
- BLI_mempool_clear(pd->mp_line_strip_point);
+ BLI_mempool_clear(lanpr_share.mp_sample);
+ BLI_mempool_clear(lanpr_share.mp_line_strip);
+ BLI_mempool_clear(lanpr_share.mp_line_strip_point);
pd->pending_samples.first = pd->pending_samples.last = 0;
pd->erased_samples.first = pd->erased_samples.last = 0;
@@ -564,4 +580,6 @@ void lanpr_snake_draw_scene(LANPR_TextureList *txl,
GPU_framebuffer_bind(DefaultFB);
DRW_multisamples_resolve(txl->depth, txl->edge_intermediate, 1);
+
+ lanpe_sanke_free_cache(pd);
}
More information about the Bf-blender-cvs
mailing list