Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2011-11-02 18:33:14 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2011-11-02 18:33:14 +0400
commite07389ccb86ea6f1f10e74bbea2ff27db8c0a748 (patch)
tree3c0526a1a4b2f1629177e7cde33dc00c2c383ccc /source/blender/makesrna/intern
parentaa363800b0826b4299bf999001d13530554f2ec1 (diff)
RenderEngine: steps towards implementation of this proposal:
http://wiki.blender.org/index.php/Dev:2.6/Source/Render/RenderEngineAPI * RenderEngine is now a persistent python object that exists and retains properties as long as a frame is being rendered. This is mostly useful now that more than one callback will be added. * Added update() callback that should ideally be used to export the scene, leaving only the rendering to the render() callback. This is not required to be used at this point, but separating this will make things more thread safe later on. * Added tag_redraw() and tag_update() functions that will be used for viewport rendering. * Internal change: status text is now retained after update_status calls.
Diffstat (limited to 'source/blender/makesrna/intern')
-rw-r--r--source/blender/makesrna/intern/rna_render.c62
1 files changed, 55 insertions, 7 deletions
diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c
index 9b53b477c52..8f928313840 100644
--- a/source/blender/makesrna/intern/rna_render.c
+++ b/source/blender/makesrna/intern/rna_render.c
@@ -48,12 +48,39 @@
#include "BKE_context.h"
#include "BKE_report.h"
-/* RenderEngine */
+/* RenderEngine Callbacks */
+
+void engine_tag_redraw(RenderEngine *engine)
+{
+ engine->flag |= RE_ENGINE_DO_DRAW;
+}
+
+void engine_tag_update(RenderEngine *engine)
+{
+ engine->flag |= RE_ENGINE_DO_UPDATE;
+}
+
+static void engine_update(RenderEngine *engine, Main *bmain, Scene *scene)
+{
+ extern FunctionRNA rna_RenderEngine_update_func;
+ PointerRNA ptr;
+ ParameterList list;
+ FunctionRNA *func;
+
+ RNA_pointer_create(NULL, engine->type->ext.srna, engine, &ptr);
+ func= &rna_RenderEngine_update_func;
+
+ RNA_parameter_list_create(&list, &ptr, func);
+ RNA_parameter_set_lookup(&list, "data", &bmain);
+ RNA_parameter_set_lookup(&list, "scene", &scene);
+ engine->type->ext.call(NULL, &ptr, func, &list);
+
+ RNA_parameter_list_free(&list);
+}
static void engine_render(RenderEngine *engine, struct Scene *scene)
{
extern FunctionRNA rna_RenderEngine_render_func;
-
PointerRNA ptr;
ParameterList list;
FunctionRNA *func;
@@ -87,7 +114,7 @@ static StructRNA *rna_RenderEngine_register(Main *bmain, ReportList *reports, vo
RenderEngineType *et, dummyet = {NULL};
RenderEngine dummyengine= {NULL};
PointerRNA dummyptr;
- int have_function[1];
+ int have_function[2];
/* setup dummy engine & engine type to store static properties in */
dummyengine.type= &dummyet;
@@ -122,13 +149,20 @@ static StructRNA *rna_RenderEngine_register(Main *bmain, ReportList *reports, vo
et->ext.free= free;
RNA_struct_blender_type_set(et->ext.srna, et);
- et->render= (have_function[0])? engine_render: NULL;
+ et->update= (have_function[0])? engine_update: NULL;
+ et->render= (have_function[1])? engine_render: NULL;
BLI_addtail(&R_engines, et);
return et->ext.srna;
}
+static void **rna_RenderEngine_instance(PointerRNA *ptr)
+{
+ RenderEngine *engine = ptr->data;
+ return &engine->py_instance;
+}
+
static StructRNA* rna_RenderEngine_refine(PointerRNA *ptr)
{
RenderEngine *engine= (RenderEngine*)ptr->data;
@@ -203,14 +237,28 @@ static void rna_def_render_engine(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "RenderEngine");
RNA_def_struct_ui_text(srna, "Render Engine", "Render engine");
RNA_def_struct_refine_func(srna, "rna_RenderEngine_refine");
- RNA_def_struct_register_funcs(srna, "rna_RenderEngine_register", "rna_RenderEngine_unregister", NULL);
+ RNA_def_struct_register_funcs(srna, "rna_RenderEngine_register", "rna_RenderEngine_unregister", "rna_RenderEngine_instance");
+
+ /* 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_OPTIONAL);
+ RNA_def_pointer(func, "data", "BlendData", "", "");
+ RNA_def_pointer(func, "scene", "Scene", "", "");
- /* render */
func= RNA_def_function(srna, "render", NULL);
RNA_def_function_ui_description(func, "Render scene into an image");
- RNA_def_function_flag(func, FUNC_REGISTER);
+ RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
RNA_def_pointer(func, "scene", "Scene", "", "");
+ /* 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);
RNA_def_property_flag(prop, PROP_REQUIRED);