[Bf-blender-cvs] [eb19c93] multiview: adapt more render functions to use view_id

Dalai Felinto noreply at git.blender.org
Wed Aug 13 12:15:57 CEST 2014


Commit: eb19c93cb2be613f4be347ec111fbe402be20699
Author: Dalai Felinto
Date:   Tue Aug 12 12:09:18 2014 +0200
Branches: multiview
https://developer.blender.org/rBeb19c93cb2be613f4be347ec111fbe402be20699

adapt more render functions to use view_id

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

M	source/blender/editors/render/render_preview.c
M	source/blender/render/extern/include/RE_pipeline.h
M	source/blender/render/intern/include/render_result.h
M	source/blender/render/intern/source/pipeline.c
M	source/blender/render/intern/source/render_result.c

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

diff --git a/source/blender/editors/render/render_preview.c b/source/blender/editors/render/render_preview.c
index a8dadbc..e14950e 100644
--- a/source/blender/editors/render/render_preview.c
+++ b/source/blender/editors/render/render_preview.c
@@ -560,7 +560,8 @@ static bool ed_preview_draw_rect(ScrArea *sa, int split, int first, rcti *rect,
 				float fx = rect->xmin + offx;
 				float fy = rect->ymin;
 				
-				RE_AcquiredResultGet32(re, &rres, (unsigned int *)rect_byte);
+				/* XXX MV to investigate when this is called */
+				RE_AcquiredResultGet32(re, &rres, (unsigned int *)rect_byte, 0);
 				glaDrawPixelsSafe(fx, fy, rres.rectx, rres.recty, rres.rectx, GL_RGBA, GL_UNSIGNED_BYTE, rect_byte);
 				
 				MEM_freeN(rect_byte);
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index 155c307..6a9507c 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -213,7 +213,7 @@ void RE_SwapResult(struct Render *re, struct RenderResult **rr);
 struct RenderStats *RE_GetStats(struct Render *re);
 
 void RE_ResultGet32(struct Render *re, unsigned int *rect);
-void RE_AcquiredResultGet32(struct Render *re, struct RenderResult *result, unsigned int *rect);
+void RE_AcquiredResultGet32(struct Render *re, struct RenderResult *result, unsigned int *rect, const int view_id);
 
 struct RenderLayer *RE_GetRenderLayer(struct RenderResult *rr, const char *name);
 float *RE_RenderLayerGetPass(struct RenderLayer *rl, int passtype, int view_id);
diff --git a/source/blender/render/intern/include/render_result.h b/source/blender/render/intern/include/render_result.h
index 59cc539..17a5e6a 100644
--- a/source/blender/render/intern/include/render_result.h
+++ b/source/blender/render/intern/include/render_result.h
@@ -91,7 +91,7 @@ bool render_result_exr_file_cache_read(struct Render *re);
 
 /* Combined Pixel Rect */
 
-struct ImBuf *render_result_rect_to_ibuf(struct RenderResult *rr, struct RenderData *rd);
+struct ImBuf *render_result_rect_to_ibuf(struct RenderResult *rr, struct RenderData *rd, const int view_id);
 void render_result_rect_from_ibuf(struct RenderResult *rr, struct RenderData *rd,
 	struct ImBuf *ibuf);
 
@@ -99,7 +99,8 @@ void render_result_rect_fill_zero(struct RenderResult *rr);
 void render_result_rect_get_pixels(struct RenderResult *rr,
 	unsigned int *rect, int rectx, int recty,
 	const struct ColorManagedViewSettings *view_settings,
-	const struct ColorManagedDisplaySettings *display_settings);
+	const struct ColorManagedDisplaySettings *display_settings,
+	const int view_id);
 
 int render_result_get_view_id(struct Render *re, const char *view);
 void render_result_views_shallowcopy(struct RenderResult *dst, struct RenderResult *src);
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index 19f570e..8897494 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -253,37 +253,37 @@ void RE_RenderViewSetRectz(RenderResult *res, int view_id, float *rect)
 float *RE_RenderViewGetRectz(RenderResult *res, int view_id)
 {
 	RenderView *rv;
-	int nr=0;
+	size_t nr = 0;
 
 	for (nr=0, rv = res->views.first; rv; rv = rv->next, nr++)
 		if (nr == view_id)
 			return rv->rectz;
 
-	return NULL;
+	return res->rectz;
 }
 
 float *RE_RenderViewGetRectf(RenderResult *res, int view_id)
 {
 	RenderView *rv;
-	int nr=0;
+	size_t nr = 0;
 
-	for (nr=0, rv = res->views.first; rv; rv = rv->next, nr++)
+	for (nr = 0, rv = res->views.first; rv; rv = rv->next, nr++)
 		if (nr == view_id)
 			return rv->rectf;
 
-	return NULL;
+	return res->rectf;
 }
 
 int *RE_RenderViewGetRect32(RenderResult *res, int view_id)
 {
 	RenderView *rv;
-	int nr=0;
+	size_t nr;
 
-	for (nr=0, rv = res->views.first; rv; rv = rv->next, nr++)
+	for (nr = 0, rv = res->views.first; rv; rv = rv->next, nr++)
 		if (nr == view_id)
 			return rv->rect32;
 
-	return NULL;
+	return res->rect32;
 }
 
 float *RE_RenderLayerGetPass(RenderLayer *rl, int passtype, int view_id)
