[Bf-blender-cvs] [7012dc5a4f6] temp-workspace-changes: Context: Expose "engine" for Python and add BKE_render_engine_get()

Dalai Felinto noreply at git.blender.org
Thu Sep 14 12:09:54 CEST 2017


Commit: 7012dc5a4f6a045b2c9fb99e1a4bbb58174ce75c
Author: Dalai Felinto
Date:   Fri Sep 8 22:29:43 2017 +0200
Branches: temp-workspace-changes
https://developer.blender.org/rB7012dc5a4f6a045b2c9fb99e1a4bbb58174ce75c

Context: Expose "engine" for Python and add BKE_render_engine_get()

===================================================================

M	source/blender/blenkernel/BKE_context.h
M	source/blender/blenkernel/BKE_scene.h
M	source/blender/blenkernel/BKE_workspace.h
M	source/blender/blenkernel/intern/context.c
M	source/blender/blenkernel/intern/scene.c
M	source/blender/blenkernel/intern/workspace.c
M	source/blender/makesrna/intern/rna_context.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_context.h b/source/blender/blenkernel/BKE_context.h
index 350d7a40875..82404e72e17 100644
--- a/source/blender/blenkernel/BKE_context.h
+++ b/source/blender/blenkernel/BKE_context.h
@@ -251,6 +251,7 @@ struct Scene *CTX_data_scene(const bContext *C);
 struct LayerCollection *CTX_data_layer_collection(const bContext *C);
 struct SceneCollection *CTX_data_scene_collection(const bContext *C);
 struct SceneLayer *CTX_data_scene_layer(const bContext *C);
+const char *CTX_data_engine(const bContext *C);
 struct ToolSettings *CTX_data_tool_settings(const bContext *C);
 
 const char *CTX_data_mode_string(const bContext *C);
diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h
index d9dca3c7e85..dbe6d0ebbaf 100644
--- a/source/blender/blenkernel/BKE_scene.h
+++ b/source/blender/blenkernel/BKE_scene.h
@@ -170,6 +170,7 @@ int BKE_scene_num_threads(const struct Scene *scene);
 int BKE_render_num_threads(const struct RenderData *r);
 
 int BKE_render_preview_pixel_size(const struct RenderData *r);
+const char *BKE_render_engine_get(const struct Scene *scene, const struct WorkSpace *workspace);
 
 double BKE_scene_unit_scale(const struct UnitSettings *unit, const int unit_type, double value);
 
diff --git a/source/blender/blenkernel/BKE_workspace.h b/source/blender/blenkernel/BKE_workspace.h
index 14c4247f768..d4b353be4b3 100644
--- a/source/blender/blenkernel/BKE_workspace.h
+++ b/source/blender/blenkernel/BKE_workspace.h
@@ -115,7 +115,7 @@ struct WorkSpaceLayout *BKE_workspace_hook_layout_for_workspace_get(
 void             BKE_workspace_hook_layout_for_workspace_set(
         struct WorkSpaceInstanceHook *hook, struct WorkSpace *workspace, struct WorkSpaceLayout *layout) ATTR_NONNULL();
 
-const char *BKE_workspace_engine_get(struct WorkSpace *workspace) GETTER_ATTRS;
+const char *BKE_workspace_engine_get(const struct WorkSpace *workspace) GETTER_ATTRS;
 void BKE_workspace_engine_set(struct WorkSpace *workspace, const char *engine) SETTER_ATTRS;
 
 /* flags */
diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c
index e9b0b591bf2..eaac6bf8c59 100644
--- a/source/blender/blenkernel/intern/context.c
+++ b/source/blender/blenkernel/intern/context.c
@@ -931,6 +931,20 @@ SceneLayer *CTX_data_scene_layer(const bContext *C)
 	}
 }
 
+const char *CTX_data_engine(const bContext *C)
+{
+	const char *engine;
+
+	if (ctx_data_pointer_verify(C, "engine", (void *)&engine)) {
+		return engine;
+	}
+
+	Scene *scene = CTX_data_scene(C);
+	WorkSpace *workspace = CTX_wm_workspace(C);
+
+	return BKE_render_engine_get(scene, workspace);
+}
+
 /**
  * This is tricky. Sometimes the user overrides the render_layer
  * but not the scene_collection. In this case what to do?
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index b3d9bd79760..493bfec842e 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -49,6 +49,7 @@
 #include "DNA_space_types.h"
 #include "DNA_view3d_types.h"
 #include "DNA_windowmanager_types.h"
+#include "DNA_workspace_types.h"
 #include "DNA_gpencil_types.h"
 
 #include "BLI_math.h"
@@ -2071,6 +2072,14 @@ int BKE_render_preview_pixel_size(const RenderData *r)
 	return r->preview_pixel_size;
 }
 
+const char *BKE_render_engine_get(const Scene *scene, const WorkSpace *workspace)
+{
+	if (workspace == NULL || BKE_workspace_use_scene_settings_get(workspace)) {
+		return scene->r.engine;
+	}
+	return BKE_workspace_engine_get(workspace);
+}
+
 /* Apply the needed correction factor to value, based on unit_type (only length-related are affected currently)
  * and unit->scale_length.
  */
diff --git a/source/blender/blenkernel/intern/workspace.c b/source/blender/blenkernel/intern/workspace.c
index 14cd7d28e59..e1911a7990a 100644
--- a/source/blender/blenkernel/intern/workspace.c
+++ b/source/blender/blenkernel/intern/workspace.c
@@ -435,7 +435,7 @@ void BKE_workspace_hook_layout_for_workspace_set(
 /**
  * Get the render engine of a workspace, to be used in the viewport.
  */
-const char *BKE_workspace_engine_get(WorkSpace *workspace)
+const char *BKE_workspace_engine_get(const WorkSpace *workspace)
 {
 	return (const char *)workspace->engine;
 }
diff --git a/source/blender/makesrna/intern/rna_context.c b/source/blender/makesrna/intern/rna_context.c
index 5701150b1bf..b70e443fe65 100644
--- a/source/blender/makesrna/intern/rna_context.c
+++ b/source/blender/makesrna/intern/rna_context.c
@@ -133,6 +133,18 @@ static PointerRNA rna_Context_scene_layer_get(PointerRNA *ptr)
 	return rna_pointer_inherit_refine(ptr, &RNA_SceneLayer, CTX_data_scene_layer(C));
 }
 
+static void rna_Context_engine_get(PointerRNA *ptr, char *value)
+ {
+	bContext *C = (bContext *)ptr->data;
+	strcpy(value, CTX_data_engine(C));
+}
+
+static int rna_Context_engine_length(PointerRNA *ptr)
+{
+	bContext *C = (bContext *)ptr->data;
+	return strlen(CTX_data_engine(C));
+}
+
 static PointerRNA rna_Context_scene_collection_get(PointerRNA *ptr)
 {
 	bContext *C = (bContext *)ptr->data;
@@ -263,6 +275,10 @@ void RNA_def_context(BlenderRNA *brna)
 	RNA_def_property_struct_type(prop, "SceneLayer");
 	RNA_def_property_pointer_funcs(prop, "rna_Context_scene_layer_get", NULL, NULL, NULL);
 
+	prop = RNA_def_property(srna, "engine", PROP_STRING, PROP_NONE);
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+	RNA_def_property_string_funcs(prop, "rna_Context_engine_get", "rna_Context_engine_length", NULL);
+
 	prop = RNA_def_property(srna, "scene_collection", PROP_POINTER, PROP_NONE);
 	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
 	RNA_def_property_struct_type(prop, "SceneCollection");



More information about the Bf-blender-cvs mailing list