diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-04-12 19:55:38 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-04-12 19:55:38 +0400 |
commit | d14738a5603389cecc582c10cf90fe650d368909 (patch) | |
tree | 80b1750f931c29b3b7bd3ce88e075eef7bee6822 /source | |
parent | bfa332e275a0ac109847c6754e76dd8aff8d961d (diff) |
report missing engines on file load. (request from Martin).
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/render/intern/source/pipeline.c | 7 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_files.c | 15 | ||||
-rw-r--r-- | source/creator/creator.c | 15 |
3 files changed, 21 insertions, 16 deletions
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 645d0ac0578..458fe8ff2c1 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -35,6 +35,7 @@ #include <limits.h> #include <string.h> #include <stdlib.h> +#include <stddef.h> #include "DNA_group_types.h" #include "DNA_image_types.h" @@ -3349,13 +3350,9 @@ void RE_result_load_from_file(RenderResult *result, ReportList *reports, const c static int external_render_3d(Render *re, int do_all) { - RenderEngineType *type; + RenderEngineType *type= BLI_findstring(&R_engines, re->r.engine, offsetof(RenderEngineType, idname)); RenderEngine engine; - for(type=R_engines.first; type; type=type->next) - if(strcmp(type->idname, re->r.engine) == 0) - break; - if(!(type && type->render)) return 0; if((re->r.scemode & R_PREVIEWBUTS) && !(type->flag & RE_DO_PREVIEW)) diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c index 51a04b28a12..c85b6767a33 100644 --- a/source/blender/windowmanager/intern/wm_files.c +++ b/source/blender/windowmanager/intern/wm_files.c @@ -33,7 +33,7 @@ /* placed up here because of crappy * winsock stuff. */ -#include <stdio.h> +#include <stddef.h> #include <string.h> #include <errno.h> @@ -96,6 +96,8 @@ #include "ED_view3d.h" #include "ED_util.h" +#include "RE_pipeline.h" /* only to report missing engine */ + #include "GHOST_C-api.h" #include "GHOST_Path-api.h" @@ -338,6 +340,17 @@ void WM_read_file(bContext *C, const char *name, ReportList *reports) #endif CTX_wm_window_set(C, NULL); /* exits queues */ + /* TODO, make this show in header info window */ + { + Scene *sce; + for(sce= G.main->scene.first; sce; sce= sce->id.next) { + if(BLI_findstring(&R_engines, sce->r.engine, offsetof(RenderEngineType, idname)) == NULL) { + BKE_reportf(reports, RPT_WARNING, "Engine not available: '%s' for scene: %s, an addon may need to be installed or enabled", sce->r.engine, sce->id.name+2); + } + } + } + + // XXX undo_editmode_clear(); BKE_reset_undo(); BKE_write_undo(C, "original"); /* save current state */ diff --git a/source/creator/creator.c b/source/creator/creator.c index df8ba38701d..cb2214ee42d 100644 --- a/source/creator/creator.c +++ b/source/creator/creator.c @@ -43,6 +43,7 @@ #endif #include <stdlib.h> +#include <stddef.h> #include <string.h> /* for setuid / getuid */ @@ -583,18 +584,12 @@ static int set_engine(int argc, const char **argv, void *data) { printf("\nError: no blend loaded. order the arguments so '-E / --engine ' is after a blend is loaded.\n"); } - else - { + else { Scene *scene= CTX_data_scene(C); RenderData *rd = &scene->r; - RenderEngineType *type = NULL; - - for( type = R_engines.first; type; type = type->next ) - { - if (!strcmp(argv[1],type->idname)) - { - BLI_strncpy(rd->engine, type->idname, sizeof(rd->engine)); - } + + if(BLI_findstring(&R_engines, argv[1], offsetof(RenderEngineType, idname))) { + BLI_strncpy(rd->engine, argv[1], sizeof(rd->engine)); } } } |