[Bf-blender-cvs] [4f65ba19c13] blender2.8-workbench: Merge branch 'blender2.8' into blender2.8-workbench
Jeroen Bakker
noreply at git.blender.org
Wed May 2 15:13:39 CEST 2018
Commit: 4f65ba19c1361a02727ba6674e7ca95b65238c23
Author: Jeroen Bakker
Date: Wed May 2 12:11:24 2018 +0200
Branches: blender2.8-workbench
https://developer.blender.org/rB4f65ba19c1361a02727ba6674e7ca95b65238c23
Merge branch 'blender2.8' into blender2.8-workbench
===================================================================
===================================================================
diff --cc release/scripts/startup/bl_ui/space_view3d.py
index 81815ed3f91,2fa4061faaf..fbf72a32eb4
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@@ -3540,9 -3549,8 +3549,9 @@@ class VIEW3D_PT_shading(Panel)
col.row().prop(shading, "light", expand=True)
col.separator()
- col.prop(shading, "show_random_object_colors")
+ col.row().prop(shading, "single_color_mode", expand=True)
col.prop(shading, "show_object_overlap")
+ col.prop(shading, "show_shadows")
if shading.light == 'STUDIO':
# TODO: don't store these settings in the scene
diff --cc source/blender/draw/engines/workbench/workbench_materials.c
index 4df5f31390e,6ea65855f0b..0187f3d1581
--- a/source/blender/draw/engines/workbench/workbench_materials.c
+++ b/source/blender/draw/engines/workbench/workbench_materials.c
@@@ -307,44 -287,28 +317,44 @@@ void workbench_materials_cache_init(WOR
copy_v3_v3(wd->diffuse_light_y_neg, BKE_collection_engine_property_value_get_float_array(props, "diffuse_light_y_neg"));
copy_v3_v3(wd->diffuse_light_z_pos, BKE_collection_engine_property_value_get_float_array(props, "diffuse_light_z_pos"));
copy_v3_v3(wd->diffuse_light_z_neg, BKE_collection_engine_property_value_get_float_array(props, "diffuse_light_z_neg"));
-
- psl->composite_pass = DRW_pass_create("Composite", DRW_STATE_WRITE_COLOR);
- grp = DRW_shgroup_create(wpd->composite_sh, psl->composite_pass);
- DRW_shgroup_uniform_texture_ref(grp, "depthBuffer", &dtxl->depth);
- DRW_shgroup_uniform_texture_ref(grp, "colorBuffer", &e_data.color_buffer_tx);
- if (OBJECT_ID_PASS_ENABLED(wpd)) {
- DRW_shgroup_uniform_texture_ref(grp, "objectId", &e_data.object_id_tx);
- }
- if (NORMAL_VIEWPORT_PASS_ENABLED(wpd)) {
- DRW_shgroup_uniform_texture_ref(grp, "normalBuffer", &e_data.normal_buffer_tx);
- }
wpd->world_ubo = DRW_uniformbuffer_create(sizeof(WORKBENCH_UBO_World), NULL);
- DRW_shgroup_uniform_block(grp, "world_block", wpd->world_ubo);
DRW_uniformbuffer_update(wpd->world_ubo, &wpd->world_data);
- DRW_shgroup_uniform_vec2(grp, "invertedViewportSize", DRW_viewport_invert_size_get(), 1);
- DRW_shgroup_call_add(grp, DRW_cache_fullscreen_quad_get(), NULL);
- }
+ copy_v3_v3(e_data.light_direction, BKE_collection_engine_property_value_get_float_array(props, "light_direction"));
+ negate_v3(e_data.light_direction);
+ psl->composite_pass = DRW_pass_create("Composite", DRW_STATE_WRITE_COLOR | DRW_STATE_STENCIL_EQUAL);
+ grp = DRW_shgroup_create(wpd->composite_sh, psl->composite_pass);
+ workbench_composite_uniforms(wpd, grp);
+ DRW_shgroup_stencil_mask(grp, 0x00);
+ DRW_shgroup_uniform_float(grp, "lightMultiplier", &e_data.light_multiplier, 1);
+ DRW_shgroup_call_add(grp, DRW_cache_fullscreen_quad_get(), NULL);
+ if (SHADOW_ENABLED(wpd)) {
+#ifdef SHOW_SHADOW_VOLUME
+ psl->shadow_pass = DRW_pass_create("Shadow", DRW_STATE_DEPTH_LESS | DRW_STATE_WRITE_COLOR );
+ grp = DRW_shgroup_create(e_data.shadow_sh, psl->shadow_pass);
+ DRW_shgroup_uniform_vec3(grp, "lightDirection", e_data.light_direction, 1);
+ DRW_shgroup_stencil_mask(grp, 0xFF);
+ wpd->shadow_shgrp = grp;
+#else
+ psl->shadow_pass = DRW_pass_create("Shadow", DRW_STATE_DEPTH_LESS | DRW_STATE_WRITE_STENCIL | DRW_STATE_STENCIL_INCR_DECR_WRAP);
+ grp = DRW_shgroup_create(e_data.shadow_sh, psl->shadow_pass);
+ DRW_shgroup_uniform_vec3(grp, "lightDirection", e_data.light_direction, 1);
+ DRW_shgroup_stencil_mask(grp, 0xFF);
+ wpd->shadow_shgrp = grp;
+
+ psl->composite_shadow_pass = DRW_pass_create("Composite Shadow", DRW_STATE_WRITE_COLOR | DRW_STATE_STENCIL_NEQUAL);
+ grp = DRW_shgroup_create(wpd->composite_sh, psl->composite_shadow_pass);
+ DRW_shgroup_stencil_mask(grp, 0x00);
+ workbench_composite_uniforms(wpd, grp);
+ DRW_shgroup_uniform_float(grp, "lightMultiplier", &e_data.shadow_multiplier, 1);
+ DRW_shgroup_call_add(grp, DRW_cache_fullscreen_quad_get(), NULL);
+#endif
+ }
+ }
}
- static WORKBENCH_MaterialData *get_or_create_material_data(WORKBENCH_Data *vedata, IDProperty *props, Object *ob)
+ static WORKBENCH_MaterialData *get_or_create_material_data(WORKBENCH_Data *vedata, IDProperty *props, Object *ob, Material *mat)
{
WORKBENCH_StorageList *stl = vedata->stl;
WORKBENCH_PassList *psl = vedata->psl;
@@@ -420,29 -380,42 +430,49 @@@ void workbench_materials_solid_cache_po
if (ob->type == OB_MESH) {
workbench_cache_populate_particles(vedata, props, ob);
}
-
- struct Gwn_Batch *geom = DRW_cache_object_surface_get(ob);
-
+
WORKBENCH_MaterialData *material;
- if (geom) {
+ if (ELEM(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT)) {
const DRWContextState *draw_ctx = DRW_context_state_get();
const bool is_active = (ob == draw_ctx->obact);
-
- material = get_or_create_material_data(vedata, props, ob);
const bool is_sculpt_mode = is_active && (draw_ctx->object_mode & OB_MODE_SCULPT) != 0;
- if (is_sculpt_mode) {
- DRW_shgroup_call_sculpt_add(material->shgrp, ob, ob->obmat);
- }
- else {
- DRW_shgroup_call_object_add(material->shgrp, geom, ob);
+
+ if ((vedata->stl->g_data->drawtype_options & V3D_DRAWOPTION_SOLID_COLOR_MASK) != 0 || is_sculpt_mode) {
+ /* No material split needed */
+ struct Gwn_Batch *geom = DRW_cache_object_surface_get(ob);
+ if (geom) {
+ material = get_or_create_material_data(vedata, props, ob, NULL);
+ if (is_sculpt_mode) {
+ DRW_shgroup_call_sculpt_add(material->shgrp, ob, ob->obmat);
+ }
+ else {
+ DRW_shgroup_call_object_add(material->shgrp, geom, ob);
+ }
+ }
+ }
+ else { /* MATERIAL colors */
+ const int materials_len = MAX2(1, (is_sculpt_mode ? 1 : ob->totcol));
+ struct GPUMaterial **gpumat_array = BLI_array_alloca(gpumat_array, materials_len);
+ for (int i = 0; i < materials_len; i ++) {
+ gpumat_array[i] = NULL;
+ }
+
+ struct Gwn_Batch **mat_geom = DRW_cache_object_surface_material_get(ob, gpumat_array, materials_len);
+ if (mat_geom) {
+ for (int i = 0; i < materials_len; ++i) {
+ Material *mat = give_current_material(ob, i + 1);
+ material = get_or_create_material_data(vedata, props, ob, mat);
+ DRW_shgroup_call_object_add(material->shgrp, mat_geom[i], ob);
+ }
+ }
}
+
+ if (SHADOW_ENABLED(wpd)) {
+ struct Gwn_Batch *geom_shadow = DRW_cache_mesh_wire_outline_get(ob);
+ if (geom_shadow) {
+ DRW_shgroup_call_object_add(wpd->shadow_shgrp, geom_shadow, ob);
+ }
+ }
}
}
diff --cc source/blender/makesdna/DNA_view3d_types.h
index a0f0e42a9e8,0644837727e..95f36497dc7
--- a/source/blender/makesdna/DNA_view3d_types.h
+++ b/source/blender/makesdna/DNA_view3d_types.h
@@@ -80,11 -80,18 +80,19 @@@ enum
V3D_LIGHTING_SCENE = 2
};
+ /*
+ * V3D_DRAWOPTION_OBJECT_COLOR, V3D_DRAWOPTION_OBJECT_OVERLAP,
+ * V3D_DRAWOPTION_SINGLE_COLOR, V3D_DRAWOPTION_MATERIAL_COLOR are mutual exclusive
+ */
enum {
+ V3D_DRAWOPTION_MATERIAL_COLOR = (0 << 0),
V3D_DRAWOPTION_RANDOMIZE = (1 << 0),
V3D_DRAWOPTION_OBJECT_OVERLAP = (1 << 1),
- V3D_DRAWOPTION_SHADOW = (1 << 2),
+ V3D_DRAWOPTION_SINGLE_COLOR = (1 << 2),
+ V3D_DRAWOPTION_OBJECT_COLOR = (1 << 4),
++ V3D_DRAWOPTION_SHADOW = (1 << 5),
};
+ #define V3D_DRAWOPTION_SOLID_COLOR_MASK (V3D_DRAWOPTION_SINGLE_COLOR | V3D_DRAWOPTION_RANDOMIZE | V3D_DRAWOPTION_OBJECT_COLOR | V3D_DRAWOPTION_MATERIAL_COLOR)
enum {
V3D_OVERLAY_FACE_ORIENTATION = (1 << 0),
diff --cc source/blender/makesrna/intern/rna_space.c
index 0c26cac8b6f,30c00b93867..e063b99909d
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@@ -2210,17 -2228,13 +2228,19 @@@ static void rna_def_space_view3d_shadin
RNA_def_property_ui_text(prop, "Object Overlap", "Show Object Overlap");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update");
- prop = RNA_def_property(srna, "show_random_object_colors", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "drawtype_options", V3D_DRAWOPTION_RANDOMIZE);
- RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
- RNA_def_property_ui_text(prop, "Random Colors", "Show random object colors");
+ prop = RNA_def_property(srna, "single_color_mode", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, single_color_mode_items);
+ RNA_def_property_enum_funcs(prop, "rna_View3DShading_single_color_mode_get",
+ "rna_View3DShading_single_color_mode_set",
+ NULL);
+ RNA_def_property_ui_text(prop, "Color", "Single Color Mode");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update");
+
+ prop = RNA_def_property(srna, "show_shadows", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "drawtype_options", V3D_DRAWOPTION_SHADOW);
+ RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+ RNA_def_property_ui_text(prop, "Shadow", "Show Shadow");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update");
}
static void rna_def_space_view3d_overlay(BlenderRNA *brna)
More information about the Bf-blender-cvs
mailing list