[Bf-blender-cvs] [3e6a66b] master: Multi-View cleanup: using RenderResult->rect* only for temporary RenderResults

Dalai Felinto noreply at git.blender.org
Wed Apr 29 16:56:30 CEST 2015


Commit: 3e6a66b9dee4e0b034a1de83fbd242191858a7df
Author: Dalai Felinto
Date:   Wed Apr 29 11:26:30 2015 -0300
Branches: master
https://developer.blender.org/rB3e6a66b9dee4e0b034a1de83fbd242191858a7df

Multi-View cleanup: using RenderResult->rect* only for temporary RenderResults

Originally I wanted to get rid of RenderResult->rect* entirely, but it's
convenient to have for temporary structs.

This patch makes sure they are used only when really needed, which
should help clearing the code out.

(they are needed when using RE_AcquireResultImage() - which produces a
RenderResult with no RenderView)

Reviewers: sergey

Differential Revision: https://developer.blender.org/D1270

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

M	source/blender/blenkernel/intern/image.c
M	source/blender/editors/render/render_internal.c
M	source/blender/editors/render/render_opengl.c
M	source/blender/editors/render/render_preview.c
M	source/blender/editors/space_image/image_buttons.c
M	source/blender/render/extern/include/RE_pipeline.h
M	source/blender/render/intern/source/pipeline.c
M	source/blender/render/intern/source/render_result.c

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

diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index 162f453..eceb5c4 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -3554,7 +3554,7 @@ static ImBuf *image_get_render_result(Image *ima, ImageUser *iuser, void **lock_
 	}
 	else if (ima->renders[ima->render_slot]) {
 		rres = *(ima->renders[ima->render_slot]);
-		rres.have_combined = RE_RenderViewGetRectf(&rres, actview) != NULL;
+		rres.have_combined = ((RenderView *)rres.views.first)->rectf != NULL;
 	}
 	else
 		memset(&rres, 0, sizeof(RenderResult));
diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c
index 2f27912..2ba1e61 100644
--- a/source/blender/editors/render/render_internal.c
+++ b/source/blender/editors/render/render_internal.c
@@ -189,11 +189,15 @@ static void image_buffer_rect_update(RenderJob *rj, RenderResult *rr, ImBuf *ibu
 	 */
 	/* TODO(sergey): Need to check has_combined here? */
 	if (iuser->passtype == SCE_PASS_COMBINED) {
+		RenderView *rv;
 		size_t view_id = BKE_scene_multiview_view_id_get(&scene->r, viewname);
+		rv = RE_RenderViewGetById(rr, view_id);
+
 		/* find current float rect for display, first case is after composite... still weak */
-		rectf = RE_RenderViewGetRectf(rr, view_id);
-		if (rectf == NULL) {
-			if (RE_RenderViewGetRect32(rr, view_id)) {
+		if (rv->rectf)
+			rectf = rv->rectf;
+		else {
+			if (rv->rect32) {
 				/* special case, currently only happens with sequencer rendering,
 				 * which updates the whole frame, so we can only mark display buffer
 				 * as invalid here (sergey)
diff --git a/source/blender/editors/render/render_opengl.c b/source/blender/editors/render/render_opengl.c
index 164f5f4..7fbdf9d 100644
--- a/source/blender/editors/render/render_opengl.c
+++ b/source/blender/editors/render/render_opengl.c
@@ -248,7 +248,7 @@ static void screen_opengl_render_doit(OGLRender *oglrender, RenderResult *rr)
 	Object *camera = NULL;
 	ImBuf *ibuf;
 	float winmat[4][4];
-	float *rectf = RE_RenderViewGetRectf(rr, oglrender->view_id);
+	float *rectf = RE_RenderViewGetById(rr, oglrender->view_id)->rectf;
 	int sizex = oglrender->sizex;
 	int sizey = oglrender->sizey;
 	const short view_context = (v3d != NULL);
@@ -446,8 +446,8 @@ static void screen_opengl_render_doit(OGLRender *oglrender, RenderResult *rr)
 
 	if (rect) {
 		int profile_to;
-		float *rectf = RE_RenderViewGetRectf(rr, oglrender->view_id);
-		
+		float *rectf = RE_RenderViewGetById(rr, oglrender->view_id)->rectf;
+
 		if (BKE_scene_check_color_management_enabled(scene))
 			profile_to = IB_PROFILE_LINEAR_RGB;
 		else
diff --git a/source/blender/editors/render/render_preview.c b/source/blender/editors/render/render_preview.c
index e6fbfda..2c353c1 100644
--- a/source/blender/editors/render/render_preview.c
+++ b/source/blender/editors/render/render_preview.c
@@ -525,6 +525,7 @@ static Scene *preview_prepare_scene(Scene *scene, ID *id, int id_type, ShaderPre
 static bool ed_preview_draw_rect(ScrArea *sa, int split, int first, rcti *rect, rcti *newrect)
 {
 	Render *re;
+	RenderView *rv;
 	RenderResult rres;
 	char name[32];
 	int offx = 0;
@@ -549,10 +550,12 @@ static bool ed_preview_draw_rect(ScrArea *sa, int split, int first, rcti *rect,
 	/* test if something rendered ok */
 	re = RE_GetRender(name);
 
+	RE_AcquireResultImageViews(re, &rres);
+
 	/* material preview only needs monoscopy (view 0) */
-	RE_AcquireResultImage(re, &rres, 0);
+	rv = RE_RenderViewGetById(&rres, 0);
 
-	if (rres.rectf) {
+	if (rv->rectf) {
 		
 		if (ABS(rres.rectx - newx) < 2 && ABS(rres.recty - newy) < 2) {
 
@@ -577,7 +580,7 @@ static bool ed_preview_draw_rect(ScrArea *sa, int split, int first, rcti *rect,
 		}
 	}
 
-	RE_ReleaseResultImage(re);
+	RE_ReleaseResultImageViews(re, &rres);
 
 	return ok;
 }
diff --git a/source/blender/editors/space_image/image_buttons.c b/source/blender/editors/space_image/image_buttons.c
index 1c668c3..e52eea2 100644
--- a/source/blender/editors/space_image/image_buttons.c
+++ b/source/blender/editors/space_image/image_buttons.c
@@ -312,10 +312,11 @@ static void ui_imageuser_slot_menu(bContext *UNUSED(C), uiLayout *layout, void *
 
 static const char *ui_imageuser_layer_fake_name(RenderResult *rr)
 {
-	if (RE_RenderViewGetRectf(rr, 0)) {
+	RenderView *rv = RE_RenderViewGetById(rr, 0);
+	if (rv->rectf) {
 		return IFACE_("Composite");
 	}
-	else if (RE_RenderViewGetRect32(rr, 0)) {
+	else if (rv->rect32) {
 		return IFACE_("Sequence");
 	}
 	else {
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index 2c3ad74..2df4cde 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -138,6 +138,9 @@ typedef struct RenderResult {
 	int rectx, recty;
 	short crop, sample_nr;
 	
+	/* the following rect32, rectf and rectz buffers are for temporary storage only, for RenderResult structs
+	 * created in #RE_AcquireResultImage - which do not have RenderView */
+
 	/* optional, 32 bits version of picture, used for ogl render and image curves */
 	int *rect32;
 	/* if this exists, a copy of one of layers, or result of composited layers */
@@ -353,14 +356,8 @@ bool RE_allow_render_generic_object(struct Object *ob);
 
 bool RE_HasFakeLayer(RenderResult *res);
 bool RE_RenderResult_is_stereo(RenderResult *res);
-
 struct RenderView *RE_RenderViewGetById(struct RenderResult *res, const int view_id);
 struct RenderView *RE_RenderViewGetByName(struct RenderResult *res, const char *viewname);
-float *RE_RenderViewGetRectf(struct RenderResult *rr, const int view_id);
-float *RE_RenderViewGetRectz(struct RenderResult *rr, const int view_id);
-int   *RE_RenderViewGetRect32(struct RenderResult *rr, const int view_id);
-void   RE_RenderViewSetRectf(struct RenderResult *res, const int view_id, float *rect);
-void   RE_RenderViewSetRectz(struct RenderResult *res, const int view_id, float *rect);
 
 #endif /* __RE_PIPELINE_H__ */
 
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index c26a74f..a408900 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -380,6 +380,8 @@ void RE_ReleaseResultImageViews(Render *re, RenderResult *rr)
 }
 
 /* fill provided result struct with what's currently active or done */
+/* this RenderResult struct is the only exception to the rule of a RenderResult */
+/* always having at least one RenderView */
 void RE_AcquireResultImage(Render *re, RenderResult *rr, const int view_id)
 {
 	memset(rr, 0, sizeof(RenderResult));
@@ -397,14 +399,14 @@ void RE_AcquireResultImage(Render *re, RenderResult *rr, const int view_id)
 			/* actview view */
 			rv = RE_RenderViewGetById(re->result, view_id);
 
-			rr->rectf =  rv ? rv->rectf  : NULL;
-			rr->rectz =  rv ? rv->rectz  : NULL;
-			rr->rect32 = rv ? rv->rect32 : NULL;
+			rr->rectf = rv->rectf;
+			rr->rectz = rv->rectz;
+			rr->rect32 = rv->rect32;
 
 			/* active layer */
 			rl = render_get_active_layer(re, re->result);
 
-			if (rl && rv) {
+			if (rl) {
 				if (rv->rectf == NULL)
 					rr->rectf = RE_RenderLayerGetPass(rl, SCE_PASS_COMBINED, rv->name);
 
@@ -412,7 +414,7 @@ void RE_AcquireResultImage(Render *re, RenderResult *rr, const int view_id)
 					rr->rectz = RE_RenderLayerGetPass(rl, SCE_PASS_Z, rv->name);
 			}
 
-			rr->have_combined = rv ? (rv->rectf != NULL) : false;
+			rr->have_combined = (rv->rectf != NULL);
 			rr->layers = re->result->layers;
 			rr->views = re->result->views;
 
@@ -434,9 +436,9 @@ void RE_ResultGet32(Render *re, unsigned int *rect)
 	RenderResult rres;
 	const size_t view_id = BKE_scene_multiview_view_id_get(&re->r, re->viewname);
 
-	RE_AcquireResultImage(re, &rres, view_id);
-	render_result_rect_get_pixels(&rres, rect, re->rectx, re->recty, &re->scene->view_settings, &re->scene->display_settings, 0);
-	RE_ReleaseResultImage(re);
+	RE_AcquireResultImageViews(re, &rres);
+	render_result_rect_get_pixels(&rres, rect, re->rectx, re->recty, &re->scene->view_settings, &re->scene->display_settings, view_id);
+	RE_ReleaseResultImageViews(re, &rres);
 }
 
 /* caller is responsible for allocating rect in correct size! */
@@ -768,11 +770,14 @@ void RE_InitState(Render *re, Render *source, RenderData *rd,
 static void render_result_rescale(Render *re)
 {
 	RenderResult *result = re->result;
+	RenderView *rv;
 	int x, y;
 	float scale_x, scale_y;
 	float *src_rectf;
 
-	src_rectf = result->rectf;
+	rv = RE_RenderViewGetById(result, 0);
+	src_rectf = rv->rectf;
+
 	if (src_rectf == NULL) {
 		RenderLayer *rl = render_get_active_layer(re, re->result);
 		if (rl != NULL) {
@@ -790,7 +795,7 @@ static void render_result_rescale(Render *re)
 		                               "");
 
 		if (re->result != NULL) {
-			dst_rectf = re->result->rectf;
+			dst_rectf = RE_RenderViewGetById(re->result, 0)->rectf;
 			if (dst_rectf == NULL) {
 				RenderLayer *rl;
 				rl = render_get_active_layer(re, re->result);
diff --git a/source/blender/render/intern/source/render_result.c b/source/blender/render/intern/source/render_result.c
index 1668b11..c8ca110 100644
--- a/source/blender/render/intern/source/render_result.c
+++ b/source/blender/render/intern/source/render_result.c
@@ -1465,12 +1465,13 @@ bool render_result_exr_file_cache_read(Render *re)
 ImBuf *render_result_rect_to_ibuf(RenderResult *rr, RenderData *rd, const int view_id)
 {
 	ImBuf *ibuf = IMB_allocImBuf(rr->rectx, rr->recty, rd->im_format.planes, 0);
-	
+	RenderView *rv = RE_RenderViewGetById(rr, view_id);
+
 	/* if not exists, BKE_imbuf_write makes one */
-	ibuf->rect = (unsigned int *) RE_RenderViewGetRect32(rr, view_id);
-	ibuf->rect_float = RE_RenderViewGetRectf(rr, view_id);
-	ibuf->zbuf_float = RE_RenderViewGetRectz(rr, view_id);
-	
+	ibuf->rect = (unsigned int *) rv->rect32;
+	ibuf->rect_float = rv->rectf;
+	ibuf->zbuf_float = rv->rectz;
+
 	/* float factor for random dither, imbuf takes care of it */
 	ibuf->dither = rd->dither_intensity;
 	
@@ -1528,10 +1529,6 @@ void render_result_rect_from_ibuf(RenderResult *rr, RenderData *U

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list