[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