[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