[Bf-blender-cvs] [ce3c7e8ff51] blender2.8: Layers: use IDProperty and override collection properties system

Dalai Felinto noreply at git.blender.org
Thu Mar 30 17:07:12 CEST 2017


Commit: ce3c7e8ff515e5bfbf70d0f4f60557e26c9d98a1
Author: Dalai Felinto
Date:   Thu Mar 30 17:01:23 2017 +0200
Branches: blender2.8
https://developer.blender.org/rBce3c7e8ff515e5bfbf70d0f4f60557e26c9d98a1

Layers: use IDProperty and override collection properties system

First this replace a custom data struct with IDProperty, and use
IDProperty group merge and copying functions. Which means that a collection
property setting is only created if necessary.

This implements the "Layer Collection settings" override system, as
suggested in the "Override Manifesto" document.

The core is working, with Scene, LayerCollection and Object using a
single IDProperty to store all the render settings data. Next step is to
migrate this to depsgraph.

Note: Clay engine "ssao_samples" was hardcoded to 32 for now. It will come
back as part of "Workspace Settings" later.

Many thanks for Bastien Montagne for the help with the UI template
nightmare ;)

Differential Revision: https://developer.blender.org/D2563

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

M	release/scripts/startup/bl_ui/properties_collection.py
M	release/scripts/startup/bl_ui/properties_render.py
M	source/blender/blenkernel/BKE_layer.h
M	source/blender/blenkernel/intern/idprop.c
M	source/blender/blenkernel/intern/layer.c
M	source/blender/blenkernel/intern/material.c
M	source/blender/blenkernel/intern/object.c
M	source/blender/blenkernel/intern/scene.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/versioning_280.c
M	source/blender/blenloader/intern/writefile.c
M	source/blender/draw/DRW_engine.h
M	source/blender/draw/engines/clay/clay.c
M	source/blender/draw/engines/clay/clay.h
M	source/blender/draw/engines/eevee/eevee.c
M	source/blender/draw/intern/DRW_render.h
M	source/blender/draw/intern/draw_manager.c
M	source/blender/draw/modes/edit_mesh_mode.c
M	source/blender/draw/modes/object_mode.c
M	source/blender/editors/include/UI_interface.h
M	source/blender/editors/interface/interface_ops.c
M	source/blender/editors/interface/interface_templates.c
M	source/blender/makesdna/DNA_ID.h
M	source/blender/makesdna/DNA_layer_types.h
M	source/blender/makesdna/DNA_material_types.h
M	source/blender/makesdna/DNA_object_types.h
M	source/blender/makesdna/DNA_scene_types.h
M	source/blender/makesrna/RNA_access.h
M	source/blender/makesrna/intern/rna_material.c
M	source/blender/makesrna/intern/rna_render.c
M	source/blender/makesrna/intern/rna_scene.c
M	source/blender/makesrna/intern/rna_ui_api.c
M	source/blender/render/extern/include/RE_engine.h
M	source/blenderplayer/bad_level_call_stubs/stubs.c

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

diff --git a/release/scripts/startup/bl_ui/properties_collection.py b/release/scripts/startup/bl_ui/properties_collection.py
index ddfc656da08..c1e2b00966c 100644
--- a/release/scripts/startup/bl_ui/properties_collection.py
+++ b/release/scripts/startup/bl_ui/properties_collection.py
@@ -43,27 +43,6 @@ class COLLECTION_PT_context_collection(CollectionButtonsPanel, Panel):
             layout.prop(collection, "name", text="", icon='COLLAPSEMENU')
 
 
-def template_engine_settings(col, settings, name, use_icon_view=False):
-    icons = {
-            False: 'ZOOMIN',
-            True: 'X',
-            }
-
-    use_name = "{0}_use".format(name)
-    use = getattr(settings, use_name)
-
-    row = col.row()
-    col = row.column()
-    col.active = use
-
-    if use_icon_view:
-        col.template_icon_view(settings, name)
-    else:
-        col.prop(settings, name)
-
-    row.prop(settings, "{}_use".format(name), text="", icon=icons[use], emboss=False)
-
-
 class COLLECTION_PT_clay_settings(CollectionButtonsPanel, Panel):
     bl_label = "Render Settings"
     COMPAT_ENGINES = {'BLENDER_CLAY'}
@@ -75,21 +54,20 @@ class COLLECTION_PT_clay_settings(CollectionButtonsPanel, Panel):
 
     def draw(self, context):
         layout = self.layout
