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>2009-07-22 00:28:32 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2009-07-22 00:28:32 +0400
commitc354ea0ef12a2b214456b39832a141ed22479734 (patch)
treedc7126266bf5ac201f3e2086516733623873c5ee /source/blender/makesrna/intern/rna_scene.c
parent6b8dae0874d774888374992fc3923affb451c45a (diff)
2.5: Render
This adds a RenderEngine type to RNA, which can be subclassed in python (c++ will follow once we support subclassing there). It's very basic, but plugs into the pipeline nicely. Two example scripts: http://www.pasteall.org/6635/python http://www.pasteall.org/6636/python Issues: * Render runs in a separate thread, and there is unrestricted access, so it's possible to crash blender with unsafe access. * Save buffers and full sample are not supported yet.
Diffstat (limited to 'source/blender/makesrna/intern/rna_scene.c')
-rw-r--r--source/blender/makesrna/intern/rna_scene.c64
1 files changed, 64 insertions, 0 deletions
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index f23a14d99fb..bd23fc9e1f6 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -60,6 +60,8 @@ EnumPropertyItem prop_mode_items[] ={
#include "BLI_threads.h"
+#include "RE_pipeline.h"
+
PointerRNA rna_Scene_objects_get(CollectionPropertyIterator *iter)
{
ListBaseIterator *internal= iter->internal;
@@ -163,6 +165,48 @@ static void rna_SceneRenderData_active_layer_index_range(PointerRNA *ptr, int *m
*max= MAX2(0, *max);
}
+static void rna_SceneRenderData_engine_set(PointerRNA *ptr, int value)
+{
+ RenderData *rd= (RenderData*)ptr->data;
+ RenderEngineType *type= BLI_findlink(&R_engines, value);
+
+ if(type)
+ BLI_strncpy(rd->engine, type->idname, sizeof(rd->engine));
+}
+
+static EnumPropertyItem *rna_SceneRenderData_engine_itemf(bContext *C, PointerRNA *ptr, int *free)
+{
+ RenderEngineType *type;
+ EnumPropertyItem *item= NULL;
+ EnumPropertyItem tmp = {0, "", 0, "", ""};
+ int a=0, totitem= 0;
+
+ for(type=R_engines.first; type; type=type->next, a++) {
+ tmp.value= a;
+ tmp.identifier= type->idname;
+ tmp.name= type->name;
+ RNA_enum_item_add(&item, &totitem, &tmp);
+ }
+
+ RNA_enum_item_end(&item, &totitem);
+ *free= 1;
+
+ return item;
+}
+
+static int rna_SceneRenderData_engine_get(PointerRNA *ptr)
+{
+ RenderData *rd= (RenderData*)ptr->data;
+ RenderEngineType *type;
+ int a= 0;
+
+ for(type=R_engines.first; type; type=type->next, a++)
+ if(strcmp(type->idname, rd->engine) == 0)
+ return a;
+
+ return 0;
+}
+
static void rna_SceneRenderLayer_name_set(PointerRNA *ptr, const char *value)
{
Scene *scene= (Scene*)ptr->id.data;
@@ -183,6 +227,11 @@ static void rna_SceneRenderLayer_name_set(PointerRNA *ptr, const char *value)
}
}
+static int rna_SceneRenderData_multiple_engines_get(PointerRNA *ptr)
+{
+ return (BLI_countlist(&R_engines) > 1);
+}
+
static void rna_SceneRenderLayer_layer_set(PointerRNA *ptr, const int *values)
{
SceneRenderLayer *rl= (SceneRenderLayer*)ptr->data;
@@ -997,6 +1046,10 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
{0, NULL, 0, NULL, NULL}};
#endif
+ static EnumPropertyItem engine_items[] = {
+ {0, "BLENDER", 0, "Blender", ""},
+ {0, NULL, 0, NULL, NULL}};
+
srna= RNA_def_struct(brna, "SceneRenderData", NULL);
RNA_def_struct_sdna(srna, "RenderData");
RNA_def_struct_nested(brna, srna, "Scene");
@@ -1520,6 +1573,17 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_int_funcs(prop, "rna_SceneRenderData_active_layer_index_get", "rna_SceneRenderData_active_layer_index_set", "rna_SceneRenderData_active_layer_index_range");
RNA_def_property_ui_text(prop, "Active Layer Index", "Active index in render layer array.");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+ /* engine */
+ prop= RNA_def_property(srna, "engine", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, engine_items);
+ RNA_def_property_enum_funcs(prop, "rna_SceneRenderData_engine_get", "rna_SceneRenderData_engine_set", "rna_SceneRenderData_engine_itemf");
+ RNA_def_property_ui_text(prop, "Engine", "Engine to use for rendering.");
+
+ prop= RNA_def_property(srna, "multiple_engines", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop, "rna_SceneRenderData_multiple_engines_get", NULL);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_ui_text(prop, "Multiple Engine", "More than one rendering engine is available.");
}
void RNA_def_scene(BlenderRNA *brna)