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

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to