[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41467] branches/cycles: Cycles: RenderEngine api code tweaks, also ensuring it's backwards compatible.

Brecht Van Lommel brechtvanlommel at pandora.be
Wed Nov 2 16:15:45 CET 2011


Revision: 41467
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41467
Author:   blendix
Date:     2011-11-02 15:15:45 +0000 (Wed, 02 Nov 2011)
Log Message:
-----------
Cycles: RenderEngine api code tweaks, also ensuring it's backwards compatible.

Modified Paths:
--------------
    branches/cycles/intern/cycles/blender/addon/__init__.py
    branches/cycles/source/blender/editors/render/render_update.c
    branches/cycles/source/blender/makesrna/intern/rna_render.c
    branches/cycles/source/blender/render/extern/include/RE_engine.h
    branches/cycles/source/blender/render/intern/include/render_types.h
    branches/cycles/source/blender/render/intern/source/external_engine.c
    branches/cycles/source/blender/render/intern/source/pipeline.c
    branches/cycles/source/blender/windowmanager/intern/wm_draw.c

Modified: branches/cycles/intern/cycles/blender/addon/__init__.py
===================================================================
--- branches/cycles/intern/cycles/blender/addon/__init__.py	2011-11-02 14:36:21 UTC (rev 41466)
+++ branches/cycles/intern/cycles/blender/addon/__init__.py	2011-11-02 15:15:45 UTC (rev 41467)
@@ -54,7 +54,7 @@
         engine.create(self, data, scene)
         engine.update(self, data, scene)
 
-    def render(self):
+    def render(self, scene):
         engine.render(self)
 
     # preview render

Modified: branches/cycles/source/blender/editors/render/render_update.c
===================================================================
--- branches/cycles/source/blender/editors/render/render_update.c	2011-11-02 14:36:21 UTC (rev 41466)
+++ branches/cycles/source/blender/editors/render/render_update.c	2011-11-02 15:15:45 UTC (rev 41467)
@@ -88,12 +88,12 @@
 				rv3d= ar->regiondata;
 				engine= rv3d->render_engine;
 
-				if(engine && engine->do_update) {
+				if(engine && (engine->flag & RE_ENGINE_DO_UPDATE)) {
 					CTX_wm_screen_set(C, sc);
 					CTX_wm_area_set(C, sa);
 					CTX_wm_region_set(C, ar);
 
-					engine->do_update= 0;
+					engine->flag &= ~RE_ENGINE_DO_UPDATE;
 					engine->type->view_update(engine, C);
 				}
 			}
@@ -134,7 +134,7 @@
 	}
 }
 
-void tag_render_engines(Main *bmain)
+static void tag_render_engines(Main *bmain)
 {
 	/* tag running render engines for update later on */
 	bScreen *sc;
@@ -154,7 +154,7 @@
 				
 				rv3d= ar->regiondata;
 				if(rv3d->render_engine)
-					rv3d->render_engine->do_update= 1;
+					rv3d->render_engine->flag |= RE_ENGINE_DO_UPDATE;
 			}
 		}
 	}

Modified: branches/cycles/source/blender/makesrna/intern/rna_render.c
===================================================================
--- branches/cycles/source/blender/makesrna/intern/rna_render.c	2011-11-02 14:36:21 UTC (rev 41466)
+++ branches/cycles/source/blender/makesrna/intern/rna_render.c	2011-11-02 15:15:45 UTC (rev 41467)
@@ -48,18 +48,18 @@
 #include "BKE_context.h"
 #include "BKE_report.h"
 
+/* RenderEngine Callbacks */
+
 void engine_tag_redraw(RenderEngine *engine)
 {
-	engine->do_draw = 1;
+	engine->flag |= RE_ENGINE_DO_DRAW;
 }
 
 void engine_tag_update(RenderEngine *engine)
 {
-	engine->do_update = 1;
+	engine->flag |= RE_ENGINE_DO_UPDATE;
 }
 
-/* RenderEngine Callbacks */
-
 static void engine_update(RenderEngine *engine, Main *bmain, Scene *scene)
 {
 	extern FunctionRNA rna_RenderEngine_update_func;
@@ -78,7 +78,7 @@
 	RNA_parameter_list_free(&list);
 }
 
