[Bf-blender-cvs] [9218730b2b3] soc-2018-npr: DPIX and Snake's F12 is working now.
Nick Wu
noreply at git.blender.org
Fri Jul 27 12:17:57 CEST 2018
Commit: 9218730b2b313147ed0dc424bcb23575139dfbc1
Author: Nick Wu
Date: Fri Jul 27 18:17:18 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rB9218730b2b313147ed0dc424bcb23575139dfbc1
DPIX and Snake's F12 is working now.
===================================================================
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 62c47163546..50365298de7 100644
--- a/source/blender/draw/engines/lanpr/lanpr_all.h
+++ b/source/blender/draw/engines/lanpr/lanpr_all.h
@@ -166,9 +166,6 @@ typedef struct LANPR_PrivateData {
DRWShadingGroup *debug_shgrp;
- // moved into line layer.
- //DRWShadingGroup *software_shgrp;
-
//snake
float normal_clamp;
diff --git a/source/blender/draw/engines/lanpr/lanpr_dpix.c b/source/blender/draw/engines/lanpr/lanpr_dpix.c
index 92346a17c8c..b4cb6308b2d 100644
--- a/source/blender/draw/engines/lanpr/lanpr_dpix.c
+++ b/source/blender/draw/engines/lanpr/lanpr_dpix.c
@@ -93,26 +93,7 @@ void lanpr_init_atlas_inputs(void *ved){
}
}
void lanpr_destroy_atlas(void *ved){
- lanpr_share.ved_viewport = ved;
- LANPR_Data *vedata = (LANPR_Data *)ved;
- LANPR_TextureList *txl = vedata->txl;
- LANPR_FramebufferList *fbl = vedata->fbl;
- LANPR_StorageList *stl = ((LANPR_Data *)vedata)->stl;
- LANPR_PassList *psl = ((LANPR_Data *)vedata)->psl;
-
- //DRW_pass_free(psl->dpix_transform_pass);
- //DRW_pass_free(psl->dpix_preview_pass);
-
- GPU_framebuffer_free(fbl->dpix_transform);
- GPU_framebuffer_free(fbl->dpix_preview);
-
- DRW_texture_free(txl->dpix_in_pl);
- DRW_texture_free(txl->dpix_in_pr);
- DRW_texture_free(txl->dpix_in_nl);
- DRW_texture_free(txl->dpix_in_nr);
- DRW_texture_free(txl->dpix_in_edge_mask);
- DRW_texture_free(txl->dpix_out_pl);
- DRW_texture_free(txl->dpix_out_pr);
+ //no need to free things, no custom data.
}
int lanpr_feed_atlas_data_obj(void *vedata,
@@ -374,7 +355,7 @@ void lanpr_dpix_draw_scene(LANPR_TextureList *txl, LANPR_FramebufferList *fbl, L
const DRWContextState *draw_ctx = DRW_context_state_get();
Scene *scene = DEG_get_evaluated_scene(draw_ctx->depsgraph);
View3D *v3d = draw_ctx->v3d;
- Object *camera;
+ Object *camera=0;
if (v3d) {
RegionView3D *rv3d = draw_ctx->rv3d;
camera = (rv3d && rv3d->persp == RV3D_CAMOB) ? v3d->camera : NULL;
@@ -382,7 +363,7 @@ void lanpr_dpix_draw_scene(LANPR_TextureList *txl, LANPR_FramebufferList *fbl, L
if(!camera){
camera = scene->camera;
}
- if (!camera) return;
+ if (is_render && !camera) return;
pd->dpix_viewport[2] = texw;
pd->dpix_viewport[3] = texh;
diff --git a/source/blender/draw/engines/lanpr/lanpr_engine.c b/source/blender/draw/engines/lanpr/lanpr_engine.c
index d408a138411..50e64bc0ed5 100644
--- a/source/blender/draw/engines/lanpr/lanpr_engine.c
+++ b/source/blender/draw/engines/lanpr/lanpr_engine.c
@@ -173,35 +173,15 @@ 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_TextureList *txl = vedata->txl;
- LANPR_FramebufferList *fbl = vedata->fbl;
LANPR_StorageList *stl = ((LANPR_Data *)vedata)->stl;
- LANPR_PassList *psl = ((LANPR_Data *)vedata)->psl;
-
- //DRW_pass_free(psl->color_pass);
- //DRW_pass_free(psl->edge_intermediate);
- GPU_framebuffer_free(fbl->passes);
- GPU_framebuffer_free(fbl->edge_intermediate);
- GPU_framebuffer_free(fbl->edge_thinning);
- GPU_framebuffer_free(fbl->software_ms);
-
- DRW_texture_free(txl->depth);
- DRW_texture_free(txl->color);
- DRW_texture_free(txl->normal);
- DRW_texture_free(txl->edge_intermediate);
- DRW_texture_free(txl->ms_resolve_depth);
- DRW_texture_free(txl->ms_resolve_color);
+ //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);
- MEM_freeN(stl->g_data->line_result_8bit);
- MEM_freeN(stl->g_data->line_result);
- MEM_freeN(stl->g_data);
-
lanpr_destroy_atlas(vedata);
stl->g_data = 0;
@@ -366,37 +346,39 @@ static void lanpr_cache_finish(void *vedata){
float mat[4][4];
unit_m4(mat);
- LANPR_BatchItem *bi;
- for (bi = pd->dpix_batch_list.first; bi; bi = (void *)bi->Item.next) {
- DRW_shgroup_call_add(pd->dpix_transform_shgrp, bi->dpix_transform_batch, bi->ob->obmat);
- DRW_shgroup_call_add(pd->dpix_preview_shgrp, bi->dpix_preview_batch, 0);
- }
-
- if (lanpr->reloaded && lanpr->master_mode == LANPR_MASTER_MODE_DPIX && lanpr->active_layer) {
- if (lanpr->render_buffer) {
- lanpr_feed_atlas_data_intersection_cache(vedata, pd->atlas_pl, pd->atlas_pr, pd->atlas_nl, pd->atlas_nr, pd->atlas_edge_mask, pd->begin_index);
- lanpr_create_atlas_intersection_preview(vedata, pd->begin_index);
+ if (lanpr->master_mode == LANPR_MASTER_MODE_DPIX && lanpr->active_layer) {
+ if (lanpr->reloaded) {
+ if (lanpr->render_buffer) {
+ lanpr_feed_atlas_data_intersection_cache(vedata, pd->atlas_pl, pd->atlas_pr, pd->atlas_nl, pd->atlas_nr, pd->atlas_edge_mask, pd->begin_index);
+ lanpr_create_atlas_intersection_preview(vedata, pd->begin_index);
+ }
+ GPU_texture_update(txl->dpix_in_pl, GPU_DATA_FLOAT, pd->atlas_pl);
+ GPU_texture_update(txl->dpix_in_pr, GPU_DATA_FLOAT, pd->atlas_pr);
+ GPU_texture_update(txl->dpix_in_nl, GPU_DATA_FLOAT, pd->atlas_nl);
+ GPU_texture_update(txl->dpix_in_nr, GPU_DATA_FLOAT, pd->atlas_nr);
+ GPU_texture_update(txl->dpix_in_edge_mask, GPU_DATA_FLOAT, pd->atlas_edge_mask);
+
+ MEM_freeN(pd->atlas_pl);
+ MEM_freeN(pd->atlas_pr);
+ MEM_freeN(pd->atlas_nl);
+ MEM_freeN(pd->atlas_nr);
+ MEM_freeN(pd->atlas_edge_mask);
+ pd->atlas_pl = 0;
+ lanpr->reloaded = 0;
}
- GPU_texture_update(txl->dpix_in_pl, GPU_DATA_FLOAT, pd->atlas_pl);
- GPU_texture_update(txl->dpix_in_pr, GPU_DATA_FLOAT, pd->atlas_pr);
- GPU_texture_update(txl->dpix_in_nl, GPU_DATA_FLOAT, pd->atlas_nl);
- GPU_texture_update(txl->dpix_in_nr, GPU_DATA_FLOAT, pd->atlas_nr);
- GPU_texture_update(txl->dpix_in_edge_mask, GPU_DATA_FLOAT, pd->atlas_edge_mask);
-
- MEM_freeN(pd->atlas_pl);
- MEM_freeN(pd->atlas_pr);
- MEM_freeN(pd->atlas_nl);
- MEM_freeN(pd->atlas_nr);
- MEM_freeN(pd->atlas_edge_mask);
- pd->atlas_pl = 0;
- lanpr->reloaded = 0;
+
- }
+ LANPR_BatchItem *bi;
+ for (bi = pd->dpix_batch_list.first; bi; bi = (void *)bi->Item.next) {
+ DRW_shgroup_call_add(pd->dpix_transform_shgrp, bi->dpix_transform_batch, bi->ob->obmat);
+ DRW_shgroup_call_add(pd->dpix_preview_shgrp, bi->dpix_preview_batch, 0);
+ }
- if (lanpr->render_buffer && lanpr->render_buffer->DPIXIntersectionBatch) {
- DRW_shgroup_call_add(pd->dpix_transform_shgrp, lanpr->render_buffer->DPIXIntersectionTransformBatch, 0);
- DRW_shgroup_call_add(pd->dpix_preview_shgrp, lanpr->render_buffer->DPIXIntersectionBatch, 0);
+ if (lanpr->render_buffer && lanpr->render_buffer->DPIXIntersectionBatch) {
+ DRW_shgroup_call_add(pd->dpix_transform_shgrp, lanpr->render_buffer->DPIXIntersectionTransformBatch, 0);
+ DRW_shgroup_call_add(pd->dpix_preview_shgrp, lanpr->render_buffer->DPIXIntersectionBatch, 0);
+ }
}
}
@@ -494,12 +476,12 @@ static void workbench_render_matrices_init(RenderEngine *engine, Depsgraph *deps
unit_m4(unitmat);
- DRW_viewport_matrix_override_set(unitmat, DRW_MAT_PERS);
- DRW_viewport_matrix_override_set(unitmat, DRW_MAT_PERSINV);
- DRW_viewport_matrix_override_set(unitmat, DRW_MAT_WIN);
- DRW_viewport_matrix_override_set(unitmat, DRW_MAT_WININV);
- DRW_viewport_matrix_override_set(unitmat, DRW_MAT_VIEW);
- DRW_viewport_matrix_override_set(unitmat, DRW_MAT_VIEWINV);
+ DRW_viewport_matrix_override_set(persmat, DRW_MAT_PERS);
+ DRW_viewport_matrix_override_set(persinv, DRW_MAT_PERSINV);
+ DRW_viewport_matrix_override_set(winmat, DRW_MAT_WIN);
+ DRW_viewport_matrix_override_set(wininv, DRW_MAT_WININV);
+ DRW_viewport_matrix_override_set(viewmat, DRW_MAT_VIEW);
+ DRW_viewport_matrix_override_set(viewinv, DRW_MAT_VIEWINV);
}
static void lanpr_render_to_image(LANPR_Data *vedata, RenderEngine *engine, struct RenderLayer *render_layer, const rcti *rect){
@@ -537,6 +519,7 @@ static void lanpr_render_to_image(LANPR_Data *vedata, RenderEngine *engine, stru
});
lanpr_engine_init(vedata);
+ lanpr->reloaded = 1; // force dpix batch to re-create
lanpr_cache_init(vedata);
DRW_render_object_iter(vedata, engine, draw_ctx->depsgraph, LANPR_render_cache);
lanpr_cache_finish(vedata);
@@ -560,6 +543,7 @@ static void lanpr_render_to_image(LANPR_Data *vedata, RenderEngine *engine, stru
BLI_rcti_size_x(rect), BLI_rcti_size_y(rect),
4, 0, rp->rect);
+ //we don't need to free pass/buffer/texture in the engine's list
//lanpr_engine_free();
lanpr_clear_render_flag();
diff --git a/source/blender/draw/engines/lanpr/lanpr_snake.c b/source/blender/draw/engines/lanpr/lanpr_snake.c
index 4a6ddb4da72..4843d831af3 100644
--- a/source/blender/draw/engines/lanpr/lanpr_snake.c
+++ b/source/blender/draw/engines/lanpr/lanpr_snake.c
@@ -302,6 +302,23 @@ GPUBatch *lanpr_get_snake_batch(LANPR_PrivateData *pd){
return GPU_batch_create_ex(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) {
+ 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_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);
+}
+void lanpr_snake_free_readback_data(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;
+}
+
void lanpr_snake_draw_scene(LANPR_TextureList *txl, LANPR_FramebufferList *fbl, LANPR_PassList *psl, LANPR_PrivateData *pd, SceneLANPR *lanpr, GPUFrameBuffer *DefaultFB, int is_render){
GPUFrameBufferBits clear_bits = GPU_COLOR_BIT | GPU_DEPTH_BIT;
float clear_col[4] = {0.0f, 0.0f, 0.0f, 0.0f};
@@ -373,7 +390,7 @@ void lanpr_snake_draw_scene(LANPR_TextureList *txl, LANPR_FramebufferList *fbl,
int recreate = 0;
if (tsize != pd->width * pd->height) recreate = 1;
- if (recreate) {
+ if (recreate || !pd->line_result) {
if (pd->line_result) MEM_freeN(pd->line_result);
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list