[Bf-blender-cvs] [b0d5e74fcce] blender2.8: Workbench: drawtype object color from collection to v3d
Jeroen Bakker
noreply at git.blender.org
Thu Apr 19 12:47:29 CEST 2018
Commit: b0d5e74fcce929c649391a9f694ee39649a84e1c
Author: Jeroen Bakker
Date: Thu Apr 19 12:44:37 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBb0d5e74fcce929c649391a9f694ee39649a84e1c
Workbench: drawtype object color from collection to v3d
Now every 3d view can have its own solid draw color setting
===================================================================
M release/scripts/startup/bl_ui/properties_collection.py
M release/scripts/startup/bl_ui/properties_render.py
M source/blender/draw/engines/workbench/solid_flat_mode.c
M source/blender/draw/engines/workbench/solid_studio_mode.c
M source/blender/draw/engines/workbench/workbench_engine.c
M source/blender/draw/engines/workbench/workbench_materials.c
M source/blender/draw/engines/workbench/workbench_private.h
M source/blender/editors/space_view3d/view3d_header.c
M source/blender/makesdna/DNA_view3d_types.h
M source/blender/makesrna/intern/rna_layer.c
M source/blender/makesrna/intern/rna_space.c
===================================================================
diff --git a/release/scripts/startup/bl_ui/properties_collection.py b/release/scripts/startup/bl_ui/properties_collection.py
index 25b4664ab83..8d795681d4c 100644
--- a/release/scripts/startup/bl_ui/properties_collection.py
+++ b/release/scripts/startup/bl_ui/properties_collection.py
@@ -87,7 +87,7 @@ class COLLECTION_PT_clay_settings(CollectionButtonsPanel, Panel):
class COLLECTION_PT_workbench_settings(CollectionButtonsPanel, Panel):
- bl_label = "Workbench Settings"
+ bl_label = "Collection Settings"
def draw(self, context):
layout = self.layout
@@ -96,7 +96,6 @@ class COLLECTION_PT_workbench_settings(CollectionButtonsPanel, Panel):
collection_props = collection.engine_overrides['BLENDER_WORKBENCH']
col = layout.column()
- col.template_override_property(collection_props, scene_props, "object_color_type")
col.template_override_property(collection_props, scene_props, "object_color")
diff --git a/release/scripts/startup/bl_ui/properties_render.py b/release/scripts/startup/bl_ui/properties_render.py
index a0d7e9b1026..779a77cf7ca 100644
--- a/release/scripts/startup/bl_ui/properties_render.py
+++ b/release/scripts/startup/bl_ui/properties_render.py
@@ -898,20 +898,6 @@ class RENDER_PT_eevee_film(RenderButtonsPanel, Panel):
col.prop(rd, "alpha_mode", text="Alpha")
-class RENDER_PT_workbench_collection_settings(RenderButtonsPanel, Panel):
- bl_label = "Workbench Settings"
- COMPAT_ENGINES = {'BLENDER_WORKBENCH', 'BLENDER_EEVEE', 'CYCLES'}
-
- def draw(self, context):
- layout = self.layout
- props = context.scene.collection_properties['BLENDER_WORKBENCH']
-
- col = layout.column()
- col.prop(props, "object_color_type")
- if props.object_color_type == 'COLLECTION':
- col.prop(props, "object_color")
-
-
classes = (
RENDER_MT_presets,
RENDER_MT_ffmpeg_presets,
@@ -941,7 +927,6 @@ classes = (
RENDER_PT_eevee_motion_blur,
RENDER_PT_eevee_depth_of_field,
RENDER_PT_eevee_bloom,
- RENDER_PT_workbench_collection_settings,
)
if __name__ == "__main__": # only for live edit.
diff --git a/source/blender/draw/engines/workbench/solid_flat_mode.c b/source/blender/draw/engines/workbench/solid_flat_mode.c
index 91557832388..e98783446d6 100644
--- a/source/blender/draw/engines/workbench/solid_flat_mode.c
+++ b/source/blender/draw/engines/workbench/solid_flat_mode.c
@@ -68,7 +68,7 @@ static void workbench_solid_flat_cache_init(void *vedata)
static void workbench_solid_flat_cache_populate(void *vedata, Object *ob)
{
WORKBENCH_Data * data = (WORKBENCH_Data *)vedata;
- workbench_materials_solid_cache_populate(data, ob, V3D_LIGHTING_FLAT);
+ workbench_materials_solid_cache_populate(data, ob);
}
static void workbench_solid_flat_cache_finish(void *UNUSED(vedata))
diff --git a/source/blender/draw/engines/workbench/solid_studio_mode.c b/source/blender/draw/engines/workbench/solid_studio_mode.c
index 37a6f1dd4fd..046ad38fa91 100644
--- a/source/blender/draw/engines/workbench/solid_studio_mode.c
+++ b/source/blender/draw/engines/workbench/solid_studio_mode.c
@@ -68,7 +68,7 @@ static void workbench_solid_studio_cache_init(void *vedata)
static void workbench_solid_studio_cache_populate(void *vedata, Object *ob)
{
WORKBENCH_Data * data = (WORKBENCH_Data *)vedata;
- workbench_materials_solid_cache_populate(data, ob, V3D_LIGHTING_STUDIO);
+ workbench_materials_solid_cache_populate(data, ob);
}
static void workbench_solid_studio_cache_finish(void *UNUSED(vedata))
diff --git a/source/blender/draw/engines/workbench/workbench_engine.c b/source/blender/draw/engines/workbench/workbench_engine.c
index 5a2c70ce810..2b6c95e301f 100644
--- a/source/blender/draw/engines/workbench/workbench_engine.c
+++ b/source/blender/draw/engines/workbench/workbench_engine.c
@@ -49,7 +49,6 @@ static void workbench_layer_collection_settings_create(RenderEngine *UNUSED(engi
props->type == IDP_GROUP &&
props->subtype == IDP_GROUP_SUB_ENGINE_RENDER);
float default_object_color[3] = {1.0, 1.0, 1.0};
- BKE_collection_engine_property_add_int(props, "object_color_type", V3D_OBJECT_COLOR_COLLECTION);
BKE_collection_engine_property_add_float_array(props, "object_color", default_object_color, 3);
}
diff --git a/source/blender/draw/engines/workbench/workbench_materials.c b/source/blender/draw/engines/workbench/workbench_materials.c
index 1c80d9c3354..1338fccf61f 100644
--- a/source/blender/draw/engines/workbench/workbench_materials.c
+++ b/source/blender/draw/engines/workbench/workbench_materials.c
@@ -55,11 +55,10 @@ static uint get_material_hash(const float color[3])
return r + g * 4096 + b * 4096 * 4096;
}
-static const float* get_material_solid_color(Object *ob)
+static const float* get_material_solid_color(WORKBENCH_PrivateData *wpd, Object *ob)
{
IDProperty *props = BKE_layer_collection_engine_evaluated_get(ob, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_WORKBENCH);
- int object_color_option = BKE_collection_engine_property_value_get_int(props, "object_color_type");
- switch (object_color_option)
+ switch (wpd->drawtype_object_color)
{
default:
case V3D_OBJECT_COLOR_COLLECTION:
@@ -104,11 +103,33 @@ void workbench_materials_cache_init(WORKBENCH_Data *vedata)
WORKBENCH_PassList *psl = vedata->psl;
WORKBENCH_PrivateData *wpd = stl->g_data;
+ const DRWContextState *DCS = DRW_context_state_get();
+
wpd->depth_shgrp = DRW_shgroup_create(e_data.depth_sh, psl->depth_pass);
wpd->material_hash = BLI_ghash_ptr_new("Workbench material_hash");
+
+ View3D *v3d = DCS->v3d;
+ if (v3d) {
+ wpd->drawtype_object_color = v3d->drawtype_object_color;
+#if 0
+ /* TODO: switch implementation when OB_TEXTURE is implemented */
+ switch (v3d->drawtype) {
+ default:
+ case OB_SOLID:
+ wpd->drawtype_lighting = v3d->drawtype_solid;
+ break;
+ }
+#else
+ wpd->drawtype_lighting = v3d->drawtype_solid;
+#endif
+ }
+ else {
+ wpd->drawtype_object_color = V3D_OBJECT_COLOR_COLLECTION;
+ wpd->drawtype_lighting = V3D_LIGHTING_STUDIO;
+ }
}
-void workbench_materials_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob, int lighting_mode)
+void workbench_materials_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob)
{
WORKBENCH_StorageList *stl = vedata->stl;
WORKBENCH_PassList *psl = vedata->psl;
@@ -124,9 +145,9 @@ void workbench_materials_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob
DRW_shgroup_call_add(stl->g_data->depth_shgrp, geom, ob->obmat);
/* Solid */
- GPUShader *shader = lighting_mode == V3D_LIGHTING_FLAT?e_data.solid_flat_sh:e_data.solid_studio_sh;
+ GPUShader *shader = wpd->drawtype_lighting == V3D_LIGHTING_FLAT?e_data.solid_flat_sh:e_data.solid_studio_sh;
- const float *color = get_material_solid_color(ob);
+ const float *color = get_material_solid_color(wpd, ob);
uint hash = get_material_hash(color);
material = BLI_ghash_lookup(wpd->material_hash, SET_UINT_IN_POINTER(hash));
diff --git a/source/blender/draw/engines/workbench/workbench_private.h b/source/blender/draw/engines/workbench/workbench_private.h
index fe0180e3f79..b2d79ec39ee 100644
--- a/source/blender/draw/engines/workbench/workbench_private.h
+++ b/source/blender/draw/engines/workbench/workbench_private.h
@@ -52,10 +52,12 @@ typedef struct WORKBENCH_Data {
typedef struct WORKBENCH_PrivateData {
DRWShadingGroup *depth_shgrp;
-
+
DRWShadingGroup *shadeless_shgrp;
-
+
struct GHash *material_hash;
+ short drawtype_object_color;
+ short drawtype_lighting;
} WORKBENCH_PrivateData; /* Transient data */
typedef struct WORKBENCH_MaterialData {
@@ -80,6 +82,6 @@ void workbench_materials_engine_init(void);
void workbench_materials_engine_free(void);
void workbench_materials_draw_scene_finish(WORKBENCH_Data *vedata);
void workbench_materials_cache_init(WORKBENCH_Data *vedata);
-void workbench_materials_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob, int lighting_mode);
+void workbench_materials_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob);
#endif
diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c
index 563ff188f0d..1c154947c10 100644
--- a/source/blender/editors/space_view3d/view3d_header.c
+++ b/source/blender/editors/space_view3d/view3d_header.c
@@ -307,6 +307,7 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C)
uiItemR(layout, &v3dptr, "viewport_shade", UI_ITEM_R_ICON_ONLY, "", ICON_NONE);
if (v3d->drawtype == OB_SOLID) {
uiItemR(layout, &v3dptr, "viewport_shade_solid", 0, "", ICON_NONE);
+ uiItemR(layout, &v3dptr, "viewport_object_color_type", 0, "", ICON_NONE);
}
row = uiLayoutRow(layout, true);
diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h
index ed42a2e8b71..18b5ab70196 100644
--- a/source/blender/makesdna/DNA_view3d_types.h
+++ b/source/blender/makesdna/DNA_view3d_types.h
@@ -252,6 +252,9 @@ typedef struct View3D {
short drawtype_solid;
/* drawtype subtype (lighting) used when drawtype == OB_TEXTURE */
short drawtype_texture;
+ /* how to draw objects when drawtype == OB_SOLID */
+ short drawtype_object_color;
+ char pad5[6];
View3DDebug debug;
} View3D;
diff --git a/source/blender/makesrna/intern/rna_layer.c b/source/blender/makesrna/intern/rna_layer.c
index 245f368ce30..4ccf5d8bc33 100644
--- a/source/blender/makesrna/intern/rna_layer.c
+++ b/source/blender/makesrna/intern/rna_layer.c
@@ -363,7 +363,6 @@ RNA_LAYER_ENGINE_CLAY_GET_SET_FLOAT(hair_brightness_randomness)
/* workbench engine */
/* LayerCollection settings. */
RNA_LAYER_ENGINE_WORKBENCH_GET_SET_FLOAT_ARRAY(object_color, 3)
-RNA_LAYER_ENGINE_WORKBENCH_GET_SET_INT(object_color_type)
/* eevee engine */
/* ViewLayer settings. */
@@ -1673,24 +1672,11 @@ static void rna_def_layer_collection_engine_settings_workbench(BlenderRNA *brna)
StructRNA *srna;
PropertyRNA *prop;
- static const EnumPropertyItem object_color_type_items[] = {
- {V3D_OBJECT_COLOR_COLLECTION, "COLLECTION", 0, "Collection", ""},
- {V3D_OBJECT_COLOR_OBJECT, "OBJECT", 0, "Object", ""},
- {0, NULL, 0, NULL, NULL}
- };
-
srna = R
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list