-
+        scene_props = context.scene.collection_properties['BLENDER_CLAY']
         collection = context.layer_collection
-        settings = collection.get_engine_settings()
+        collection_props = collection.engine_overrides['BLENDER_CLAY']
 
         col = layout.column()
-        template_engine_settings(col, settings, "type")
-        template_engine_settings(col, settings, "matcap_icon", use_icon_view=True)
-        template_engine_settings(col, settings, "matcap_rotation")
-        template_engine_settings(col, settings, "matcap_hue")
-        template_engine_settings(col, settings, "matcap_saturation")
-        template_engine_settings(col, settings, "matcap_value")
-        template_engine_settings(col, settings, "ssao_factor_cavity")
-        template_engine_settings(col, settings, "ssao_factor_edge")
-        template_engine_settings(col, settings, "ssao_distance")
-        template_engine_settings(col, settings, "ssao_attenuation")
+        col.template_override_property(collection_props, scene_props, "matcap_icon", custom_template="icon_view")
+        col.template_override_property(collection_props, scene_props, "matcap_rotation")
+        col.template_override_property(collection_props, scene_props, "matcap_hue")
+        col.template_override_property(collection_props, scene_props, "matcap_saturation")
+        col.template_override_property(collection_props, scene_props, "matcap_value")
+        col.template_override_property(collection_props, scene_props, "ssao_factor_cavity")
+        col.template_override_property(collection_props, scene_props, "ssao_factor_edge")
+        col.template_override_property(collection_props, scene_props, "ssao_distance")
+        col.template_override_property(collection_props, scene_props, "ssao_attenuation")
 
 
 class COLLECTION_PT_object_mode_settings(CollectionButtonsPanel, Panel):
@@ -102,13 +80,13 @@ class COLLECTION_PT_object_mode_settings(CollectionButtonsPanel, Panel):
 
     def draw(self, context):
         layout = self.layout
-
+        scene_props = context.scene.collection_properties['ObjectMode']
         collection = context.layer_collection
-        settings = collection.get_mode_settings('OBJECT')
+        collection_props = collection.engine_overrides['ObjectMode']
 
         col = layout.column()
-        template_engine_settings(col, settings, "show_wire")
-        template_engine_settings(col, settings, "show_backface_culling")
+        col.template_override_property(collection_props, scene_props, "show_wire")
+        col.template_override_property(collection_props, scene_props, "show_backface_culling")
 
 
 class COLLECTION_PT_edit_mode_settings(CollectionButtonsPanel, Panel):
@@ -121,17 +99,17 @@ class COLLECTION_PT_edit_mode_settings(CollectionButtonsPanel, Panel):
 
     def draw(self, context):
         layout = self.layout
-
+        scene_props = context.scene.collection_properties['EditMode']
         collection = context.layer_collection
-        settings = collection.get_mode_settings('EDIT')
+        collection_props = collection.engine_overrides['EditMode']
 
         col = layout.column()
