Changeset View
Changeset View
Standalone View
Standalone View
source/blender/render/intern/source/external_engine.c
| Show First 20 Lines • Show All 101 Lines • ▼ Show 20 Lines | |||||
| void RE_engines_exit(void) | void RE_engines_exit(void) | ||||
| { | { | ||||
| RenderEngineType *type, *next; | RenderEngineType *type, *next; | ||||
| DRW_engines_free(); | DRW_engines_free(); | ||||
| BKE_layer_collection_engine_settings_callback_free(); | BKE_layer_collection_engine_settings_callback_free(); | ||||
| BKE_scene_layer_engine_settings_callback_free(); | BKE_view_layer_engine_settings_callback_free(); | ||||
| for (type = R_engines.first; type; type = next) { | for (type = R_engines.first; type; type = next) { | ||||
| next = type->next; | next = type->next; | ||||
| BLI_remlink(&R_engines, type); | BLI_remlink(&R_engines, type); | ||||
| if (!(type->flag & RE_INTERNAL)) { | if (!(type->flag & RE_INTERNAL)) { | ||||
| if (type->ext.free) | if (type->ext.free) | ||||
| Show All 9 Lines | void RE_engines_register(Main *bmain, RenderEngineType *render_type) | ||||
| if (render_type->draw_engine) { | if (render_type->draw_engine) { | ||||
| DRW_engine_register(render_type->draw_engine); | DRW_engine_register(render_type->draw_engine); | ||||
| } | } | ||||
| if (render_type->collection_settings_create) { | if (render_type->collection_settings_create) { | ||||
| BKE_layer_collection_engine_settings_callback_register( | BKE_layer_collection_engine_settings_callback_register( | ||||
| bmain, render_type->idname, render_type->collection_settings_create); | bmain, render_type->idname, render_type->collection_settings_create); | ||||
| } | } | ||||
| if (render_type->render_settings_create) { | if (render_type->render_settings_create) { | ||||
| BKE_scene_layer_engine_settings_callback_register( | BKE_view_layer_engine_settings_callback_register( | ||||
| bmain, render_type->idname, render_type->render_settings_create); | bmain, render_type->idname, render_type->render_settings_create); | ||||
| } | } | ||||
| BLI_addtail(&R_engines, render_type); | BLI_addtail(&R_engines, render_type); | ||||
| } | } | ||||
| RenderEngineType *RE_engines_find(const char *idname) | RenderEngineType *RE_engines_find(const char *idname) | ||||
| { | { | ||||
| RenderEngineType *type; | RenderEngineType *type; | ||||
| ▲ Show 20 Lines • Show All 508 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, &re->scene->render_layers); | render_update_anim_renderdata(re, &re->scene->r, &re->scene->view_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 SceneLayer *scene_layer, | void RE_engine_register_pass(struct RenderEngine *engine, struct Scene *scene, struct ViewLayer *view_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 && scene_layer && engine)) { | if (!(scene && view_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, scene_layer, name, type); | ntreeCompositRegisterPass(sce->nodetree, scene, view_layer, name, type); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| SceneLayer *RE_engine_get_scene_layer(Render *re) | ViewLayer *RE_engine_get_view_layer(Render *re) | ||||
| { | { | ||||
| return re->eval_ctx->scene_layer; | return re->eval_ctx->view_layer; | ||||
| } | } | ||||