Changeset View
Changeset View
Standalone View
Standalone View
source/blender/render/intern/source/external_engine.c
| Show First 20 Lines • Show All 652 Lines • ▼ Show 20 Lines | int RE_engine_render(Render *re, int do_all) | ||||
| if (re->draw_lock) { | if (re->draw_lock) { | ||||
| re->draw_lock(re->dlh, 1); | re->draw_lock(re->dlh, 1); | ||||
| } | } | ||||
| /* update animation here so any render layer animation is applied before | /* update animation here so any render layer animation is applied before | ||||
| * creating the render result */ | * creating the render result */ | ||||
| if ((re->r.scemode & (R_NO_FRAME_UPDATE | R_BUTS_PREVIEW)) == 0) { | if ((re->r.scemode & (R_NO_FRAME_UPDATE | R_BUTS_PREVIEW)) == 0) { | ||||
| BKE_scene_graph_update_for_newframe(re->eval_ctx, re->depsgraph, re->main, re->scene, NULL); | BKE_scene_graph_update_for_newframe(re->eval_ctx, re->depsgraph, re->main, re->scene, NULL); | ||||
| render_update_anim_renderdata(re, &re->scene->r); | render_update_anim_renderdata(re, &re->scene->r, &re->scene->render_layers); | ||||
| } | } | ||||
| /* create render result */ | /* create render result */ | ||||
| BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE); | BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE); | ||||
| if (re->result == NULL || !(re->r.scemode & R_BUTS_PREVIEW)) { | if (re->result == NULL || !(re->r.scemode & R_BUTS_PREVIEW)) { | ||||
| int savebuffers = RR_USE_MEM; | int savebuffers = RR_USE_MEM; | ||||
| if (re->result) | if (re->result) | ||||
| ▲ Show 20 Lines • Show All 102 Lines • ▼ Show 20 Lines | |||||
| #ifdef WITH_FREESTYLE | #ifdef WITH_FREESTYLE | ||||
| if (re->r.mode & R_EDGE_FRS) | if (re->r.mode & R_EDGE_FRS) | ||||
| RE_RenderFreestyleExternal(re); | RE_RenderFreestyleExternal(re); | ||||
| #endif | #endif | ||||
| return 1; | return 1; | ||||
| } | } | ||||
| void RE_engine_register_pass(struct RenderEngine *engine, struct Scene *scene, struct SceneRenderLayer *srl, | void RE_engine_register_pass(struct RenderEngine *engine, struct Scene *scene, struct SceneLayer *scene_layer, | ||||
| const char *name, int UNUSED(channels), const char *UNUSED(chanid), int type) | const char *name, int UNUSED(channels), const char *UNUSED(chanid), int type) | ||||
| { | { | ||||
| /* The channel information is currently not used, but is part of the API in case it's needed in the future. */ | /* The channel information is currently not used, but is part of the API in case it's needed in the future. */ | ||||
| if (!(scene && srl && engine)) { | if (!(scene && scene_layer && engine)) { | ||||
| return; | return; | ||||
| } | } | ||||
| /* Register the pass in all scenes that have a render layer node for this layer. | /* Register the pass in all scenes that have a render layer node for this layer. | ||||
| * Since multiple scenes can be used in the compositor, the code must loop over all scenes | * Since multiple scenes can be used in the compositor, the code must loop over all scenes | ||||
| * and check whether their nodetree has a node that needs to be updated. */ | * and check whether their nodetree has a node that needs to be updated. */ | ||||
| Scene *sce; | Scene *sce; | ||||
| for (sce = G.main->scene.first; sce; sce = sce->id.next) { | for (sce = G.main->scene.first; sce; sce = sce->id.next) { | ||||
| if (sce->nodetree) { | if (sce->nodetree) { | ||||
| ntreeCompositRegisterPass(sce->nodetree, scene, srl, name, type); | ntreeCompositRegisterPass(sce->nodetree, scene, scene_layer, name, type); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| SceneLayer *RE_engine_get_scene_layer(Render *re) | SceneLayer *RE_engine_get_scene_layer(Render *re) | ||||
| { | { | ||||
| return re->eval_ctx->scene_layer; | return re->eval_ctx->scene_layer; | ||||
| } | } | ||||