Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/intern/scene.c
| Show First 20 Lines • Show All 43 Lines • ▼ Show 20 Lines | |||||
| #include "DNA_object_types.h" | #include "DNA_object_types.h" | ||||
| #include "DNA_rigidbody_types.h" | #include "DNA_rigidbody_types.h" | ||||
| #include "DNA_scene_types.h" | #include "DNA_scene_types.h" | ||||
| #include "DNA_screen_types.h" | #include "DNA_screen_types.h" | ||||
| #include "DNA_sequence_types.h" | #include "DNA_sequence_types.h" | ||||
| #include "DNA_space_types.h" | #include "DNA_space_types.h" | ||||
| #include "DNA_view3d_types.h" | #include "DNA_view3d_types.h" | ||||
| #include "DNA_windowmanager_types.h" | #include "DNA_windowmanager_types.h" | ||||
| #include "DNA_workspace_types.h" | |||||
| #include "DNA_gpencil_types.h" | #include "DNA_gpencil_types.h" | ||||
| #include "BLI_math.h" | #include "BLI_math.h" | ||||
| #include "BLI_blenlib.h" | #include "BLI_blenlib.h" | ||||
| #include "BLI_utildefines.h" | #include "BLI_utildefines.h" | ||||
| #include "BLI_callbacks.h" | #include "BLI_callbacks.h" | ||||
| #include "BLI_string.h" | #include "BLI_string.h" | ||||
| #include "BLI_string_utils.h" | #include "BLI_string_utils.h" | ||||
| ▲ Show 20 Lines • Show All 1,473 Lines • ▼ Show 20 Lines | |||||
| #endif | #endif | ||||
| static bool check_rendered_viewport_visible(Main *bmain) | static bool check_rendered_viewport_visible(Main *bmain) | ||||
| { | { | ||||
| wmWindowManager *wm = bmain->wm.first; | wmWindowManager *wm = bmain->wm.first; | ||||
| wmWindow *window; | wmWindow *window; | ||||
| for (window = wm->windows.first; window != NULL; window = window->next) { | for (window = wm->windows.first; window != NULL; window = window->next) { | ||||
| const bScreen *screen = BKE_workspace_active_screen_get(window->workspace_hook); | const bScreen *screen = BKE_workspace_active_screen_get(window->workspace_hook); | ||||
| WorkSpace *workspace = BKE_workspace_active_get(window->workspace_hook); | |||||
| Scene *scene = window->scene; | Scene *scene = window->scene; | ||||
| const char *engine = BKE_render_engine_get(scene, workspace); | |||||
| ScrArea *area; | ScrArea *area; | ||||
| RenderEngineType *type = RE_engines_find(scene->r.engine); | RenderEngineType *type = RE_engines_find(engine); | ||||
| if ((type->draw_engine != NULL) || (type->render_to_view == NULL)) { | if ((type->draw_engine != NULL) || (type->render_to_view == NULL)) { | ||||
| continue; | continue; | ||||
| } | } | ||||
| const bool use_legacy = (type->flag & RE_USE_LEGACY_PIPELINE) != 0; | const bool use_legacy = (type->flag & RE_USE_LEGACY_PIPELINE) != 0; | ||||
| for (area = screen->areabase.first; area != NULL; area = area->next) { | for (area = screen->areabase.first; area != NULL; area = area->next) { | ||||
| View3D *v3d = area->spacedata.first; | View3D *v3d = area->spacedata.first; | ||||
| if (area->spacetype != SPACE_VIEW3D) { | if (area->spacetype != SPACE_VIEW3D) { | ||||
| continue; | continue; | ||||
| ▲ Show 20 Lines • Show All 273 Lines • ▼ Show 20 Lines | |||||
| { | { | ||||
| if (r->mode & R_SIMPLIFY) | if (r->mode & R_SIMPLIFY) | ||||
| return ((1.0f - r->simplify_aosss) * 10.0f + 1.0f) * error; | return ((1.0f - r->simplify_aosss) * 10.0f + 1.0f) * error; | ||||
| else | else | ||||
| return error; | return error; | ||||
| } | } | ||||
| /** | /** | ||||
| * Helper function for the SETLOOPER macro | * Helper function for the SETLOOPER and SETLOOPER_SCENE_LAYER macros | ||||
| * | * | ||||
| * It iterates over the bases of the active layer and then the bases | * It iterates over the bases of the active layer and then the bases | ||||
| * of the active layer of the background (set) scenes recursively. | * of the active layer of the background (set) scenes recursively. | ||||
| */ | */ | ||||
| Base *_setlooper_base_step(Scene **sce_iter, Base *base) | Base *_setlooper_base_step(Scene **sce_iter, SceneLayer *scene_layer, Base *base) | ||||
| { | { | ||||
| if (base && base->next) { | if (base && base->next) { | ||||
| /* common case, step to the next */ | /* Common case, step to the next. */ | ||||
| return base->next; | return base->next; | ||||
| } | } | ||||
| else if (base == NULL) { | else if ((base == NULL) && (scene_layer != NULL)) { | ||||
| /* first time looping, return the scenes first base */ | /* First time looping, return the scenes first base. */ | ||||
| /* For the first loop we should get the layer from workspace when available. */ | |||||
| /* for the first loop we should get the layer from context */ | if (scene_layer->object_bases.first) { | ||||
| SceneLayer *sl = BKE_scene_layer_context_active_PLACEHOLDER((*sce_iter)); | return (Base *)scene_layer->object_bases.first; | ||||
| /* TODO For first scene (non-background set), we should pass the render layer as argument. | |||||
| * In some cases we want it to be the workspace one, in other the scene one. */ | |||||
| TODO_LAYER; | |||||
| if (sl->object_bases.first) { | |||||
| return (Base *)sl->object_bases.first; | |||||
| } | } | ||||
| /* no base on this scene layer */ | /* No base on this scene layer. */ | ||||
| goto next_set; | goto next_set; | ||||
| } | } | ||||
| else { | else { | ||||
| next_set: | next_set: | ||||
| /* reached the end, get the next base in the set */ | /* Reached the end, get the next base in the set. */ | ||||
| while ((*sce_iter = (*sce_iter)->set)) { | while ((*sce_iter = (*sce_iter)->set)) { | ||||
| SceneLayer *sl = BKE_scene_layer_from_scene_get((*sce_iter)); | SceneLayer *scene_layer_set = BKE_scene_layer_from_scene_get((*sce_iter)); | ||||
| base = (Base *)sl->object_bases.first; | base = (Base *)scene_layer_set->object_bases.first; | ||||
| if (base) { | if (base) { | ||||
| return base; | return base; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| bool BKE_scene_use_new_shading_nodes(const Scene *scene) | bool BKE_scene_use_new_shading_nodes(const Scene *scene) | ||||
| { | { | ||||
| const RenderEngineType *type = RE_engines_find(scene->r.engine); | return BKE_render_use_new_shading_nodes(scene, NULL); | ||||
| return (type && type->flag & RE_USE_SHADING_NODES); | |||||
| } | } | ||||
| bool BKE_scene_use_shading_nodes_custom(Scene *scene) | bool BKE_scene_use_shading_nodes_custom(Scene *scene) | ||||
| { | { | ||||
| RenderEngineType *type = RE_engines_find(scene->r.engine); | return BKE_render_use_shading_nodes_custom(scene, NULL); | ||||
| return (type && type->flag & RE_USE_SHADING_NODES_CUSTOM); | |||||
| } | } | ||||
| bool BKE_scene_use_world_space_shading(Scene *scene) | bool BKE_scene_use_world_space_shading(Scene *scene) | ||||
| { | { | ||||
| const RenderEngineType *type = RE_engines_find(scene->r.engine); | return BKE_render_use_world_space_shading(scene, NULL); | ||||
| return ((scene->r.mode & R_USE_WS_SHADING) || | |||||
| (type && (type->flag & RE_USE_SHADING_NODES))); | |||||
| } | } | ||||
| bool BKE_scene_use_spherical_stereo(Scene *scene) | bool BKE_scene_use_spherical_stereo(Scene *scene) | ||||
| { | { | ||||
| RenderEngineType *type = RE_engines_find(scene->r.engine); | return BKE_render_use_spherical_stereo(scene, NULL); | ||||
| return (type && type->flag & RE_USE_SPHERICAL_STEREO); | |||||
| } | } | ||||
| bool BKE_scene_uses_blender_internal(const Scene *scene) | bool BKE_scene_uses_blender_internal(const Scene *scene) | ||||
| { | { | ||||
| return STREQ(scene->r.engine, RE_engine_id_BLENDER_RENDER); | return BKE_render_uses_blender_internal(scene, NULL); | ||||
| } | } | ||||
| bool BKE_scene_uses_blender_game(const Scene *scene) | bool BKE_scene_uses_blender_game(const Scene *scene) | ||||
| { | { | ||||
| return STREQ(scene->r.engine, RE_engine_id_BLENDER_GAME); | return BKE_render_uses_blender_game(scene, NULL); | ||||
| } | } | ||||
| bool BKE_scene_uses_blender_eevee(const Scene *scene) | bool BKE_scene_uses_blender_eevee(const Scene *scene) | ||||
| { | { | ||||
| return STREQ(scene->r.engine, RE_engine_id_BLENDER_EEVEE); | return BKE_render_uses_blender_eevee(scene, NULL); | ||||
| } | } | ||||
| void BKE_scene_base_flag_to_objects(SceneLayer *sl) | void BKE_scene_base_flag_to_objects(SceneLayer *sl) | ||||
| { | { | ||||
| Base *base = sl->object_bases.first; | Base *base = sl->object_bases.first; | ||||
| while (base) { | while (base) { | ||||
| BKE_scene_object_base_flag_sync_from_base(base); | BKE_scene_object_base_flag_sync_from_base(base); | ||||
| ▲ Show 20 Lines • Show All 98 Lines • ▼ Show 20 Lines | |||||
| int BKE_render_preview_pixel_size(const RenderData *r) | int BKE_render_preview_pixel_size(const RenderData *r) | ||||
| { | { | ||||
| if (r->preview_pixel_size == 0) { | if (r->preview_pixel_size == 0) { | ||||
| return (U.pixelsize > 1.5f) ? 2 : 1; | return (U.pixelsize > 1.5f) ? 2 : 1; | ||||
| } | } | ||||
| return r->preview_pixel_size; | return r->preview_pixel_size; | ||||
| } | } | ||||
| /* ***************************************************** */ | |||||
| /* render engine settings */ | |||||
| const char *BKE_render_engine_get(const Scene *scene, const WorkSpace *workspace) | |||||
| { | |||||
| if (workspace == NULL || BKE_workspace_use_scene_settings_get(workspace)) { | |||||
| return scene->r.engine; | |||||
| } | |||||
| return BKE_workspace_engine_get(workspace); | |||||
| } | |||||
| bool BKE_render_use_new_shading_nodes(const Scene *scene, const WorkSpace *workspace) | |||||
| { | |||||
| const char *engine = BKE_render_engine_get(scene, workspace); | |||||
| const RenderEngineType *type = RE_engines_find(engine); | |||||
| return (type && type->flag & RE_USE_SHADING_NODES); | |||||
| } | |||||
| bool BKE_render_use_shading_nodes_custom(const Scene *scene, const WorkSpace *workspace) | |||||
| { | |||||
| const char *engine = BKE_render_engine_get(scene, workspace); | |||||
| RenderEngineType *type = RE_engines_find(engine); | |||||
| return (type && type->flag & RE_USE_SHADING_NODES_CUSTOM); | |||||
| } | |||||
| bool BKE_render_use_world_space_shading(const Scene *scene, const WorkSpace *workspace) | |||||
| { | |||||
| const char *engine = BKE_render_engine_get(scene, workspace); | |||||
| const RenderEngineType *type = RE_engines_find(engine); | |||||
| return ((scene->r.mode & R_USE_WS_SHADING) || | |||||
| (type && (type->flag & RE_USE_SHADING_NODES))); | |||||
| } | |||||
| bool BKE_render_use_spherical_stereo(const Scene *scene, const WorkSpace *workspace) | |||||
| { | |||||
| const char *engine = BKE_render_engine_get(scene, workspace); | |||||
| RenderEngineType *type = RE_engines_find(engine); | |||||
| return (type && type->flag & RE_USE_SPHERICAL_STEREO); | |||||
| } | |||||
| bool BKE_render_uses_blender_internal(const Scene *scene, const WorkSpace *workspace) | |||||
| { | |||||
| const char *engine = BKE_render_engine_get(scene, workspace); | |||||
| return STREQ(engine, RE_engine_id_BLENDER_RENDER); | |||||
| } | |||||
| bool BKE_render_uses_blender_game(const Scene *scene, const WorkSpace *workspace) | |||||
| { | |||||
| const char *engine = BKE_render_engine_get(scene, workspace); | |||||
| return STREQ(engine, RE_engine_id_BLENDER_GAME); | |||||
| } | |||||
| bool BKE_render_uses_blender_eevee(const Scene *scene, const WorkSpace *workspace) | |||||
| { | |||||
| const char *engine = BKE_render_engine_get(scene, workspace); | |||||
| return STREQ(engine, RE_engine_id_BLENDER_EEVEE); | |||||
| } | |||||
| /* ***************************************************** */ | |||||
| /* Apply the needed correction factor to value, based on unit_type (only length-related are affected currently) | /* Apply the needed correction factor to value, based on unit_type (only length-related are affected currently) | ||||
| * and unit->scale_length. | * and unit->scale_length. | ||||
| */ | */ | ||||
| double BKE_scene_unit_scale(const UnitSettings *unit, const int unit_type, double value) | double BKE_scene_unit_scale(const UnitSettings *unit, const int unit_type, double value) | ||||
| { | { | ||||
| if (unit->system == USER_UNIT_NONE) { | if (unit->system == USER_UNIT_NONE) { | ||||
| /* Never apply scale_length when not using a unit setting! */ | /* Never apply scale_length when not using a unit setting! */ | ||||
| return value; | return value; | ||||
| ▲ Show 20 Lines • Show All 303 Lines • Show Last 20 Lines | |||||