@@ -546,15 +546,15 @@ void RE_ResultGet32(Render *re, unsigned int *rect)
 
 	/* XXX MV SEQ to deal with that once SEQ is tackled */
 	RE_AcquireResultImage(re, &rres, 0);
-	render_result_rect_get_pixels(&rres, rect, re->rectx, re->recty, &re->scene->view_settings, &re->scene->display_settings);
+	render_result_rect_get_pixels(&rres, rect, re->rectx, re->recty, &re->scene->view_settings, &re->scene->display_settings, 0);
 	RE_ReleaseResultImage(re);
 }
 
 /* caller is responsible for allocating rect in correct size! */
 /* Only for acquired results, for lock */
-void RE_AcquiredResultGet32(Render *re, RenderResult *result, unsigned int *rect)
+void RE_AcquiredResultGet32(Render *re, RenderResult *result, unsigned int *rect, const int view_id)
 {
-	render_result_rect_get_pixels(result, rect, re->rectx, re->recty, &re->scene->view_settings, &re->scene->display_settings);
+	render_result_rect_get_pixels(result, rect, re->rectx, re->recty, &re->scene->view_settings, &re->scene->display_settings, view_id);
 }
 
 RenderStats *RE_GetStats(Render *re)
@@ -3152,13 +3152,13 @@ static int do_write_image_or_movie(Render *re, Main *bmain, Scene *scene, bMovie
 	/* write movie or image */
 	if (BKE_imtype_is_movie(scene->r.im_format.imtype)) {
 		bool do_free = false;
-		ImBuf *ibuf = render_result_rect_to_ibuf(&rres, &scene->r);
+		ImBuf *ibuf = render_result_rect_to_ibuf(&rres, &scene->r, 0);
 
 		/* note; the way it gets 32 bits rects is weak... */
 		if (ibuf->rect == NULL) {
 			ibuf->rect = MEM_mapallocN(sizeof(int) * rres.rectx * rres.recty, "temp 32 bits rect");
 			ibuf->mall |= IB_rect;
-			RE_AcquiredResultGet32(re, &rres, ibuf->rect);
+			RE_AcquiredResultGet32(re, &rres, ibuf->rect, 0);
 			do_free = true;
 		}
 
@@ -3193,7 +3193,7 @@ static int do_write_image_or_movie(Render *re, Main *bmain, Scene *scene, bMovie
 			}
 		}
 		else {
-			ImBuf *ibuf = render_result_rect_to_ibuf(&rres, &scene->r);
+			ImBuf *ibuf = render_result_rect_to_ibuf(&rres, &scene->r, view_id);
 
 			IMB_colormanagement_imbuf_for_write(ibuf, true, false, &scene->view_settings,
 			                                    &scene->display_settings, &scene->r.im_format);
diff --git a/source/blender/render/intern/source/render_result.c b/source/blender/render/intern/source/render_result.c
index 1045878..5184658 100644
--- a/source/blender/render/intern/source/render_result.c
+++ b/source/blender/render/intern/source/render_result.c
@@ -1408,14 +1408,14 @@ bool render_result_exr_file_cache_read(Render *re)
 
 /*************************** Combined Pixel Rect *****************************/
 
-ImBuf *render_result_rect_to_ibuf(RenderResult *rr, RenderData *rd)
+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);
 	
 	/* if not exists, BKE_imbuf_write makes one */
-	ibuf->rect = (unsigned int *)rr->rect32;
-	ibuf->rect_float = rr->rectf;
-	ibuf->zbuf_float = rr->rectz;
+	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);
 	
 	/* float factor for random dither, imbuf takes care of it */
 	ibuf->dither = rd->dither_intensity;
@@ -1491,13 +1491,16 @@ void render_result_rect_fill_zero(RenderResult *rr)
 }
 
 void render_result_rect_get_pixels(RenderResult *rr, unsigned int *rect, int rectx, int recty,
-                                   const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings)
+                                   const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings,
+                                   const int view_id)
 {
 	if (rr->rect32) {
-		memcpy(rect, rr->rect32, sizeof(int) * rr->rectx * rr->recty);
+		int *rect32 = RE_RenderViewGetRect32(rr, view_id);
+		memcpy(rect, (rect32 ? rect32 : rr->rect32), sizeof(int) * rr->rectx * rr->recty);
 	}
 	else if (rr->rectf) {
-		IMB_display_buffer_transform_apply((unsigned char *) rect, rr->rectf, rr->rectx, rr->recty, 4,
+		float *rectf = RE_RenderViewGetRectf(rr, view_id);
+		IMB_display_buffer_transform_apply((unsigned char *) rect, (rectf ? rectf : rr->rectf), rr->rectx, rr->recty, 4,
 		                                   view_settings, display_settings, true);
 	}
 	else




More information about the Bf-blender-cvs mailing list