-static void engine_render(RenderEngine *engine)
+static void engine_render(RenderEngine *engine, struct Scene *scene)
 {
 	extern FunctionRNA rna_RenderEngine_render_func;
 	PointerRNA ptr;
@@ -89,6 +89,7 @@
 	func= &rna_RenderEngine_render_func;
 
 	RNA_parameter_list_create(&list, &ptr, func);
+	RNA_parameter_set_lookup(&list, "scene", &scene);
 	engine->type->ext.call(NULL, &ptr, func, &list);
 
 	RNA_parameter_list_free(&list);
@@ -314,41 +315,44 @@
 	/* final render callbacks */
 	func= RNA_def_function(srna, "update", NULL);
 	RNA_def_function_ui_description(func, "Export scene data for render");
-	RNA_def_function_flag(func, FUNC_REGISTER);
+	RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
 	RNA_def_pointer(func, "data", "BlendData", "", "");
 	RNA_def_pointer(func, "scene", "Scene", "", "");
 
 	func= RNA_def_function(srna, "render", NULL);
-	RNA_def_function_ui_description(func, "Execute render");
-	RNA_def_function_flag(func, FUNC_REGISTER);
+	RNA_def_function_ui_description(func, "Render scene into an image");
+	RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
+	RNA_def_pointer(func, "scene", "Scene", "", "");
 
 	/* preview render callbacks */
 	func= RNA_def_function(srna, "preview_update", NULL);
 	RNA_def_function_ui_description(func, "Export scene data for preview render of the given datablock");
-	RNA_def_function_flag(func, FUNC_REGISTER);
+	RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
 	RNA_def_pointer(func, "context", "Context", "", "");
 	RNA_def_pointer(func, "id", "ID", "", "");
 
 	func= RNA_def_function(srna, "preview_render", NULL);
 	RNA_def_function_ui_description(func, "Execute preview render");
-	RNA_def_function_flag(func, FUNC_REGISTER);
+	RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
 
 	/* viewport render callbacks */
 	func= RNA_def_function(srna, "view_update", NULL);
 	RNA_def_function_ui_description(func, "Update on data changes for viewport render");
-	RNA_def_function_flag(func, FUNC_REGISTER);
+	RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
 	RNA_def_pointer(func, "context", "Context", "", "");
 
 	func= RNA_def_function(srna, "view_draw", NULL);
 	RNA_def_function_ui_description(func, "Draw viewport render");
-	RNA_def_function_flag(func, FUNC_REGISTER);
+	RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
 	RNA_def_pointer(func, "context", "Context", "", "");
 
 	/* tag for redraw */
 	RNA_def_function(srna, "tag_redraw", "engine_tag_redraw");
+	RNA_def_function_ui_description(func, "Request redraw for viewport rendering");
 
 	/* tag for update */
 	RNA_def_function(srna, "tag_update", "engine_tag_update");
+	RNA_def_function_ui_description(func, "Request update call for viewport rendering");
 
 	func= RNA_def_function(srna, "begin_result", "RE_engine_begin_result");
 	prop= RNA_def_int(func, "x", 0, 0, INT_MAX, "X", "", 0, INT_MAX);
@@ -390,9 +394,16 @@
 	prop= RNA_def_string(func, "message", "", 0, "Report Message", "");
 	RNA_def_property_flag(prop, PROP_REQUIRED);
 
-	/* registration */
 	RNA_define_verify_sdna(0);
 
+	prop= RNA_def_property(srna, "is_animation", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "flag", RE_ENGINE_ANIMATION);
+
+	prop= RNA_def_property(srna, "is_preview", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "flag", RE_ENGINE_PREVIEW);
+
+	/* registration */
+
 	prop= RNA_def_property(srna, "bl_idname", PROP_STRING, PROP_NONE);
 	RNA_def_property_string_sdna(prop, NULL, "type->idname");
 	RNA_def_property_flag(prop, PROP_REGISTER|PROP_NEVER_CLAMP);

Modified: branches/cycles/source/blender/render/extern/include/RE_engine.h
===================================================================
--- branches/cycles/source/blender/render/extern/include/RE_engine.h	2011-11-02 14:36:21 UTC (rev 41466)
+++ branches/cycles/source/blender/render/extern/include/RE_engine.h	2011-11-02 15:15:45 UTC (rev 41467)
@@ -46,12 +46,19 @@
 
 /* External Engine */
 
+/* RenderEngineType.flag */
 #define RE_INTERNAL				1
 #define RE_GAME					2
 #define RE_USE_PREVIEW			4
 #define RE_USE_POSTPROCESS		8
 #define RE_USE_SHADING_NODES	16
 
+/* RenderEngine.flag */
+#define RE_ENGINE_ANIMATION		1
+#define RE_ENGINE_PREVIEW		2
+#define RE_ENGINE_DO_DRAW		4
+#define RE_ENGINE_DO_UPDATE		8
+
 extern ListBase R_engines;
 
 typedef struct RenderEngineType {
@@ -63,7 +70,7 @@
 	int flag;
 
 	void (*update)(struct RenderEngine *engine, struct Main *bmain, struct Scene *scene);
-	void (*render)(struct RenderEngine *engine);
+	void (*render)(struct RenderEngine *engine, struct Scene *scene);
 
 	void (*preview_update)(struct RenderEngine *engine, const struct bContext *context, struct ID *id);
 	void (*preview_render)(struct RenderEngine *engine);
@@ -79,12 +86,11 @@
 	RenderEngineType *type;
 	void *py_instance;
 
+	int flag;
+
 	struct Render *re;
 	ListBase fullresult;
 	char *text;
-
-	int do_draw;
-	int do_update;
 } RenderEngine;
 
 RenderEngine *RE_engine_create(RenderEngineType *type);

Modified: branches/cycles/source/blender/render/intern/include/render_types.h
===================================================================
--- branches/cycles/source/blender/render/intern/include/render_types.h	2011-11-02 14:36:21 UTC (rev 41466)
+++ branches/cycles/source/blender/render/intern/include/render_types.h	2011-11-02 15:15:45 UTC (rev 41467)
@@ -601,6 +601,7 @@
 #define R_NEED_TANGENT	16
 #define R_BAKE_TRACE	32
 #define R_BAKING		64
+#define R_ANIMATION		128
 
 /* vlakren->flag (vlak = face in dutch) char!!! */
 #define R_SMOOTH		1

Modified: branches/cycles/source/blender/render/intern/source/external_engine.c
===================================================================
--- branches/cycles/source/blender/render/intern/source/external_engine.c	2011-11-02 14:36:21 UTC (rev 41466)
+++ branches/cycles/source/blender/render/intern/source/external_engine.c	2011-11-02 15:15:45 UTC (rev 41467)
@@ -265,7 +265,8 @@
 	/* verify if we can render */
 	if(!type->render)
 		return 0;
-	if((re->r.scemode & R_PREVIEWBUTS) && !(type->flag & RE_USE_PREVIEW))
+	if((re->r.scemode & R_PREVIEWBUTS) && !((type->flag & RE_USE_PREVIEW) ||
+		(type->preview_update && type->preview_render)))
 		return 0;
 	if(do_all && !(type->flag & RE_USE_POSTPROCESS))
 		return 0;
@@ -287,16 +288,23 @@
 	engine = RE_engine_create(type);
 	engine->re= re;
 
+	if(re->flag & R_ANIMATION)
+		engine->flag |= RE_ENGINE_ANIMATION;
+	if(re->r.scemode & R_PREVIEWBUTS)
+		engine->flag |= RE_ENGINE_PREVIEW;
+
 	if((re->r.scemode & (R_NO_FRAME_UPDATE|R_PREVIEWBUTS))==0)
 		scene_update_for_newframe(re->main, re->scene, re->lay);
 
-	if(re->r.scemode & R_PREVIEWBUTS) {
+	if(type->preview_update && type->preview_render) {
 		//type->preview_update(engine, scene, id);
 		type->preview_render(engine);
 	}
 	else {
-		type->update(engine, re->main, re->scene);
-		type->render(engine);
+		if(type->update)
+			type->update(engine, re->main, re->scene);
+		if(type->render)
+			type->render(engine, re->scene);
 	}
 
 	free_render_result(&engine->fullresult, engine->fullresult.first);

Modified: branches/cycles/source/blender/render/intern/source/pipeline.c
===================================================================
--- branches/cycles/source/blender/render/intern/source/pipeline.c	2011-11-02 14:36:21 UTC (rev 41466)
+++ branches/cycles/source/blender/render/intern/source/pipeline.c	2011-11-02 15:15:45 UTC (rev 41467)
@@ -405,7 +405,7 @@
 	return "Unknown";
 }
 
-static int passtype_from_name(char *str)
+static int passtype_from_name(const char *str)
 {
 	
 	if(strcmp(str, "Combined")==0)
@@ -889,40 +889,19 @@
 {
 	RenderResult *rr= base;
 	RenderLayer *rl;
-
-	/* don't add if layer already exists */
-	for(rl=rr->layers.first; rl; rl=rl->next)
-		if(strcmp(rl->name, str) == 0)
-			return rl;
 	
-	/* add render layer */
 	rl= MEM_callocN(sizeof(RenderLayer), "new render layer");
 	BLI_addtail(&rr->layers, rl);
 	

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list