[Bf-blender-cvs] [f20a08e7e94] temp-workspace-changes: Workspace: Add (render) engines

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


Commit: f20a08e7e94b25a14a72c0a69d2c27353a0bb2f2
Author: Dalai Felinto
Date:   Fri Sep 8 21:30:23 2017 +0200
Branches: temp-workspace-changes
https://developer.blender.org/rBf20a08e7e94b25a14a72c0a69d2c27353a0bb2f2

Workspace: Add (render) engines

We still need to change the viewport so it uses this instead of scene.rd.engine.

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

M	release/scripts/startup/bl_ui/space_info.py
M	source/blender/blenkernel/BKE_layer.h
M	source/blender/blenkernel/BKE_workspace.h
M	source/blender/blenkernel/intern/layer.c
M	source/blender/blenkernel/intern/workspace.c
M	source/blender/blenloader/intern/versioning_280.c
M	source/blender/blenloader/intern/versioning_defaults.c
M	source/blender/editors/include/ED_screen.h
M	source/blender/editors/screen/workspace_edit.c
M	source/blender/makesdna/DNA_layer_types.h
M	source/blender/makesdna/DNA_workspace_types.h
M	source/blender/makesrna/intern/rna_scene.c
M	source/blender/makesrna/intern/rna_workspace.c

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

diff --git a/release/scripts/startup/bl_ui/space_info.py b/release/scripts/startup/bl_ui/space_info.py
index f05808c7a2c..64b57032c6c 100644
--- a/release/scripts/startup/bl_ui/space_info.py
+++ b/release/scripts/startup/bl_ui/space_info.py
@@ -32,7 +32,6 @@ class INFO_HT_header(Header):
         screen = context.screen
         scene = context.scene
         layer = context.render_layer
-        rd = scene.render
 
         row = layout.row(align=True)
         row.template_header()
@@ -54,15 +53,17 @@ class INFO_HT_header(Header):
             act_mode_item = bpy.types.Object.bl_rna.properties['mode'].enum_items[layer.objects.active.mode]
         layout.operator_menu_enum("object.mode_set", "mode", text=act_mode_item.name, icon=act_mode_item.icon)
 
-        layout.template_search(workspace, "render_layer", scene, "render_layers")
+        row = layout.row()
+        row.active = not workspace.use_scene_settings
+        row.template_search(workspace, "render_layer", scene, "render_layers")
+
+        if workspace.has_multiple_engines:
+            row.prop(workspace, "engine", text="")
 
         layout.separator()
 
         layout.template_ID(window, "scene", new="scene.new", unlink="scene.delete")
 
-        if rd.has_multiple_engines:
-            layout.prop(rd, "engine", text="")
-
         layout.separator()
 
         layout.template_running_jobs()
diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h
index 276ec4c80f9..b53f13c3be6 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -65,8 +65,6 @@ struct SceneLayer *BKE_scene_layer_context_active_PLACEHOLDER(const struct Scene
 
 void BKE_scene_layer_free(struct SceneLayer *sl);
 
-void BKE_scene_layer_engine_set(struct SceneLayer *sl, const char *engine);
-
 void BKE_scene_layer_selected_objects_tag(struct SceneLayer *sl, const int tag);
 
 struct SceneLayer *BKE_scene_layer_find_from_collection(const struct Scene *scene, struct LayerCollection *lc);
diff --git a/source/blender/blenkernel/BKE_workspace.h b/source/blender/blenkernel/BKE_workspace.h
index 18931c500fc..14c4247f768 100644
--- a/source/blender/blenkernel/BKE_workspace.h
+++ b/source/blender/blenkernel/BKE_workspace.h
@@ -115,6 +115,9 @@ 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;
+void BKE_workspace_engine_set(struct WorkSpace *workspace, const char *engine) SETTER_ATTRS;
+
 /* flags */
 bool BKE_workspace_use_scene_settings_get(const struct WorkSpace *workspace) GETTER_ATTRS;
 void BKE_workspace_use_scene_settings_set(struct WorkSpace *workspace, bool value) SETTER_ATTRS;
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index 42b9eece4ee..2260872b563 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -175,14 +175,6 @@ void BKE_scene_layer_free(SceneLayer *sl)
 }
 
 /**
- * Set the render engine of a renderlayer
- */
-void BKE_scene_layer_engine_set(SceneLayer *sl, const char *engine)
-{
-	BLI_strncpy_utf8(sl->engine, engine, sizeof(sl->engine));
-}
-
-/**
  * Tag all the selected objects of a renderlayer
  */
 void BKE_scene_layer_selected_objects_tag(SceneLayer *sl, const int tag)
