[Bf-blender-cvs] [64c25782286] soc-2018-npr: Fixed software rendering intersection cache update
Nick Wu
noreply at git.blender.org
Wed Aug 1 11:59:53 CEST 2018
Commit: 64c257822862742cff1aace99123f568d6834c37
Author: Nick Wu
Date: Wed Aug 1 16:19:34 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rB64c257822862742cff1aace99123f568d6834c37
Fixed software rendering intersection cache update
===================================================================
M source/blender/blenloader/intern/readfile.c
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_ops.c
M source/blender/makesdna/DNA_scene_types.h
===================================================================
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 35d12fcbeae..40f157f9ae9 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -6523,6 +6523,8 @@ static void direct_link_scene(FileData *fd, Scene *sce)
link_list(fd, &sce->lanpr.line_layers);
for (LANPR_LineLayer *ll = sce->lanpr.line_layers.first; ll; ll = ll->next) {
link_list(fd, &ll->components);
+ ll->batch = NULL;
+ ll->shgrp = NULL;
}
sce->layer_properties = newdataadr(fd, sce->layer_properties);
diff --git a/source/blender/draw/engines/lanpr/lanpr_dpix.c b/source/blender/draw/engines/lanpr/lanpr_dpix.c
index d9154e86b9c..7fdacdaccab 100644
--- a/source/blender/draw/engines/lanpr/lanpr_dpix.c
+++ b/source/blender/draw/engines/lanpr/lanpr_dpix.c
@@ -375,7 +375,7 @@ void lanpr_dpix_draw_scene(LANPR_TextureList *txl, LANPR_FramebufferList *fbl, L
pd->dpix_zfar = camera ? ((Camera *)camera->data)->clipend : v3d->far;
GPU_point_size(1);
- GPU_line_width(2);
+ //GPU_line_width(2);
GPU_framebuffer_bind(fbl->dpix_transform);
DRW_draw_pass(psl->dpix_transform_pass);
diff --git a/source/blender/draw/engines/lanpr/lanpr_engine.c b/source/blender/draw/engines/lanpr/lanpr_engine.c
index 50e64bc0ed5..fa9bf03b3aa 100644
--- a/source/blender/draw/engines/lanpr/lanpr_engine.c
+++ b/source/blender/draw/engines/lanpr/lanpr_engine.c
@@ -484,6 +484,9 @@ static void workbench_render_matrices_init(RenderEngine *engine, Depsgraph *deps
DRW_viewport_matrix_override_set(viewinv, DRW_MAT_VIEWINV);
}
+int lanpr_compute_feature_lines_internal(Depsgraph *depsgraph, SceneLANPR* lanpr, Scene* scene) ;
+LANPR_RenderBuffer *lanpr_create_render_buffer(SceneLANPR *lanpr);
+
static void lanpr_render_to_image(LANPR_Data *vedata, RenderEngine *engine, struct RenderLayer *render_layer, const rcti *rect){
LANPR_StorageList *stl = vedata->stl;
LANPR_TextureList *txl = vedata->txl;
@@ -492,6 +495,14 @@ static void lanpr_render_to_image(LANPR_Data *vedata, RenderEngine *engine, stru
Scene *scene = DEG_get_evaluated_scene(draw_ctx->depsgraph);
SceneLANPR* lanpr = &scene->lanpr;
+ if (lanpr->master_mode == LANPR_MASTER_MODE_SOFTWARE ||
+ (lanpr->master_mode == LANPR_MASTER_MODE_DPIX && lanpr->enable_intersections)) {
+ if (!lanpr->render_buffer) lanpr_create_render_buffer(lanpr);
+ if(lanpr->render_buffer->cached_for_frame != scene->r.cfra){
+ lanpr_compute_feature_lines_internal(draw_ctx->depsgraph, lanpr, scene);
+ }
+ }
+
lanpr_set_render_flag();
workbench_render_matrices_init(engine, draw_ctx->depsgraph);
diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c b/source/blender/draw/engines/lanpr/lanpr_ops.c
index 1fe09093ac5..91bbb34370e 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -2666,6 +2666,8 @@ LANPR_RenderBuffer *lanpr_create_render_buffer(SceneLANPR *lanpr) {
lanpr->render_buffer = rb;
+ rb->cached_for_frame = -1;
+
BLI_spin_init(&rb->csData);
BLI_spin_init(&rb->csInfo);
BLI_spin_init(&rb->csManagement);
@@ -3111,28 +3113,9 @@ void lanpr_software_draw_scene(void *vedata, GPUFrameBuffer *dfb,int is_render)
/* ============================================ operators ========================================= */
-//seems we don't quite need this operator...
-static int lanpr_clear_render_buffer_exec(struct bContext *C, struct wmOperator *op) {
- Scene *scene = CTX_data_scene(C);
- SceneLANPR *lanpr = &scene->lanpr;
+int lanpr_compute_feature_lines_internal(Depsgraph *depsgraph, SceneLANPR* lanpr, Scene* scene) {
LANPR_RenderBuffer *rb;
- Depsgraph *depsgraph = CTX_data_depsgraph(C);
- lanpr_destroy_render_data(lanpr->render_buffer);
-
- return OPERATOR_FINISHED;
-}
-static int lanpr_compute_feature_lines_exec(struct bContext *C, struct wmOperator *op){
- Scene *scene = CTX_data_scene(C);
- SceneLANPR *lanpr = &scene->lanpr;
- LANPR_RenderBuffer *rb;
- Depsgraph *depsgraph = CTX_data_depsgraph(C);
-
- if (!scene->camera) {
- BKE_report(op->reports, RPT_ERROR, "There is no active camera in this scene!");
- return OPERATOR_FINISHED;
- }
-
rb = lanpr_create_render_buffer(lanpr);
rb->Scene = scene;
rb->W = scene->r.xsch;
@@ -3155,12 +3138,37 @@ static int lanpr_compute_feature_lines_exec(struct bContext *C, struct wmOperato
lanpr_THREAD_calculate_line_occlusion_begin(rb);
- if (lanpr->enable_chaining){
+ if (lanpr->enable_chaining) {
lanpr_NO_THREAD_chain_feature_lines(rb, 0.00001);// should use user_adjustable value
}
+ rb->cached_for_frame = scene->r.cfra;
+
return OPERATOR_FINISHED;
}
+
+//seems we don't quite need this operator...
+static int lanpr_clear_render_buffer_exec(struct bContext *C, struct wmOperator *op) {
+ Scene *scene = CTX_data_scene(C);
+ SceneLANPR *lanpr = &scene->lanpr;
+ LANPR_RenderBuffer *rb;
+ Depsgraph *depsgraph = CTX_data_depsgraph(C);
+
+ lanpr_destroy_render_data(lanpr->render_buffer);
+
+ return OPERATOR_FINISHED;
+}
+static int lanpr_compute_feature_lines_exec(struct bContext *C, struct wmOperator *op){
+ Scene *scene = CTX_data_scene(C);
+ SceneLANPR *lanpr = &scene->lanpr;
+
+ if (!scene->camera) {
+ BKE_report(op->reports, RPT_ERROR, "There is no active camera in this scene!");
+ return OPERATOR_FINISHED;
+ }
+
+ return lanpr_compute_feature_lines_internal(CTX_data_depsgraph(C), lanpr,scene);
+}
static void lanpr_compute_feature_lines_cancel(struct bContext *C, struct wmOperator *op){
return;
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index 8ee9dc0f9c0..0bafe3bf44d 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -1498,7 +1498,6 @@ typedef struct SceneLANPR{
float extend_length;
int snake_sensitivity;
- int size;
/* shared */
@@ -1516,7 +1515,6 @@ typedef struct SceneLANPR{
/* states (needs optimization) */
- int InitComplete;
int reloaded;
/* offline render */
More information about the Bf-blender-cvs
mailing list