Changeset View
Changeset View
Standalone View
Standalone View
source/blender/render/intern/source/pipeline.c
| Show First 20 Lines • Show All 654 Lines • ▼ Show 20 Lines | if (re->engine) { | ||||
| re->engine = NULL; | re->engine = NULL; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| /* ********* initialize state ******** */ | /* ********* initialize state ******** */ | ||||
| /* clear full sample and tile flags if needed */ | /* clear full sample and tile flags if needed */ | ||||
| static int check_mode_full_sample(RenderData *rd) | static int check_mode_full_sample(RenderData *rd, ViewRender *view_render) | ||||
| { | { | ||||
| const char *engine_id = view_render->engine_id; | |||||
| int scemode = rd->scemode; | int scemode = rd->scemode; | ||||
| if (!STREQ(rd->engine, RE_engine_id_BLENDER_RENDER) && | if (!STREQ(engine_id, RE_engine_id_BLENDER_RENDER) && | ||||
| !STREQ(rd->engine, RE_engine_id_BLENDER_GAME)) | !STREQ(engine_id, RE_engine_id_BLENDER_GAME)) | ||||
| { | { | ||||
| scemode &= ~R_FULL_SAMPLE; | scemode &= ~R_FULL_SAMPLE; | ||||
| } | } | ||||
| if ((rd->mode & R_OSA) == 0) | if ((rd->mode & R_OSA) == 0) | ||||
| scemode &= ~R_FULL_SAMPLE; | scemode &= ~R_FULL_SAMPLE; | ||||
| #ifdef WITH_OPENEXR | #ifdef WITH_OPENEXR | ||||
| ▲ Show 20 Lines • Show All 56 Lines • ▼ Show 20 Lines | void render_copy_renderdata(RenderData *to, RenderData *from) | ||||
| *to = *from; | *to = *from; | ||||
| BLI_duplicatelist(&to->layers, &from->layers); | BLI_duplicatelist(&to->layers, &from->layers); | ||||
| BLI_duplicatelist(&to->views, &from->views); | BLI_duplicatelist(&to->views, &from->views); | ||||
| curvemapping_copy_data(&to->mblur_shutter_curve, &from->mblur_shutter_curve); | curvemapping_copy_data(&to->mblur_shutter_curve, &from->mblur_shutter_curve); | ||||
| } | } | ||||
| void render_copy_viewrender(ViewRender *to, ViewRender *from) | |||||
| { | |||||
| BKE_viewrender_copy(to, from); | |||||
| } | |||||
| /* what doesn't change during entire render sequence */ | /* what doesn't change during entire render sequence */ | ||||
| /* disprect is optional, if NULL it assumes full window render */ | /* disprect is optional, if NULL it assumes full window render */ | ||||
| void RE_InitState(Render *re, Render *source, RenderData *rd, | void RE_InitState(Render *re, Render *source, RenderData *rd, | ||||
| SceneRenderLayer *srl, | ViewRender *view_render, SceneRenderLayer *srl, | ||||
| int winx, int winy, rcti *disprect) | int winx, int winy, rcti *disprect) | ||||
| { | { | ||||
| bool had_freestyle = (re->r.mode & R_EDGE_FRS) != 0; | bool had_freestyle = (re->r.mode & R_EDGE_FRS) != 0; | ||||
| re->ok = true; /* maybe flag */ | re->ok = true; /* maybe flag */ | ||||
| re->i.starttime = PIL_check_seconds_timer(); | re->i.starttime = PIL_check_seconds_timer(); | ||||
| /* copy render data and render layers for thread safety */ | /* copy render data and render layers for thread safety */ | ||||
| render_copy_renderdata(&re->r, rd); | render_copy_renderdata(&re->r, rd); | ||||
| render_copy_viewrender(&re->view_render, view_render); | |||||
| if (source) { | if (source) { | ||||
| /* reuse border flags from source renderer */ | /* reuse border flags from source renderer */ | ||||
| re->r.mode &= ~(R_BORDER | R_CROP); | re->r.mode &= ~(R_BORDER | R_CROP); | ||||
| re->r.mode |= source->r.mode & (R_BORDER | R_CROP); | re->r.mode |= source->r.mode & (R_BORDER | R_CROP); | ||||
| /* dimensions shall be shared between all renderers */ | /* dimensions shall be shared between all renderers */ | ||||
| re->r.xsch = source->r.xsch; | re->r.xsch = source->r.xsch; | ||||
| Show All 13 Lines | void RE_InitState(Render *re, Render *source, RenderData *rd, | ||||
| if (re->rectx < 1 || re->recty < 1 || (BKE_imtype_is_movie(rd->im_format.imtype) && | if (re->rectx < 1 || re->recty < 1 || (BKE_imtype_is_movie(rd->im_format.imtype) && | ||||
| (re->rectx < 16 || re->recty < 16) )) | (re->rectx < 16 || re->recty < 16) )) | ||||
| { | { | ||||
| BKE_report(re->reports, RPT_ERROR, "Image too small"); | BKE_report(re->reports, RPT_ERROR, "Image too small"); | ||||
| re->ok = 0; | re->ok = 0; | ||||
| return; | return; | ||||
| } | } | ||||
| re->r.scemode = check_mode_full_sample(&re->r); | re->r.scemode = check_mode_full_sample(&re->r, &re->view_render); | ||||
| /* fullsample wants uniform osa levels */ | /* fullsample wants uniform osa levels */ | ||||
| if (source && (re->r.scemode & R_FULL_SAMPLE)) { | if (source && (re->r.scemode & R_FULL_SAMPLE)) { | ||||
| /* but, if source has no full sample we disable it */ | /* but, if source has no full sample we disable it */ | ||||
| if ((source->r.scemode & R_FULL_SAMPLE) == 0) | if ((source->r.scemode & R_FULL_SAMPLE) == 0) | ||||
| re->r.scemode &= ~R_FULL_SAMPLE; | re->r.scemode &= ~R_FULL_SAMPLE; | ||||
| else | else | ||||
| re->r.osa = re->osa = source->osa; | re->r.osa = re->osa = source->osa; | ||||
| ▲ Show 20 Lines • Show All 1,170 Lines • ▼ Show 20 Lines | static void render_scene(Render *re, Scene *sce, int cfra) | ||||
| /* exception: scene uses own size (unfinished code) */ | /* exception: scene uses own size (unfinished code) */ | ||||
| if (0) { | if (0) { | ||||
| winx = (sce->r.size * sce->r.xsch) / 100; | winx = (sce->r.size * sce->r.xsch) / 100; | ||||
| winy = (sce->r.size * sce->r.ysch) / 100; | winy = (sce->r.size * sce->r.ysch) / 100; | ||||
| } | } | ||||
| /* initial setup */ | /* initial setup */ | ||||
| RE_InitState(resc, re, &sce->r, NULL, winx, winy, &re->disprect); | RE_InitState(resc, re, &sce->r, &sce->view_render, NULL, winx, winy, &re->disprect); | ||||
| /* We still want to use 'rendercache' setting from org (main) scene... */ | /* We still want to use 'rendercache' setting from org (main) scene... */ | ||||
| resc->r.scemode = (resc->r.scemode & ~R_EXR_CACHE_FILE) | (re->r.scemode & R_EXR_CACHE_FILE); | resc->r.scemode = (resc->r.scemode & ~R_EXR_CACHE_FILE) | (re->r.scemode & R_EXR_CACHE_FILE); | ||||
| /* still unsure entity this... */ | /* still unsure entity this... */ | ||||
| resc->main = re->main; | resc->main = re->main; | ||||
| resc->depsgraph = re->depsgraph; | resc->depsgraph = re->depsgraph; | ||||
| resc->scene = sce; | resc->scene = sce; | ||||
| ▲ Show 20 Lines • Show All 73 Lines • ▼ Show 20 Lines | |||||
| * properly without hacks from their side. | * properly without hacks from their side. | ||||
| * - sergey - | * - sergey - | ||||
| */ | */ | ||||
| #define DEPSGRAPH_WORKAROUND_HACK | #define DEPSGRAPH_WORKAROUND_HACK | ||||
| #ifdef DEPSGRAPH_WORKAROUND_HACK | #ifdef DEPSGRAPH_WORKAROUND_HACK | ||||
| static void tag_dependend_objects_for_render(Scene *scene, int UNUSED(renderlay)) | static void tag_dependend_objects_for_render(Scene *scene, int UNUSED(renderlay)) | ||||
| { | { | ||||
| Scene *sce_iter; | FOREACH_OBJECT_RENDERABLE(scene, object) | ||||
| Base *base; | { | ||||
| for (SETLOOPER(scene, sce_iter, base)) { | |||||
| Object *object = base->object; | |||||
| if ((base->flag & BASE_VISIBLED) == 0) { | |||||
| continue; | |||||
| } | |||||
| if (object->type == OB_MESH) { | if (object->type == OB_MESH) { | ||||
| if (RE_allow_render_generic_object(object)) { | if (RE_allow_render_generic_object(object)) { | ||||
| ModifierData *md; | ModifierData *md; | ||||
| VirtualModifierData virtualModifierData; | VirtualModifierData virtualModifierData; | ||||
| for (md = modifiers_getVirtualModifierList(object, &virtualModifierData); | for (md = modifiers_getVirtualModifierList(object, &virtualModifierData); | ||||
| md; | md; | ||||
| md = md->next) | md = md->next) | ||||
| Show All 22 Lines | if (object->type == OB_MESH) { | ||||
| if (smd->target && smd->target->type == OB_MESH) { | if (smd->target && smd->target->type == OB_MESH) { | ||||
| DEG_id_tag_update(&smd->target->id, OB_RECALC_DATA); | DEG_id_tag_update(&smd->target->id, OB_RECALC_DATA); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| FOREACH_OBJECT_RENDERABLE_END | |||||
| } | } | ||||
| #endif | #endif | ||||
| static void tag_scenes_for_render(Render *re) | static void tag_scenes_for_render(Render *re) | ||||
| { | { | ||||
| bNode *node; | bNode *node; | ||||
| Scene *sce; | Scene *sce; | ||||
| #ifdef DEPSGRAPH_WORKAROUND_HACK | #ifdef DEPSGRAPH_WORKAROUND_HACK | ||||
| ▲ Show 20 Lines • Show All 754 Lines • ▼ Show 20 Lines | if ((re->r.stamp & R_STAMP_ALL) && (re->r.stamp & R_STAMP_DRAW)) { | ||||
| renderresult_stampinfo(re); | renderresult_stampinfo(re); | ||||
| re->display_update(re->duh, re->result, NULL); | re->display_update(re->duh, re->result, NULL); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| bool RE_force_single_renderlayer(Scene *scene) | bool RE_force_single_renderlayer(Scene *scene) | ||||
| { | { | ||||
| int scemode = check_mode_full_sample(&scene->r); | int scemode = check_mode_full_sample(&scene->r, &scene->view_render); | ||||
| if (scemode & R_SINGLE_LAYER) { | if (scemode & R_SINGLE_LAYER) { | ||||
| SceneRenderLayer *srl = BLI_findlink(&scene->r.layers, scene->r.actlay); | SceneRenderLayer *srl = BLI_findlink(&scene->r.layers, scene->r.actlay); | ||||
| /* force layer to be enabled */ | /* force layer to be enabled */ | ||||
| if (srl->layflag & SCE_LAY_DISABLE) { | if (srl->layflag & SCE_LAY_DISABLE) { | ||||
| srl->layflag &= ~SCE_LAY_DISABLE; | srl->layflag &= ~SCE_LAY_DISABLE; | ||||
| return true; | return true; | ||||
| } | } | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 130 Lines • ▼ Show 20 Lines | |||||
| static int check_composite_output(Scene *scene) | static int check_composite_output(Scene *scene) | ||||
| { | { | ||||
| return node_tree_has_composite_output(scene->nodetree); | return node_tree_has_composite_output(scene->nodetree); | ||||
| } | } | ||||
| bool RE_is_rendering_allowed(Scene *scene, Object *camera_override, ReportList *reports) | bool RE_is_rendering_allowed(Scene *scene, Object *camera_override, ReportList *reports) | ||||
| { | { | ||||
| int scemode = check_mode_full_sample(&scene->r); | int scemode = check_mode_full_sample(&scene->r, &scene->view_render); | ||||
| if (scene->r.mode & R_BORDER) { | if (scene->r.mode & R_BORDER) { | ||||
| if (scene->r.border.xmax <= scene->r.border.xmin || | if (scene->r.border.xmax <= scene->r.border.xmin || | ||||
| scene->r.border.ymax <= scene->r.border.ymin) | scene->r.border.ymax <= scene->r.border.ymin) | ||||
| { | { | ||||
| BKE_report(reports, RPT_ERROR, "No border area selected"); | BKE_report(reports, RPT_ERROR, "No border area selected"); | ||||
| return 0; | return 0; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 96 Lines • ▼ Show 20 Lines | static void validate_render_settings(Render *re) | ||||
| if (RE_engine_is_external(re)) { | if (RE_engine_is_external(re)) { | ||||
| /* not supported yet */ | /* not supported yet */ | ||||
| re->r.scemode &= ~(R_FULL_SAMPLE); | re->r.scemode &= ~(R_FULL_SAMPLE); | ||||
| re->r.mode &= ~(R_FIELDS | R_MBLUR); | re->r.mode &= ~(R_FIELDS | R_MBLUR); | ||||
| } | } | ||||
| } | } | ||||
| static void update_physics_cache(Render *re, Scene *scene, int UNUSED(anim_init)) | static void update_physics_cache(Render *re, Scene *scene, SceneLayer *scene_layer, int UNUSED(anim_init)) | ||||
| { | { | ||||
| PTCacheBaker baker; | PTCacheBaker baker; | ||||
| memset(&baker, 0, sizeof(baker)); | memset(&baker, 0, sizeof(baker)); | ||||
| baker.main = re->main; | baker.main = re->main; | ||||
| baker.scene = scene; | baker.scene = scene; | ||||
| baker.scene_layer = scene_layer; | |||||
| baker.bake = 0; | baker.bake = 0; | ||||
| baker.render = 1; | baker.render = 1; | ||||
| baker.anim_init = 1; | baker.anim_init = 1; | ||||
| baker.quick_step = 1; | baker.quick_step = 1; | ||||
| BKE_ptcache_bake(&baker); | BKE_ptcache_bake(&baker); | ||||
| } | } | ||||
| void RE_SetActiveRenderView(Render *re, const char *viewname) | void RE_SetActiveRenderView(Render *re, const char *viewname) | ||||
| { | { | ||||
| BLI_strncpy(re->viewname, viewname, sizeof(re->viewname)); | BLI_strncpy(re->viewname, viewname, sizeof(re->viewname)); | ||||
| } | } | ||||
| const char *RE_GetActiveRenderView(Render *re) | const char *RE_GetActiveRenderView(Render *re) | ||||
| { | { | ||||
| return re->viewname; | return re->viewname; | ||||
| } | } | ||||
| void RE_SetEngineByID(Render *re, const char *engine_id) | |||||
| { | |||||
| BLI_strncpy(re->view_render.engine_id, engine_id, sizeof(re->view_render.engine_id)); | |||||
| } | |||||
| /* evaluating scene options for general Blender render */ | /* evaluating scene options for general Blender render */ | ||||
| static int render_initialize_from_main(Render *re, RenderData *rd, Main *bmain, Scene *scene, SceneRenderLayer *srl, | static int render_initialize_from_main(Render *re, RenderData *rd, Main *bmain, Scene *scene, ViewRender *view_render, | ||||
| Object *camera_override, unsigned int lay_override, int anim, int anim_init) | SceneRenderLayer *srl, Object *camera_override, unsigned int lay_override, | ||||
| int anim, int anim_init) | |||||
| { | { | ||||
| int winx, winy; | int winx, winy; | ||||
| rcti disprect; | rcti disprect; | ||||
| /* r.xsch and r.ysch has the actual view window size | /* r.xsch and r.ysch has the actual view window size | ||||
| * r.border is the clipping rect */ | * r.border is the clipping rect */ | ||||
| /* calculate actual render result and display size */ | /* calculate actual render result and display size */ | ||||
| Show All 17 Lines | static int render_initialize_from_main(Render *re, RenderData *rd, Main *bmain, Scene *scene, ViewRender *view_render, | ||||
| re->main = bmain; | re->main = bmain; | ||||
| re->scene = scene; | re->scene = scene; | ||||
| re->scene_color_manage = BKE_scene_check_color_management_enabled(scene); | re->scene_color_manage = BKE_scene_check_color_management_enabled(scene); | ||||
| re->camera_override = camera_override; | re->camera_override = camera_override; | ||||
| re->lay = lay_override ? lay_override : scene->lay; | re->lay = lay_override ? lay_override : scene->lay; | ||||
| re->layer_override = lay_override; | re->layer_override = lay_override; | ||||
| re->i.localview = (re->lay & 0xFF000000) != 0; | re->i.localview = (re->lay & 0xFF000000) != 0; | ||||
| re->viewname[0] = '\0'; | re->viewname[0] = '\0'; | ||||
| RE_SetEngineByID(re, view_render->engine_id); | |||||
| /* not too nice, but it survives anim-border render */ | /* not too nice, but it survives anim-border render */ | ||||
| if (anim) { | if (anim) { | ||||
| render_update_anim_renderdata(re, &scene->r); | render_update_anim_renderdata(re, &scene->r); | ||||
| re->disprect = disprect; | re->disprect = disprect; | ||||
| return 1; | return 1; | ||||
| } | } | ||||
| /* check all scenes involved */ | /* check all scenes involved */ | ||||
| tag_scenes_for_render(re); | tag_scenes_for_render(re); | ||||
| /* | /* | ||||
| * Disabled completely for now, | * Disabled completely for now, | ||||
| * can be later set as render profile option | * can be later set as render profile option | ||||
| * and default for background render. | * and default for background render. | ||||
| */ | */ | ||||
| if (0) { | if (0) { | ||||
| /* make sure dynamics are up to date */ | /* make sure dynamics are up to date */ | ||||
| update_physics_cache(re, scene, anim_init); | SceneLayer *scene_layer = BKE_scene_layer_from_scene_get(scene); | ||||
| update_physics_cache(re, scene, scene_layer, anim_init); | |||||
| } | } | ||||
| if (srl || scene->r.scemode & R_SINGLE_LAYER) { | if (srl || scene->r.scemode & R_SINGLE_LAYER) { | ||||
| BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE); | BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE); | ||||
| render_result_single_layer_begin(re); | render_result_single_layer_begin(re); | ||||
| BLI_rw_mutex_unlock(&re->resultmutex); | BLI_rw_mutex_unlock(&re->resultmutex); | ||||
| } | } | ||||
| RE_InitState(re, NULL, &scene->r, srl, winx, winy, &disprect); | RE_InitState(re, NULL, &scene->r, &scene->view_render, srl, winx, winy, &disprect); | ||||
| if (!re->ok) /* if an error was printed, abort */ | if (!re->ok) /* if an error was printed, abort */ | ||||
| return 0; | return 0; | ||||
| /* initstate makes new result, have to send changed tags around */ | /* initstate makes new result, have to send changed tags around */ | ||||
| ntreeCompositTagRender(re->scene); | ntreeCompositTagRender(re->scene); | ||||
| validate_render_settings(re); | validate_render_settings(re); | ||||
| Show All 14 Lines | |||||
| { | { | ||||
| BLI_callback_exec(re->main, (ID *)scene, BLI_CB_EVT_RENDER_INIT); | BLI_callback_exec(re->main, (ID *)scene, BLI_CB_EVT_RENDER_INIT); | ||||
| /* ugly global still... is to prevent preview events and signal subsurfs etc to make full resol */ | /* ugly global still... is to prevent preview events and signal subsurfs etc to make full resol */ | ||||
| G.is_rendering = true; | G.is_rendering = true; | ||||
| scene->r.cfra = frame; | scene->r.cfra = frame; | ||||
| if (render_initialize_from_main(re, &scene->r, bmain, scene, srl, camera_override, lay_override, 0, 0)) { | if (render_initialize_from_main(re, &scene->r, bmain, scene, &scene->view_render, srl, | ||||
| camera_override, lay_override, 0, 0)) | |||||
| { | |||||
| MEM_reset_peak_memory(); | MEM_reset_peak_memory(); | ||||
| BLI_callback_exec(re->main, (ID *)scene, BLI_CB_EVT_RENDER_PRE); | BLI_callback_exec(re->main, (ID *)scene, BLI_CB_EVT_RENDER_PRE); | ||||
| do_render_all_options(re); | do_render_all_options(re); | ||||
| if (write_still && !G.is_break) { | if (write_still && !G.is_break) { | ||||
| if (BKE_imtype_is_movie(scene->r.im_format.imtype)) { | if (BKE_imtype_is_movie(scene->r.im_format.imtype)) { | ||||
| Show All 22 Lines | void RE_BlenderFrame(Render *re, Main *bmain, Scene *scene, SceneRenderLayer *srl, Object *camera_override, | ||||
| /* UGLY WARNING */ | /* UGLY WARNING */ | ||||
| G.is_rendering = false; | G.is_rendering = false; | ||||
| } | } | ||||
| #ifdef WITH_FREESTYLE | #ifdef WITH_FREESTYLE | ||||
| void RE_RenderFreestyleStrokes(Render *re, Main *bmain, Scene *scene, int render) | void RE_RenderFreestyleStrokes(Render *re, Main *bmain, Scene *scene, int render) | ||||
| { | { | ||||
| re->result_ok= 0; | re->result_ok= 0; | ||||
| if (render_initialize_from_main(re, &scene->r, bmain, scene, NULL, NULL, scene->lay, 0, 0)) { | if (render_initialize_from_main(re, &scene->r, bmain, scene, &scene->view_render, NULL, NULL, scene->lay, 0, 0)) { | ||||
| if (render) | if (render) | ||||
| do_render_fields_blur_3d(re); | do_render_fields_blur_3d(re); | ||||
| } | } | ||||
| re->result_ok = 1; | re->result_ok = 1; | ||||
| } | } | ||||
| void RE_RenderFreestyleExternal(Render *re) | void RE_RenderFreestyleExternal(Render *re) | ||||
| { | { | ||||
| ▲ Show 20 Lines • Show All 281 Lines • ▼ Show 20 Lines | void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_override, | ||||
| const int totvideos = BKE_scene_multiview_num_videos_get(&rd); | const int totvideos = BKE_scene_multiview_num_videos_get(&rd); | ||||
| const bool is_movie = BKE_imtype_is_movie(scene->r.im_format.imtype); | const bool is_movie = BKE_imtype_is_movie(scene->r.im_format.imtype); | ||||
| const bool is_multiview_name = ((scene->r.scemode & R_MULTIVIEW) != 0 && | const bool is_multiview_name = ((scene->r.scemode & R_MULTIVIEW) != 0 && | ||||
| (scene->r.im_format.views_format == R_IMF_VIEWS_INDIVIDUAL)); | (scene->r.im_format.views_format == R_IMF_VIEWS_INDIVIDUAL)); | ||||
| BLI_callback_exec(re->main, (ID *)scene, BLI_CB_EVT_RENDER_INIT); | BLI_callback_exec(re->main, (ID *)scene, BLI_CB_EVT_RENDER_INIT); | ||||
| /* do not fully call for each frame, it initializes & pops output window */ | /* do not fully call for each frame, it initializes & pops output window */ | ||||
| if (!render_initialize_from_main(re, &rd, bmain, scene, NULL, camera_override, lay_override, 0, 1)) | if (!render_initialize_from_main(re, &rd, bmain, scene, &scene->view_render, NULL, camera_override, lay_override, 0, 1)) | ||||
| return; | return; | ||||
| /* MULTIVIEW_TODO: | /* MULTIVIEW_TODO: | ||||
| * in case a new video format is added that implements get_next_frame multiview has to be addressed | * in case a new video format is added that implements get_next_frame multiview has to be addressed | ||||
| * or the error throwing for R_IMF_IMTYPE_FRAMESERVER has to be extended for those cases as well | * or the error throwing for R_IMF_IMTYPE_FRAMESERVER has to be extended for those cases as well | ||||
| */ | */ | ||||
| if ((rd.im_format.imtype == R_IMF_IMTYPE_FRAMESERVER) && (totvideos > 1)) { | if ((rd.im_format.imtype == R_IMF_IMTYPE_FRAMESERVER) && (totvideos > 1)) { | ||||
| BKE_report(re->reports, RPT_ERROR, "Frame Server only support stereo output for multiview rendering"); | BKE_report(re->reports, RPT_ERROR, "Frame Server only support stereo output for multiview rendering"); | ||||
| ▲ Show 20 Lines • Show All 73 Lines • ▼ Show 20 Lines | for (nfra = sfra, scene->r.cfra = sfra; scene->r.cfra <= efra; scene->r.cfra++) { | ||||
| */ | */ | ||||
| { | { | ||||
| float ctime = BKE_scene_frame_get(scene); | float ctime = BKE_scene_frame_get(scene); | ||||
| AnimData *adt = BKE_animdata_from_id(&scene->id); | AnimData *adt = BKE_animdata_from_id(&scene->id); | ||||
| BKE_animsys_evaluate_animdata(scene, &scene->id, adt, ctime, ADT_RECALC_ALL); | BKE_animsys_evaluate_animdata(scene, &scene->id, adt, ctime, ADT_RECALC_ALL); | ||||
| } | } | ||||
| /* only border now, todo: camera lens. (ton) */ | /* only border now, todo: camera lens. (ton) */ | ||||
| render_initialize_from_main(re, &rd, bmain, scene, NULL, camera_override, lay_override, 1, 0); | render_initialize_from_main(re, &rd, bmain, scene, &scene->view_render, | ||||
| NULL, camera_override, lay_override, 1, 0); | |||||
| if (nfra != scene->r.cfra) { | if (nfra != scene->r.cfra) { | ||||
| /* Skip this frame, but update for physics and particles system. */ | /* Skip this frame, but update for physics and particles system. */ | ||||
| BKE_scene_update_for_newframe(re->eval_ctx, bmain, scene); | BKE_scene_update_for_newframe(re->eval_ctx, bmain, scene); | ||||
| continue; | continue; | ||||
| } | } | ||||
| else | else | ||||
| nfra += tfra; | nfra += tfra; | ||||
| ▲ Show 20 Lines • Show All 133 Lines • ▼ Show 20 Lines | void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_override, | ||||
| BLI_callback_exec(re->main, (ID *)scene, G.is_break ? BLI_CB_EVT_RENDER_CANCEL : BLI_CB_EVT_RENDER_COMPLETE); | BLI_callback_exec(re->main, (ID *)scene, G.is_break ? BLI_CB_EVT_RENDER_CANCEL : BLI_CB_EVT_RENDER_COMPLETE); | ||||
| BKE_sound_reset_scene_specs(scene); | BKE_sound_reset_scene_specs(scene); | ||||
| /* UGLY WARNING */ | /* UGLY WARNING */ | ||||
| G.is_rendering = false; | G.is_rendering = false; | ||||
| } | } | ||||
| void RE_PreviewRender(Render *re, Main *bmain, Scene *sce) | void RE_PreviewRender(Render *re, Main *bmain, Scene *sce, ViewRender *view_render) | ||||
| { | { | ||||
| Object *camera; | Object *camera; | ||||
| SceneLayer *scene_layer = BKE_scene_layer_from_scene_get(sce); | SceneLayer *scene_layer = BKE_scene_layer_from_scene_get(sce); | ||||
| int winx, winy; | int winx, winy; | ||||
| winx = (sce->r.size * sce->r.xsch) / 100; | winx = (sce->r.size * sce->r.xsch) / 100; | ||||
| winy = (sce->r.size * sce->r.ysch) / 100; | winy = (sce->r.size * sce->r.ysch) / 100; | ||||
| RE_InitState(re, NULL, &sce->r, NULL, winx, winy, NULL); | RE_InitState(re, NULL, &sce->r, view_render, NULL, winx, winy, NULL); | ||||
| re->pool = BKE_image_pool_new(); | re->pool = BKE_image_pool_new(); | ||||
| re->main = bmain; | re->main = bmain; | ||||
| re->scene = sce; | re->scene = sce; | ||||
| re->scene_color_manage = BKE_scene_check_color_management_enabled(sce); | re->scene_color_manage = BKE_scene_check_color_management_enabled(sce); | ||||
| re->lay = sce->lay; | re->lay = sce->lay; | ||||
| re->depsgraph = BKE_scene_get_depsgraph(sce, scene_layer); | re->depsgraph = BKE_scene_get_depsgraph(sce, scene_layer); | ||||
| Show All 38 Lines | bool RE_ReadRenderResult(Scene *scene, Scene *scenode) | ||||
| if (scenode) | if (scenode) | ||||
| scene = scenode; | scene = scenode; | ||||
| /* get render: it can be called from UI with draw callbacks */ | /* get render: it can be called from UI with draw callbacks */ | ||||
| re = RE_GetSceneRender(scene); | re = RE_GetSceneRender(scene); | ||||
| if (re == NULL) | if (re == NULL) | ||||
| re = RE_NewSceneRender(scene); | re = RE_NewSceneRender(scene); | ||||
| RE_InitState(re, NULL, &scene->r, NULL, winx, winy, &disprect); | RE_InitState(re, NULL, &scene->r, &scene->view_render, NULL, winx, winy, &disprect); | ||||
| re->scene = scene; | re->scene = scene; | ||||
| re->scene_color_manage = BKE_scene_check_color_management_enabled(scene); | re->scene_color_manage = BKE_scene_check_color_management_enabled(scene); | ||||
| BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE); | BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE); | ||||
| success = render_result_exr_file_cache_read(re); | success = render_result_exr_file_cache_read(re); | ||||
| BLI_rw_mutex_unlock(&re->resultmutex); | BLI_rw_mutex_unlock(&re->resultmutex); | ||||
| render_result_uncrop(re); | render_result_uncrop(re); | ||||
| ▲ Show 20 Lines • Show All 231 Lines • Show Last 20 Lines | |||||