diff options
Diffstat (limited to 'source/blender/render/intern/pipeline.cc')
-rw-r--r-- | source/blender/render/intern/pipeline.cc | 113 |
1 files changed, 40 insertions, 73 deletions
diff --git a/source/blender/render/intern/pipeline.cc b/source/blender/render/intern/pipeline.cc index d2929a7f6ea..17cf3b7ff74 100644 --- a/source/blender/render/intern/pipeline.cc +++ b/source/blender/render/intern/pipeline.cc @@ -177,7 +177,7 @@ static void stats_nothing(void * /*arg*/, RenderStats * /*rs*/) static void float_nothing(void * /*arg*/, float /*val*/) { } -static int default_break(void * /*arg*/) +static bool default_break(void * /*arg*/) { return G.is_break == true; } @@ -261,13 +261,10 @@ RenderResult *RE_MultilayerConvert( return render_result_new_from_exr(exrhandle, colorspace, predivide, rectx, recty); } -RenderLayer *render_get_active_layer(Render *re, RenderResult *rr) +RenderLayer *render_get_single_layer(Render *re, RenderResult *rr) { - ViewLayer *view_layer = static_cast<ViewLayer *>( - BLI_findlink(&re->view_layers, re->active_view_layer)); - - if (view_layer) { - RenderLayer *rl = RE_GetRenderLayer(rr, view_layer->name); + if (re->single_view_layer[0]) { + RenderLayer *rl = RE_GetRenderLayer(rr, re->single_view_layer); if (rl) { return rl; @@ -385,8 +382,8 @@ void RE_AcquireResultImageViews(Render *re, RenderResult *rr) RenderView *rv = static_cast<RenderView *>(rr->views.first); rr->have_combined = (rv->rectf != nullptr); - /* active layer */ - RenderLayer *rl = render_get_active_layer(re, re->result); + /* single layer */ + RenderLayer *rl = render_get_single_layer(re, re->result); if (rl) { if (rv->rectf == nullptr) { @@ -443,7 +440,7 @@ void RE_AcquireResultImage(Render *re, RenderResult *rr, const int view_id) rr->rect32 = rv->rect32; /* active layer */ - rl = render_get_active_layer(re, re->result); + rl = render_get_single_layer(re, re->result); if (rl) { if (rv->rectf == nullptr) { @@ -583,9 +580,6 @@ void RE_FreeRender(Render *re) BLI_mutex_end(&re->engine_draw_mutex); BLI_mutex_end(&re->highlighted_tiles_mutex); - BLI_freelistN(&re->view_layers); - BLI_freelistN(&re->r.views); - BKE_curvemapping_free_data(&re->r.mblur_shutter_curve); if (re->highlighted_tiles != nullptr) { @@ -705,19 +699,18 @@ static void re_init_resolution(Render *re, Render *source, int winx, int winy, r void render_copy_renderdata(RenderData *to, RenderData *from) { - BLI_freelistN(&to->views); + /* Mostly shallow copy referencing pointers in scene renderdata. */ BKE_curvemapping_free_data(&to->mblur_shutter_curve); memcpy(to, from, sizeof(*to)); - BLI_duplicatelist(&to->views, &from->views); BKE_curvemapping_copy_data(&to->mblur_shutter_curve, &from->mblur_shutter_curve); } void RE_InitState(Render *re, Render *source, RenderData *rd, - ListBase *render_layers, + ListBase * /*render_layers*/, ViewLayer *single_layer, int winx, int winy, @@ -731,9 +724,7 @@ void RE_InitState(Render *re, /* copy render data and render layers for thread safety */ render_copy_renderdata(&re->r, rd); - BLI_freelistN(&re->view_layers); - BLI_duplicatelist(&re->view_layers, render_layers); - re->active_view_layer = 0; + re->single_view_layer[0] = '\0'; if (source) { /* reuse border flags from source renderer */ @@ -757,16 +748,13 @@ void RE_InitState(Render *re, if (re->rectx < 1 || re->recty < 1 || (BKE_imtype_is_movie(rd->im_format.imtype) && (re->rectx < 16 || re->recty < 16))) { BKE_report(re->reports, RPT_ERROR, "Image too small"); - re->ok = 0; + re->ok = false; return; } if (single_layer) { - int index = BLI_findindex(render_layers, single_layer); - if (index != -1) { - re->active_view_layer = index; - re->r.scemode |= R_SINGLE_LAYER; - } + STRNCPY(re->single_view_layer, single_layer->name); + re->r.scemode |= R_SINGLE_LAYER; } /* if preview render, we try to keep old result */ @@ -779,13 +767,16 @@ void RE_InitState(Render *re, re->result = nullptr; } else if (re->result) { - ViewLayer *active_render_layer = static_cast<ViewLayer *>( - BLI_findlink(&re->view_layers, re->active_view_layer)); bool have_layer = false; - LISTBASE_FOREACH (RenderLayer *, rl, &re->result->layers) { - if (STREQ(rl->name, active_render_layer->name)) { - have_layer = true; + if (re->single_view_layer[0] == '\0' && re->result->layers.first) { + have_layer = true; + } + else { + LISTBASE_FOREACH (RenderLayer *, rl, &re->result->layers) { + if (STREQ(rl->name, re->single_view_layer)) { + have_layer = true; + } } } @@ -817,27 +808,6 @@ void RE_InitState(Render *re, RE_point_density_fix_linking(); } -void render_update_anim_renderdata(Render *re, RenderData *rd, ListBase *render_layers) -{ - /* filter */ - re->r.gauss = rd->gauss; - - /* motion blur */ - re->r.blurfac = rd->blurfac; - - /* freestyle */ - re->r.line_thickness_mode = rd->line_thickness_mode; - re->r.unit_line_thickness = rd->unit_line_thickness; - - /* render layers */ - BLI_freelistN(&re->view_layers); - BLI_duplicatelist(&re->view_layers, render_layers); - - /* render views */ - BLI_freelistN(&re->r.views); - BLI_duplicatelist(&re->r.views, &rd->views); -} - void RE_display_init_cb(Render *re, void *handle, void (*f)(void *handle, RenderResult *rr)) { re->display_init = f; @@ -877,7 +847,7 @@ void RE_draw_lock_cb(Render *re, void *handle, void (*f)(void *handle, bool lock re->dlh = handle; } -void RE_test_break_cb(Render *re, void *handle, int (*f)(void *handle)) +void RE_test_break_cb(Render *re, void *handle, bool (*f)(void *handle)) { re->test_break = f; re->tbh = handle; @@ -979,7 +949,7 @@ static void render_result_uncrop(Render *re) re->result = rres; /* Weak, the display callback wants an active render-layer pointer. */ - re->result->renlay = render_get_active_layer(re, re->result); + re->result->renlay = render_get_single_layer(re, re->result); BLI_rw_mutex_unlock(&re->resultmutex); @@ -1217,7 +1187,7 @@ static void do_render_compositor(Render *re) /* Weak: the display callback wants an active render-layer pointer. */ if (re->result != nullptr) { - re->result->renlay = render_get_active_layer(re, re->result); + re->result->renlay = render_get_single_layer(re, re->result); re->display_update(re->duh, re->result, nullptr); } } @@ -1635,15 +1605,15 @@ const char *RE_GetActiveRenderView(Render *re) return re->viewname; } -/* evaluating scene options for general Blender render */ -static int render_init_from_main(Render *re, - const RenderData *rd, - Main *bmain, - Scene *scene, - ViewLayer *single_layer, - Object *camera_override, - int anim, - int anim_init) +/** Evaluating scene options for general Blender render. */ +static bool render_init_from_main(Render *re, + const RenderData *rd, + Main *bmain, + Scene *scene, + ViewLayer *single_layer, + Object *camera_override, + int anim, + int anim_init) { int winx, winy; rcti disprect; @@ -1676,9 +1646,8 @@ static int render_init_from_main(Render *re, /* not too nice, but it survives anim-border render */ if (anim) { - render_update_anim_renderdata(re, &scene->r, &scene->view_layers); re->disprect = disprect; - return 1; + return true; } /* @@ -1700,7 +1669,7 @@ static int render_init_from_main(Render *re, RE_InitState(re, nullptr, &scene->r, &scene->view_layers, single_layer, winx, winy, &disprect); if (!re->ok) { /* if an error was printed, abort */ - return 0; + return false; } /* initstate makes new result, have to send changed tags around */ @@ -1709,7 +1678,7 @@ static int render_init_from_main(Render *re, re->display_init(re->dih, re->result); re->display_clear(re->dch, re->result); - return 1; + return true; } void RE_SetReports(Render *re, ReportList *reports) @@ -1862,7 +1831,7 @@ static bool use_eevee_for_freestyle_render(Render *re) void RE_RenderFreestyleStrokes(Render *re, Main *bmain, Scene *scene, int render) { - re->result_ok = 0; + re->result_ok = false; if (render_init_from_main(re, &scene->r, bmain, scene, nullptr, nullptr, 0, 0)) { if (render) { char scene_engine[32]; @@ -1876,7 +1845,7 @@ void RE_RenderFreestyleStrokes(Render *re, Main *bmain, Scene *scene, int render change_renderdata_engine(re, scene_engine); } } - re->result_ok = 1; + re->result_ok = true; } void RE_RenderFreestyleExternal(Render *re) @@ -1890,12 +1859,10 @@ void RE_RenderFreestyleExternal(Render *re) LISTBASE_FOREACH (RenderView *, rv, &re->result->views) { RE_SetActiveRenderView(re, rv->name); - ViewLayer *active_view_layer = static_cast<ViewLayer *>( - BLI_findlink(&re->view_layers, re->active_view_layer)); FRS_begin_stroke_rendering(re); - LISTBASE_FOREACH (ViewLayer *, view_layer, &re->view_layers) { - if ((re->r.scemode & R_SINGLE_LAYER) && view_layer != active_view_layer) { + LISTBASE_FOREACH (ViewLayer *, view_layer, &re->scene->view_layers) { + if ((re->r.scemode & R_SINGLE_LAYER) && !STREQ(view_layer->name, re->single_view_layer)) { continue; } |