diff --git a/source/blender/blenkernel/intern/workspace.c b/source/blender/blenkernel/intern/workspace.c
index defaf15a751..14cd7d28e59 100644
--- a/source/blender/blenkernel/intern/workspace.c
+++ b/source/blender/blenkernel/intern/workspace.c
@@ -29,6 +29,7 @@
 
 #include "BLI_utildefines.h"
 #include "BLI_string.h"
+#include "BLI_string_utf8.h"
 #include "BLI_string_utils.h"
 #include "BLI_listbase.h"
 
@@ -431,6 +432,22 @@ void BKE_workspace_hook_layout_for_workspace_set(
 	workspace_relation_ensure_updated(&workspace->hook_layout_relations, hook, layout);
 }
 
+/**
+ * Get the render engine of a workspace, to be used in the viewport.
+ */
+const char *BKE_workspace_engine_get(WorkSpace *workspace)
+{
+	return (const char *)workspace->engine;
+}
+
+/**
+ * Set the render engine of a workspace, to be used in the viewport.
+ */
+void BKE_workspace_engine_set(WorkSpace *workspace, const char *engine)
+{
+	BLI_strncpy_utf8(workspace->engine, engine, sizeof(workspace->engine));
+}
+
 /* Flags */
 bool BKE_workspace_use_scene_settings_get(const WorkSpace *workspace)
 {
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index f022b393967..1cb6fda8a78 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -192,7 +192,6 @@ void do_versions_after_linking_280(Main *main)
 					for (SceneRenderLayer *srl = scene->r.layers.first; srl; srl = srl->next) {
 
 						SceneLayer *sl = BKE_scene_layer_add(scene, srl->name);
-						BKE_scene_layer_engine_set(sl, scene->r.engine);
 
 						if (srl->mat_override) {
 							BKE_collection_override_datablock_add((LayerCollection *)sl->layer_collections.first, "material", (ID *)srl->mat_override);
@@ -499,4 +498,12 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *main)
 			printf("You need to combine transparency and emission shaders to the converted Principled shader nodes.\n");
 		}
 	}
+
+	{
+		if (!DNA_struct_elem_find(fd->filesdna, "WorkSpace", "char", "engine")) {
+			for (WorkSpace *workspace = main->workspaces.first; workspace; workspace = workspace->id.next) {
+				BKE_workspace_engine_set(workspace, RE_engine_id_BLENDER_EEVEE);
+			}
+		}
+	}
 }
