[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36119] trunk/blender/source: report missing engines on file load.

Campbell Barton ideasman42 at gmail.com
Tue Apr 12 17:55:38 CEST 2011


Revision: 36119
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36119
Author:   campbellbarton
Date:     2011-04-12 15:55:38 +0000 (Tue, 12 Apr 2011)
Log Message:
-----------
report missing engines on file load. (request from Martin).

Modified Paths:
--------------
    trunk/blender/source/blender/render/intern/source/pipeline.c
    trunk/blender/source/blender/windowmanager/intern/wm_files.c
    trunk/blender/source/creator/creator.c

Modified: trunk/blender/source/blender/render/intern/source/pipeline.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/pipeline.c	2011-04-12 15:55:04 UTC (rev 36118)
+++ trunk/blender/source/blender/render/intern/source/pipeline.c	2011-04-12 15:55:38 UTC (rev 36119)
@@ -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 @@
 
 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))

Modified: trunk/blender/source/blender/windowmanager/intern/wm_files.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_files.c	2011-04-12 15:55:04 UTC (rev 36118)
+++ trunk/blender/source/blender/windowmanager/intern/wm_files.c	2011-04-12 15:55:38 UTC (rev 36119)
@@ -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 @@
 #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 */

Modified: trunk/blender/source/creator/creator.c
===================================================================
--- trunk/blender/source/creator/creator.c	2011-04-12 15:55:04 UTC (rev 36118)
+++ trunk/blender/source/creator/creator.c	2011-04-12 15:55:38 UTC (rev 36119)
@@ -43,6 +43,7 @@
 #endif
 
 #include <stdlib.h>
+#include <stddef.h>
 #include <string.h>
 
 /* for setuid / getuid */
@@ -583,18 +584,12 @@
 			{
 				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));
 				}
 			}
 		}




More information about the Bf-blender-cvs mailing list