Changeset View
Changeset View
Standalone View
Standalone View
source/blender/render/intern/source/pipeline.c
| Show First 20 Lines • Show All 1,543 Lines • ▼ Show 20 Lines | for (rv = re->result->views.first; rv; rv = rv->next) { | ||||
| RE_SetActiveRenderView(re, rv->name); | RE_SetActiveRenderView(re, rv->name); | ||||
| /* lock drawing in UI during data phase */ | /* lock drawing in UI during data phase */ | ||||
| if (re->draw_lock) | if (re->draw_lock) | ||||
| re->draw_lock(re->dlh, 1); | re->draw_lock(re->dlh, 1); | ||||
| /* make render verts/faces/halos/lamps */ | /* make render verts/faces/halos/lamps */ | ||||
| if (render_scene_needs_vector(re)) | if (render_scene_needs_vector(re)) | ||||
| RE_Database_FromScene_Vectors(re, re->main, re->scene, re->lay); | RE_Database_FromScene_Vectors(re, re->main, re->scene); | ||||
| else { | else { | ||||
| RE_Database_FromScene(re, re->main, re->scene, re->lay, 1); | RE_Database_FromScene(re, re->main, re->scene, re->lay, 1); | ||||
| RE_Database_Preprocess(re); | RE_Database_Preprocess(re); | ||||
| } | } | ||||
| /* clear UI drawing locks */ | /* clear UI drawing locks */ | ||||
| if (re->draw_lock) | if (re->draw_lock) | ||||
| re->draw_lock(re->dlh, 0); | re->draw_lock(re->dlh, 0); | ||||
| ▲ Show 20 Lines • Show All 1,542 Lines • ▼ Show 20 Lines | |||||
| } | } | ||||
| const char *RE_GetActiveRenderView(Render *re) | const char *RE_GetActiveRenderView(Render *re) | ||||
| { | { | ||||
| return re->viewname; | return re->viewname; | ||||
| } | } | ||||
| /* 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( | ||||
| Object *camera_override, unsigned int lay_override, int anim, int anim_init) | Render *re, RenderData *rd, Main *bmain, Scene *scene, SceneRenderLayer *srl, LocalViewInfo *localview, | ||||
| 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 15 Lines | static int render_initialize_from_main( | ||||
| } | } | ||||
| 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->localview = localview; | ||||
| re->i.localview = localview != NULL; | |||||
| re->viewname[0] = '\0'; | re->viewname[0] = '\0'; | ||||
| /* 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; | ||||
| } | } | ||||
| Show All 33 Lines | |||||
| } | } | ||||
| void RE_SetReports(Render *re, ReportList *reports) | void RE_SetReports(Render *re, ReportList *reports) | ||||
| { | { | ||||
| re->reports = reports; | re->reports = reports; | ||||
| } | } | ||||
| /* general Blender frame render call */ | /* general Blender frame render call */ | ||||
| void RE_BlenderFrame(Render *re, Main *bmain, Scene *scene, SceneRenderLayer *srl, Object *camera_override, | void RE_BlenderFrame( | ||||
| unsigned int lay_override, int frame, const bool write_still) | Render *re, Main *bmain, Scene *scene, SceneRenderLayer *srl, LocalViewInfo *localview, | ||||
| Object *camera_override, unsigned int lay_override, | |||||
| int frame, const bool write_still) | |||||
| { | { | ||||
| 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, srl, localview, 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 20 Lines • Show All 305 Lines • ▼ Show 20 Lines | for (i = 0; i < totvideos; i++) { | ||||
| mh->end_movie(re->movie_ctx_arr[i]); | mh->end_movie(re->movie_ctx_arr[i]); | ||||
| mh->context_free(re->movie_ctx_arr[i]); | mh->context_free(re->movie_ctx_arr[i]); | ||||
| } | } | ||||
| MEM_SAFE_FREE(re->movie_ctx_arr); | MEM_SAFE_FREE(re->movie_ctx_arr); | ||||
| } | } | ||||
| /* saves images to disk */ | /* saves images to disk */ | ||||
| void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_override, | void RE_BlenderAnim( | ||||
| unsigned int lay_override, int sfra, int efra, int tfra) | Render *re, Main *bmain, Scene *scene, LocalViewInfo *localview, | ||||
| Object *camera_override, unsigned int lay_override, | |||||
| int sfra, int efra, int tfra) | |||||
| { | { | ||||
| RenderData rd = scene->r; | RenderData rd = scene->r; | ||||
| bMovieHandle *mh = NULL; | bMovieHandle *mh = NULL; | ||||
| int cfrao = scene->r.cfra; | int cfrao = scene->r.cfra; | ||||
| int nfra, totrendered = 0, totskipped = 0; | int nfra, totrendered = 0, totskipped = 0; | ||||
| 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, NULL, localview, 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, NULL, localview, 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, re->lay); | ||||
| * From convertblender.c: | |||||
| * in localview, lamps are using normal layers, objects only local bits. | |||||
| */ | |||||
| unsigned int updatelay; | |||||
| if (re->lay & 0xFF000000) | |||||
| updatelay = re->lay & 0xFF000000; | |||||
| else | |||||
| updatelay = re->lay; | |||||
| BKE_scene_update_for_newframe(re->eval_ctx, bmain, scene, updatelay); | |||||
| continue; | continue; | ||||
| } | } | ||||
| else | else | ||||
| nfra += tfra; | nfra += tfra; | ||||
| /* Touch/NoOverwrite options are only valid for image's */ | /* Touch/NoOverwrite options are only valid for image's */ | ||||
| if (is_movie == false) { | if (is_movie == false) { | ||||
| if (scene->r.mode & (R_NO_OVERWRITE | R_TOUCH)) | if (scene->r.mode & (R_NO_OVERWRITE | R_TOUCH)) | ||||
| ▲ Show 20 Lines • Show All 394 Lines • Show Last 20 Lines | |||||