[Bf-blender-cvs] [e549000] soc-2016-cycles_denoising: Render API: Use RE_InitState for postprocessing operator

Lukas Stockner noreply at git.blender.org
Sat Nov 26 04:21:36 CET 2016


Commit: e549000b3914c365d97e9c61a2db8d1fa9068758
Author: Lukas Stockner
Date:   Thu Nov 24 13:47:25 2016 +0100
Branches: soc-2016-cycles_denoising
https://developer.blender.org/rBe549000b3914c365d97e9c61a2db8d1fa9068758

Render API: Use RE_InitState for postprocessing operator

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

M	source/blender/editors/render/render_internal.c
M	source/blender/editors/render/render_opengl.c
M	source/blender/render/extern/include/RE_pipeline.h
M	source/blender/render/intern/source/envmap.c
M	source/blender/render/intern/source/external_engine.c
M	source/blender/render/intern/source/pipeline.c

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

diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c
index 6af1626..11bebf9 100644
--- a/source/blender/editors/render/render_internal.c
+++ b/source/blender/editors/render/render_internal.c
@@ -1124,10 +1124,10 @@ static void render_view3d_startjob(void *customdata, short *stop, short *do_upda
 		/* initalize always */
 		if (use_border) {
 			rdata.mode |= R_BORDER;
-			RE_InitState(re, NULL, &rdata, NULL, rp->ar->winx, rp->ar->winy, &cliprct);
+			RE_InitState(re, NULL, &rdata, NULL, NULL, rp->ar->winx, rp->ar->winy, &cliprct);
 		}
 		else
-			RE_InitState(re, NULL, &rdata, NULL, rp->ar->winx, rp->ar->winy, NULL);
+			RE_InitState(re, NULL, &rdata, NULL, NULL, rp->ar->winx, rp->ar->winy, NULL);
 	}
 
 	if (orth)
diff --git a/source/blender/editors/render/render_opengl.c b/source/blender/editors/render/render_opengl.c
index 9097432..49b7464 100644
--- a/source/blender/editors/render/render_opengl.c
+++ b/source/blender/editors/render/render_opengl.c
@@ -695,7 +695,7 @@ static bool screen_opengl_render_init(bContext *C, wmOperator *op)
 	oglrender->iuser.ok = 1;
 
 	/* create render result */
