[Bf-blender-cvs] [0b75e68500f] soc-2018-npr: Fixed lanpr field always NULL error. (caused by depsgraph scene copy)

Nick Wu noreply at git.blender.org
Tue Aug 14 07:44:56 CEST 2018


Commit: 0b75e68500f6eda1c3e92667b3bdaa8bf1a1026b
Author: Nick Wu
Date:   Tue Aug 14 13:39:44 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rB0b75e68500f6eda1c3e92667b3bdaa8bf1a1026b

Fixed lanpr field always NULL error. (caused by depsgraph scene copy)

===================================================================

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_ops.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 3188a0beaa9..460d3d1aad2 100644
--- a/source/blender/draw/engines/lanpr/lanpr_all.h
+++ b/source/blender/draw/engines/lanpr/lanpr_all.h
@@ -49,8 +49,12 @@
 #define tnsLinearItp(L, R, T) \
 	((L) * (1.0f - (T)) + (R)*(T))
 
+typedef struct LANPR_RenderBuffer LANPR_RenderBuffer;
 
-typedef struct LANPRSharedResource {
+typedef struct LANPR_SharedResource {
+
+	/* We only allocate once for all */
+	LANPR_RenderBuffer *render_buffer_shared;
 
 	/* Snake */
 	GPUShader *multichannel_shader;
@@ -76,7 +80,7 @@ typedef struct LANPRSharedResource {
 	int during_render;        // get/set using access funcion which uses render_flag_lock to lock.
 	                          // this prevents duplicate too much resource. (no render preview in viewport while rendering)
 
-} LANPRSharedResource;
+} LANPR_SharedResource;
 
 #define TNS_DPIX_TEXTURE_SIZE 2048
 
diff --git a/source/blender/draw/engines/lanpr/lanpr_dpix.c b/source/blender/draw/engines/lanpr/lanpr_dpix.c
index 6f27be1bf2e..634d59ad8f3 100644
--- a/source/blender/draw/engines/lanpr/lanpr_dpix.c
+++ b/source/blender/draw/engines/lanpr/lanpr_dpix.c
@@ -25,7 +25,7 @@
 
 #include <math.h>
 
-extern LANPRSharedResource lanpr_share;
+extern LANPR_SharedResource lanpr_share;
 extern char datatoc_lanpr_dpix_project_passthrough_vert_glsl[];
 extern char datatoc_lanpr_dpix_project_clip_frag_glsl[];
 extern char datatoc_lanpr_dpix_preview_geom_glsl[];
diff --git a/source/blender/draw/engines/lanpr/lanpr_engine.c b/source/blender/draw/engines/lanpr/lanpr_engine.c
index 7ba0427b65e..db35244ef1d 100644
--- a/source/blender/draw/engines/lanpr/lanpr_engine.c
+++ b/source/blender/draw/engines/lanpr/lanpr_engine.c
@@ -44,7 +44,7 @@ extern char datatoc_lanpr_software_passthrough_vert_glsl[];
 extern char datatoc_gpu_shader_2D_smooth_color_vert_glsl[];
 extern char datatoc_gpu_shader_2D_smooth_color_frag_glsl[];
 
-LANPRSharedResource lanpr_share;
+LANPR_SharedResource lanpr_share;
 
 
 static void lanpr_engine_init(void *ved){
diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c b/source/blender/draw/engines/lanpr/lanpr_ops.c
index fe0bb77351b..78a2e2f569a 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -2620,6 +2620,8 @@ void lanpr_clear_render_state(LANPR_RenderBuffer *rb) {
 
 /* ====================================== render control ======================================= */
 
+extern LANPR_SharedResource lanpr_share;
+
 void lanpr_destroy_render_data(LANPR_RenderBuffer *rb) {
 	LANPR_RenderElementLinkNode *reln;
 
@@ -2664,7 +2666,8 @@ void lanpr_destroy_render_data(LANPR_RenderBuffer *rb) {
 }
 
 LANPR_RenderBuffer *lanpr_create_render_buffer(SceneLANPR *lanpr) {
-	if (lanpr->render_buffer) {
+	if (lanpr_share.render_buffer_shared) {
+		lanpr->render_buffer = lanpr_share.render_buffer_shared;
 		lanpr_destroy_render_data(lanpr->render_buffer);
 		return lanpr->render_buffer;
 		//lanpr_destroy_render_data(lanpr->render_buffer);
@@ -2674,6 +2677,7 @@ LANPR_RenderBuffer *lanpr_create_render_buffer(SceneLANPR *lanpr) {
 	LANPR_RenderBuffer *rb = MEM_callocN(sizeof(LANPR_RenderBuffer), "creating LANPR render buffer");
 
 	lanpr->render_buffer = rb;
+	lanpr_share.render_buffer_shared = rb;
 
 	rb->cached_for_frame = -1;
 
@@ -2999,8 +3003,6 @@ void lanpr_viewport_draw_offline_result(LANPR_TextureList *txl, LANPR_Framebuffe
 
 void lanpr_NO_THREAD_chain_feature_lines(LANPR_RenderBuffer *rb, float dist_threshold);
 
-extern LANPRSharedResource lanpr_share;
-
 void lanpr_software_draw_scene(void *vedata, GPUFrameBuffer *dfb, int is_render) {
 	LANPR_LineLayer *ll;
 	LANPR_PassList *psl = ((LANPR_Data *)vedata)->psl;
diff --git a/source/blender/draw/engines/lanpr/lanpr_snake.c b/source/blender/draw/engines/lanpr/lanpr_snake.c
index 319f089f8e9..9c53f10fca5 100644
--- a/source/blender/draw/engines/lanpr/lanpr_snake.c
+++ b/source/blender/draw/engines/lanpr/lanpr_snake.c
@@ -20,7 +20,7 @@
 #include "GPU_viewport.h"
 #include "bmesh.h"
 
-extern struct LANPRSharedResource lanpr_share;
+extern struct LANPR_SharedResource lanpr_share;
 
 int _TNS_colOffsets[] = { -1, 0, 1, 1, 1, 0, -1, -1 };
 int _TNS_rowOffsets[] = { -1, -1, -1, 0, 1, 1, 1, 0 };



More information about the Bf-blender-cvs mailing list