diff --git a/source/blender/blenloader/intern/versioning_defaults.c b/source/blender/blenloader/intern/versioning_defaults.c
index cea3adaf614..c94d208326c 100644
--- a/source/blender/blenloader/intern/versioning_defaults.c
+++ b/source/blender/blenloader/intern/versioning_defaults.c
@@ -103,6 +103,7 @@ static void update_defaults_startup_workspaces(Main *bmain)
 		if (STREQ(workspace->id.name + 2, "Default")) {
 			/* don't rename within iterator, renaming causes listbase to be re-sorted */
 			workspace_default = workspace;
+			BKE_workspace_engine_set(workspace, RE_engine_id_BLENDER_EEVEE);
 		}
 		else {
 			BKE_workspace_remove(bmain, workspace);
diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h
index f68771cb550..615fd77737a 100644
--- a/source/blender/editors/include/ED_screen.h
+++ b/source/blender/editors/include/ED_screen.h
@@ -131,7 +131,8 @@ void    ED_screen_preview_render(const struct bScreen *screen, int size_x, int s
 struct WorkSpace *ED_workspace_add(
         struct Main *bmain,
         const char *name,
-        SceneLayer *act_render_layer) ATTR_NONNULL();
+        SceneLayer *act_render_layer,
+        const char *engine) ATTR_NONNULL();
 bool ED_workspace_change(
         struct WorkSpace *workspace_new,
         struct bContext *C,
diff --git a/source/blender/editors/screen/workspace_edit.c b/source/blender/editors/screen/workspace_edit.c
index 34def82f16e..2d4956d2813 100644
--- a/source/blender/editors/screen/workspace_edit.c
+++ b/source/blender/editors/screen/workspace_edit.c
@@ -68,7 +68,7 @@
  * \{ */
 
 WorkSpace *ED_workspace_add(
-        Main *bmain, const char *name, SceneLayer *act_render_layer)
+        Main *bmain, const char *name, SceneLayer *act_render_layer, const char *engine)
 {
 	WorkSpace *workspace = BKE_workspace_add(bmain, name);
 
@@ -78,6 +78,8 @@ WorkSpace *ED_workspace_add(
 
 	BKE_workspace_render_layer_set(workspace, act_render_layer);
 
+	BKE_workspace_engine_set(workspace, engine);
+
 	return workspace;
 }
 
@@ -215,7 +217,8 @@ WorkSpace *ED_workspace_duplicate(
 	ListBase *layouts_old = BKE_workspace_layouts_get(workspace_old);
 	WorkSpace *workspace_new = ED_workspace_add(
 	        bmain, workspace_old->id.name + 2,
-	        BKE_workspace_render_layer_get(workspace_old));
+	        BKE_workspace_render_layer_get(workspace_old),
+	        BKE_workspace_engine_get(workspace_old));
 	ListBase *transform_orientations_old = BKE_workspace_transform_orientations_get(workspace_old);
 	ListBase *transform_orientations_new = BKE_workspace_transform_orientations_get(workspace_new);
 
diff --git a/source/blender/makesdna/DNA_layer_types.h b/source/blender/makesdna/DNA_layer_types.h
index 03ca6cd8c5c..41362e67ad8 100644
--- a/source/blender/makesdna/DNA_layer_types.h
+++ b/source/blender/makesdna/DNA_layer_types.h
@@ -74,7 +74,6 @@ typedef struct LayerCollection {
 typedef struct SceneLayer {
 	struct SceneLayer *next, *prev;
 	char name[64]; /* MAX_NAME */
-	char engine[32]; /* render engine */
 	short active_collection;
 	short flag;
 	short pad[2];
diff --git a/source/blender/makesdna/DNA_workspace_types.h b/source/blender/makesdna/DNA_workspace_types.h
index 3cd2772550c..0f826a9c51a 100644
--- a/source/blender/makesdna/DNA_workspace_types.h
+++ b/source/blender/makesdna/DNA_workspace_types.h
@@ -80,6 +80,8 @@ typedef struct WorkSpace {
 	int flags DNA_PRIVATE_WORKSPACE; /* enum WorkSpaceFlags */
 
 	struct SceneLayer *render_layer DNA_PRIVATE_WORKSPACE;
+
+	char engine[32]; /* Render Engine. */
 } WorkSpace;
 
 /* internal struct, but exported for read/write */
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index bddc3025123..aa84700d53c 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -3036,59 +3036,6 @@ static void rna_LayerObjects_selected_begin(CollectionPropertyIterator *iter, Po
 	rna_iterator_listbase_begin(iter, &sl->object_bases, rna_SceneLayer_objects_selected_skip);
 }
 
-static void rna_SceneLayer_engine_set(PointerRNA *ptr, int value)
-{
-	SceneLayer *sl = (SceneLayer *)ptr->data;
-	RenderEngineType *type = BLI_findlink(&R_engines, value);
-
-	if (type)
-		BKE_scene_layer_engine_set(sl, type->idname);
-}
-
-static EnumPropertyItem *rna_SceneLayer_engine_itemf(
-        bContext *UNUSED(C), PointerRNA *UNUSED(ptr), Prope

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list