-	RE_InitState(oglrender->re, NULL, &scene->r, NULL, sizex, sizey, NULL);
+	RE_InitState(oglrender->re, NULL, &scene->r, NULL, NULL, sizex, sizey, NULL);
 
 	/* create render views */
 	screen_opengl_views_setup(oglrender);
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index 141d3e1..f3279ba 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -244,7 +244,7 @@ struct RenderPass *RE_create_gp_pass(struct RenderResult *rr, const char *layern
 
 /* obligatory initialize call, disprect is optional */
 void RE_InitState(struct Render *re, struct Render *source, struct RenderData *rd,
-                  struct SceneRenderLayer *srl,
+                  struct SceneRenderLayer *srl, struct RenderResult *rr,
                   int winx, int winy, rcti *disprect);
 void RE_ChangeResolution(struct Render *re, int winx, int winy, rcti *disprect);
 void RE_ChangeModeFlag(struct Render *re, int flag, bool clear);
diff --git a/source/blender/render/intern/source/envmap.c b/source/blender/render/intern/source/envmap.c
index d97e18d..5b41bde 100644
--- a/source/blender/render/intern/source/envmap.c
+++ b/source/blender/render/intern/source/envmap.c
@@ -150,7 +150,7 @@ static Render *envmap_render_copy(Render *re, EnvMap *env)
 	envre->r.size = 100;
 	envre->r.yasp = envre->r.xasp = 1;
 	
-	RE_InitState(envre, NULL, &envre->r, NULL, cuberes, cuberes, NULL);
+	RE_InitState(envre, NULL, &envre->r, NULL, NULL, cuberes, cuberes, NULL);
 	envre->main = re->main;
 	envre->scene = re->scene;    /* unsure about this... */
 	envre->scene_color_manage = re->scene_color_manage;
diff --git a/source/blender/render/intern/source/external_engine.c b/source/blender/render/intern/source/external_engine.c
index 0c243d1..9561f2e 100644
--- a/source/blender/render/intern/source/external_engine.c
+++ b/source/blender/render/intern/source/external_engine.c
@@ -604,15 +604,9 @@ void RE_engine_postprocess(Scene *scene, Render *re, RenderResult *rr)
 	RenderEngine *engine = RE_engine_create(type);
 
 	engine->re = re;
-	engine->re->result = rr;
-	engine->re->r = scene->r;
-	engine->re->rectx = rr->rectx;
-	engine->re->recty = rr->recty;
-	engine->re->disprect.xmin = 0;
-	engine->re->disprect.xmin = 0;
-	engine->re->disprect.xmax = rr->rectx;
-	engine->re->disprect.xmax = rr->recty;
 	RE_parts_init(engine->re, false);
+
+	RE_InitState(engine->re, NULL, &scene->r, NULL, rr, rr->rectx, rr->recty, NULL);
 	engine->tile_x = engine->re->partx;
 	engine->tile_y = engine->re->party;
 
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index 20e462d..98cd95e 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -699,7 +699,7 @@ void render_copy_renderdata(RenderData *to, RenderData *from)
 /* what doesn't change during entire render sequence */
 /* disprect is optional, if NULL it assumes full window render */
 void RE_InitState(Render *re, Render *source, RenderData *rd,
-                  SceneRenderLayer *srl,
+                  SceneRenderLayer *srl, RenderResult *rr,
                   int winx, int winy, rcti *disprect)
 {
 	bool had_freestyle = (re->r.mode & R_EDGE_FRS) != 0;
@@ -770,9 +770,12 @@ void RE_InitState(Render *re, Render *source, RenderData *rd,
 	make_sample_tables(re);
 	
 	/* if preview render, we try to keep old result */
-	BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE);
+	if (!rr) BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE);
 
-	if (re->r.scemode & (R_BUTS_PREVIEW|R_VIEWPORT_PREVIEW)) {
+	if (rr) {
+		re->result = rr;
+	}
+	else if (re->r.scemode & (R_BUTS_PREVIEW|R_VIEWPORT_PREVIEW)) {
 		if (had_freestyle || (re->r.mode & R_EDGE_FRS)) {
 			/* freestyle manipulates render layers so always have to free */
 			render_result_free(re->result);
@@ -818,7 +821,7 @@ void RE_InitState(Render *re, Render *source, RenderData *rd,
 	/* ensure renderdatabase can use part settings correct */
 	RE_parts_clamp(re);
 
-	BLI_rw_mutex_unlock(&re->resultmutex);
+	if (!rr) BLI_rw_mutex_unlock(&re->resultmutex);
 	
 	re->mblur_offs = re->field_offs = 0.f;
 	
@@ -1925,7 +1928,7 @@ static void render_scene(Render *re, Scene *sce, int cfra)
 	}
 	
 	/* initial setup */
-	RE_InitState(resc, re, &sce->r, NULL, winx, winy, &re->disprect);
+	RE_InitState(resc, re, &sce->r, NULL, NULL, winx, winy, &re->disprect);
 
 	/* We still want to use 'rendercache' setting from org (main) scene... */
 	resc->r.scemode = (resc->r.scemode & ~R_EXR_CACHE_FILE) | (re->r.scemode & R_EXR_CACHE_FILE);
@@ -3179,7 +3182,7 @@ static int render_initialize_from_main(Render *re, RenderData *rd, Main *bmain,
 		BLI_rw_mutex_unlock(&re->resultmutex);
 	}
 	
-	RE_InitState(re, NULL, &scene->r, srl, winx, winy, &disprect);
+	RE_InitState(re, NULL, &scene->r, srl, NULL, winx, winy, &disprect);
 	if (!re->ok)  /* if an error was printed, abort */
 		return 0;
 	
@@ -3805,7 +3808,7 @@ void RE_PreviewRender(Render *re, Main *bmain, Scene *sce)
 	winx = (sce->r.size * sce->r.xsch) / 100;
 	winy = (sce->r.size * sce->r.ysch) / 100;
 
-	RE_InitState(re, NULL, &sce->r, NULL, winx, winy, NULL);
+	RE_InitState(re, NULL, &sce->r, NULL, NULL, winx, winy, NULL);
 
 	re->pool = BKE_image_pool_new();
 
@@ -3858,7 +3861,7 @@ bool RE_ReadRenderResult(Scene *scene, Scene *scenode)
 	re = RE_GetRender(scene->id.name);
 	if (re == NULL)
 		re = RE_NewRender(scene->id.name);
-	RE_InitState(re, NULL, &scene->r, NULL, winx, winy, &disprect);
+	RE_InitState(re, NULL, &scene->r, NULL, NULL, winx, winy, &disprect);
 	re->scene = scene;
 	re->scene_color_manage = BKE_scene_check_color_management_enabled(scene);




More information about the Bf-blender-cvs mailing list