diff --git a/intern/ghost/intern/GHOST_Path-api.cpp b/intern/ghost/intern/GHOST_Path-api.cpp
index 59e1801ae5a..b2b7c68e998 100644
--- a/intern/ghost/intern/GHOST_Path-api.cpp
+++ b/intern/ghost/intern/GHOST_Path-api.cpp
@@ -34,17 +34,17 @@
const GHOST_TUns8* GHOST_getSystemDir()
{
GHOST_ISystem* system = GHOST_ISystem::getSystem();
- return system->getSystemDir();
+ return system ? system->getSystemDir() : NULL;
}
const GHOST_TUns8* GHOST_getUserDir()
{
GHOST_ISystem* system = GHOST_ISystem::getSystem();
- return system->getUserDir();
+ return system ? system->getUserDir() : NULL; /* will be NULL in background mode */
}
const GHOST_TUns8* GHOST_getBinaryDir()
{
GHOST_ISystem* system = GHOST_ISystem::getSystem();
- return system->getBinaryDir();
+ return system ? system->getBinaryDir() : NULL; /* will be NULL in background mode */
}
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 1bc690eb0ed..135464830f7 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -553,18 +553,17 @@ void set_scene_bg(Scene *scene)
}
/* called from creator.c */
-void set_scene_name(char *name)
+Scene *set_scene_name(char *name)
{
- Scene *sce;
-
- for (sce= G.main->scene.first; sce; sce= sce->id.next) {
- if (BLI_streq(name, sce->id.name+2)) {
- set_scene_bg(sce);
- return;
- }
+ Scene *sce= (Scene *)find_id("SC", name);
+ if(sce) {
+ set_scene_bg(sce);
+ printf("Scene switch: '%s' in file: '%s'\n", name, G.sce);
+ return sce;
}
-
- //XXX error("Can't find scene: %s", name);
+
+ printf("Can't find scene: '%s' in file: '%s'\n", name, G.sce);
+ return NULL;
}
void unlink_scene(Main *bmain, Scene *sce, Scene *newsce)
diff --git a/source/creator/creator.c b/source/creator/creator.c
index 3843e284a01..c3499a5788c 100644
--- a/source/creator/creator.c
+++ b/source/creator/creator.c
@@ -737,7 +737,11 @@ static int render_animation(int argc, char **argv, void *data)
static int set_scene(int argc, char **argv, void *data)
{
if(argc > 1) {
- set_scene_name(argv[1]);
+ bContext *C= data;
+ Scene *sce= set_scene_name(argv[1]);
+ if(sce) {
+ CTX_data_scene_set(C, sce);
+ }
return 1;
} else {
printf("\nError: Scene name must follow '-S / --scene'.\n");
@@ -982,7 +986,7 @@ void setupArguments(bContext *C, bArgs *ba, SYS_SystemHandle *syshandle)
BLI_argsAdd(ba, 4, "-g", NULL, game_doc, set_ge_parameters, syshandle);
BLI_argsAdd(ba, 4, "-f", "--render-frame", "\n\tRender frame and save it.\n\t+ start frame relative, - end frame relative.", render_frame, C);
BLI_argsAdd(ba, 4, "-a", "--render-anim", "\n\tRender frames from start to end (inclusive)", render_animation, C);
- BLI_argsAdd(ba, 4, "-S", "--scene", "\n\tSet the active scene for rendering", set_scene, NULL);
+ BLI_argsAdd(ba, 4, "-S", "--scene", "\n\tSet the active scene for rendering", set_scene, C);
BLI_argsAdd(ba, 4, "-s", "--frame-start", "\n\tSet start to frame (use before the -a argument)", set_start_frame, C);
BLI_argsAdd(ba, 4, "-e", "--frame-end", "\n\tSet end to frame (use before the -a argument)", set_end_frame, C);
BLI_argsAdd(ba, 4, "-j", "--frame-jump", "\n\tSet number of frames to step forward after each rendered frame", set_skip_frame, C);