-        template_engine_settings(col, settings, "show_occlude_wire")
-        template_engine_settings(col, settings, "backwire_opacity")
-        template_engine_settings(col, settings, "face_normals_show")
-        template_engine_settings(col, settings, "vert_normals_show")
-        template_engine_settings(col, settings, "loop_normals_show")
-        template_engine_settings(col, settings, "normals_length")
+        col.template_override_property(collection_props, scene_props, "show_occlude_wire")
+        col.template_override_property(collection_props, scene_props, "backwire_opacity")
+        col.template_override_property(collection_props, scene_props, "face_normals_show")
+        col.template_override_property(collection_props, scene_props, "vert_normals_show")
+        col.template_override_property(collection_props, scene_props, "loop_normals_show")
+        col.template_override_property(collection_props, scene_props, "normals_length")
 
 
 classes = (
diff --git a/release/scripts/startup/bl_ui/properties_render.py b/release/scripts/startup/bl_ui/properties_render.py
index 43c89a32a52..be7104163fd 100644
--- a/release/scripts/startup/bl_ui/properties_render.py
+++ b/release/scripts/startup/bl_ui/properties_render.py
@@ -584,23 +584,24 @@ class RENDER_PT_bake(RenderButtonsPanel, Panel):
             sub.prop(rd, "bake_user_scale", text="User Scale")
 
 
-class RENDER_PT_clay(RenderButtonsPanel, Panel):
-    bl_label = "Default Clay"
+class RENDER_PT_clay_collection_settings(RenderButtonsPanel, Panel):
+    bl_label = "Clay Collection Settings"
     COMPAT_ENGINES = {'BLENDER_CLAY'}
 
     def draw(self, context):
-        layout = self.layout;
-        settings = context.scene.active_engine_settings
-        layout.template_icon_view(settings, "matcap_icon")
-        layout.prop(settings, "matcap_rotation")
-        layout.prop(settings, "matcap_hue")
-        layout.prop(settings, "matcap_saturation")
-        layout.prop(settings, "matcap_value")
-        layout.prop(settings, "ssao_factor_cavity")
-        layout.prop(settings, "ssao_factor_edge")
-        layout.prop(settings, "ssao_distance")
-        layout.prop(settings, "ssao_attenuation")
-        layout.prop(settings, "ssao_samples")
+        layout = self.layout
+        props = context.scene.collection_properties['BLENDER_CLAY']
+
+        col = layout.column()
+        col.template_icon_view(props, "matcap_icon")
+        col.prop(props, "matcap_rotation")
+        col.prop(props, "matcap_hue")
+        col.prop(props, "matcap_saturation")
+        col.prop(props, "matcap_value")
+        col.prop(props, "ssao_factor_cavity")
+        col.prop(props, "ssao_factor_edge")
+        col.prop(props, "ssao_distance")
+        col.prop(props, "ssao_attenuation")
 
 
 classes = (
@@ -618,7 +619,7 @@ classes = (
     RENDER_PT_output,
     RENDER_PT_encoding,
     RENDER_PT_bake,
-    RENDER_PT_clay,
+    RENDER_PT_clay_collection_settings,
 )
 
 if __name__ == "__main__":  # only for live edit.
diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h
index e1ae266aaa8..07d1c255188 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -42,9 +42,11 @@ extern "C" {
 #define TODO_LAYER_DEPSGRAPH /* placeholder for real Depsgraph fix */
 #define TODO_LAYER /* generic todo */
 
-struct CollectionEngineSettings;
+#define ROOT_PROP "root"
+
 struct LayerCollection;
 struct ID;
+struct IDProperty;
 struct ListBase;
 struct Main;
 struct Object;
@@ -75,7 +77,7 @@ void BKE_scene_layer_base_flag_recalculate(struct SceneLayer *sl);
 void BKE_scene_layer_engine_settings_recalculate(struct SceneLayer *sl);
 void BKE_scene_layer_engine_settings_object_recalculate(struct SceneLayer *sl, struct Object *ob);
 void BKE_scene_layer_engine_settings_collection_recalculate(struct SceneLayer *sl, struct LayerCollection *lc);
-void BKE_scene_layer_engine_settings_update(struct SceneLayer *sl);
+void BKE_scene_layer_engine_settings_update(struct Scene *scene, struct SceneLayer *sl);
 
 void BKE_layer_collection_free(struct SceneLayer *sl, struct LayerCollection *lc);
 
@@ -109,28 +111,23 @@ void BKE_layer_sync_object_unlink(const struct Scene *scene, struct SceneCollect
 void BKE_collection_override_datablock_add(struct LayerCollection *lc, const char *data_path, struct ID *id);
 
 /* engine settings */
-typedef void (*CollectionEngineSettingsCB)(struct RenderEngine *engine, struct CollectionEngineSettings *ces);
-struct CollectionEngineSettings *BKE_layer_collection_engine_get(struct LayerCollection *lc, const int type, const char *engine_name);
-struct CollectionEngineSettings *BKE_object_collection_engine_get(struct Object *ob, const int type, const char *engine_name);
+typedef void (*CollectionEngineSettingsCB)(struct RenderEngine *engine, struct IDProperty *props);
+struct IDProperty *BKE_layer_collection_engine_get(struct LayerCollection *lc, const int type, const char *engine_name);
+struct IDProperty *BKE_object_collection_engine_get(struct Object *ob, const int type, const char *engine_name);
 void BKE_layer_collection_engine_settings_callback_register(struct Main *bmain, const char *engine_name, CollectionEngineSettingsCB func);
 void BKE_layer_collection_engine_settings_callback_free(void);
+void BKE_layer_collection_engine_settings_create(struct IDProperty *root);
+
+void BKE_collection_engine_property_add_float(struct IDProperty *props, const char *name, float value);
+void BKE_collection_engine_property_add_int(struct IDProperty *props, const char *name, int value);
+void BKE_collection_engine_property_add_bool(struct IDProperty *props, const char *name, bool value);
 
-struct CollectionEngineSettings *BKE_layer_collection_engine_settings_create(const char *engine_name);
-void BKE_layer_collection_engi

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list