Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeroen Bakker <j.bakker@atmind.nl>2018-04-30 16:50:08 +0300
committerJeroen Bakker <j.bakker@atmind.nl>2018-04-30 16:54:38 +0300
commitcbe57acddf9554d11988718758096f9d847e9c95 (patch)
treed496e04a5a28e18e13bf2d124b378ee6132ca0a2 /source/blender
parentd9f395ac390d1e02aa9c3e97ebaee8bb834e3af4 (diff)
Workbench: Integration VertexPaint and WeightPaint modes
- Disable VertexPaint and WeightPaint for OB_MATERIAL and OB_RENDER. Users want to see the final result - When in OB_SOLID, the active object should be rendered without any color. The lighting information is multiplied with the VertexPaint/WeightPaint color - Removed the use_shading flag from VertexPaint and WeightPaint - add method to check if render engine should draw without color (DRW_object_in_only_lighting_mode) Reviewers: fclem Tags: #code_quest Maniphest Tasks: T54894 Differential Revision: https://developer.blender.org/D3191
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/draw/engines/workbench/workbench_materials.c6
-rw-r--r--source/blender/draw/intern/DRW_render.h1
-rw-r--r--source/blender/draw/intern/draw_manager.c15
-rw-r--r--source/blender/draw/modes/paint_vertex_mode.c8
-rw-r--r--source/blender/draw/modes/paint_weight_mode.c8
5 files changed, 24 insertions, 14 deletions
diff --git a/source/blender/draw/engines/workbench/workbench_materials.c b/source/blender/draw/engines/workbench/workbench_materials.c
index ae864539fb2..5dd2c1e9c01 100644
--- a/source/blender/draw/engines/workbench/workbench_materials.c
+++ b/source/blender/draw/engines/workbench/workbench_materials.c
@@ -174,7 +174,11 @@ static void workbench_init_object_data(ObjectEngineData *engine_data)
static void get_material_solid_color(WORKBENCH_PrivateData *wpd, WORKBENCH_ObjectData *engine_object_data, Object *ob, float *color, float hsv_saturation, float hsv_value)
{
- if (wpd->drawtype_options & V3D_DRAWOPTION_RANDOMIZE) {
+ static float default_color[] = {1.0f, 1.0f, 1.0f};
+ if (DRW_object_is_paint_mode(ob)) {
+ copy_v3_v3(color, default_color);
+ }
+ else if (wpd->drawtype_options & V3D_DRAWOPTION_RANDOMIZE) {
float offset = fmodf(engine_object_data->object_id * M_GOLDEN_RATION_CONJUGATE, 1.0);
float hsv[3] = {offset, hsv_saturation, hsv_value};
hsv_to_rgb_v(hsv, color);
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 12003adf80a..e287bcc99df 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -458,6 +458,7 @@ bool DRW_object_is_renderable(struct Object *ob);
bool DRW_check_object_visible_within_active_context(struct Object *ob);
bool DRW_object_is_flat_normal(const struct Object *ob);
int DRW_object_is_mode_shade(const struct Object *ob);
+int DRW_object_is_paint_mode(const struct Object *ob);
/* Draw commands */
void DRW_draw_pass(DRWPass *pass);
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index e1f4cdacdb4..cdc598d01b0 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -196,7 +196,10 @@ int DRW_object_is_mode_shade(const Object *ob)
BLI_assert(ob == DST.draw_ctx.obact);
UNUSED_VARS_NDEBUG(ob);
if ((DST.draw_ctx.object_mode & OB_MODE_EDIT) == 0) {
- if (DST.draw_ctx.object_mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)) {
+ if ((DST.draw_ctx.object_mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT)) > 0) {
+ return !(ELEM(DST.draw_ctx.v3d->drawtype, OB_MATERIAL, OB_RENDER));
+ }
+ else if (DST.draw_ctx.object_mode & (OB_MODE_TEXTURE_PAINT)) {
if ((DST.draw_ctx.v3d->flag2 & V3D_SHOW_MODE_SHADE_OVERRIDE) == 0) {
return true;
}
@@ -208,6 +211,16 @@ int DRW_object_is_mode_shade(const Object *ob)
return -1;
}
+int DRW_object_is_paint_mode(const Object *ob)
+{
+ if (ob == DST.draw_ctx.obact) {
+ if ((DST.draw_ctx.object_mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT)) > 0) {
+ return true;
+ }
+ }
+ return false;
+}
+
/** \} */
diff --git a/source/blender/draw/modes/paint_vertex_mode.c b/source/blender/draw/modes/paint_vertex_mode.c
index 835fefdee26..2c963571302 100644
--- a/source/blender/draw/modes/paint_vertex_mode.c
+++ b/source/blender/draw/modes/paint_vertex_mode.c
@@ -96,8 +96,6 @@ static void PAINT_VERTEX_engine_init(void *UNUSED(vedata))
}
}
-static float world_light;
-
static void PAINT_VERTEX_cache_init(void *vedata)
{
PAINT_VERTEX_PassList *psl = ((PAINT_VERTEX_Data *)vedata)->psl;
@@ -112,12 +110,13 @@ static void PAINT_VERTEX_cache_init(void *vedata)
/* Create a pass */
psl->vcolor_faces = DRW_pass_create(
"Vert Color Pass",
- DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS);
+ DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_MULTIPLY);
stl->g_data->fvcolor_shgrp = DRW_shgroup_create(e_data.vcolor_face_shader, psl->vcolor_faces);
static float light[3] = {-0.3f, 0.5f, 1.0f};
static float alpha = 1.0f;
+ static float world_light = 1.0f;
DRW_shgroup_uniform_vec3(stl->g_data->fvcolor_shgrp, "light", light, 1);
DRW_shgroup_uniform_float(stl->g_data->fvcolor_shgrp, "alpha", &alpha, 1);
DRW_shgroup_uniform_float(stl->g_data->fvcolor_shgrp, "global", &world_light, 1);
@@ -156,8 +155,6 @@ static void PAINT_VERTEX_cache_populate(void *vedata, Object *ob)
const bool use_face_sel = (me->editflag & ME_EDIT_PAINT_FACE_SEL) != 0;
struct Gwn_Batch *geom;
- world_light = BKE_collection_engine_property_value_get_bool(ces_mode_pw, "use_shading") ? 0.5f : 1.0f;
-
if (use_surface) {
geom = DRW_cache_mesh_surface_vert_colors_get(ob);
DRW_shgroup_call_add(stl->g_data->fvcolor_shgrp, geom, ob->obmat);
@@ -195,7 +192,6 @@ void PAINT_VERTEX_collection_settings_create(IDProperty *properties)
properties->type == IDP_GROUP &&
properties->subtype == IDP_GROUP_SUB_MODE_PAINT_VERTEX);
- BKE_collection_engine_property_add_bool(properties, "use_shading", true);
BKE_collection_engine_property_add_bool(properties, "use_wire", false);
}
diff --git a/source/blender/draw/modes/paint_weight_mode.c b/source/blender/draw/modes/paint_weight_mode.c
index 3cc2ad63ed4..a5a9f355dc6 100644
--- a/source/blender/draw/modes/paint_weight_mode.c
+++ b/source/blender/draw/modes/paint_weight_mode.c
@@ -118,8 +118,6 @@ static void PAINT_WEIGHT_engine_init(void *UNUSED(vedata))
}
}
-static float world_light;
-
static void PAINT_WEIGHT_cache_init(void *vedata)
{
PAINT_WEIGHT_PassList *psl = ((PAINT_WEIGHT_Data *)vedata)->psl;
@@ -134,12 +132,13 @@ static void PAINT_WEIGHT_cache_init(void *vedata)
/* Create a pass */
psl->weight_faces = DRW_pass_create(
"Weight Pass",
- DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS);
+ DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS | DRW_STATE_MULTIPLY);
stl->g_data->fweights_shgrp = DRW_shgroup_create(e_data.weight_face_shader, psl->weight_faces);
static float light[3] = {-0.3f, 0.5f, 1.0f};
static float alpha = 1.0f;
+ static float world_light = 1.0f;
DRW_shgroup_uniform_vec3(stl->g_data->fweights_shgrp, "light", light, 1);
DRW_shgroup_uniform_float(stl->g_data->fweights_shgrp, "alpha", &alpha, 1);
DRW_shgroup_uniform_float(stl->g_data->fweights_shgrp, "global", &world_light, 1);
@@ -187,8 +186,6 @@ static void PAINT_WEIGHT_cache_populate(void *vedata, Object *ob)
const bool use_vert_sel = (me->editflag & ME_EDIT_PAINT_VERT_SEL) != 0;
struct Gwn_Batch *geom;
- world_light = BKE_collection_engine_property_value_get_bool(ces_mode_pw, "use_shading") ? 0.5f : 1.0f;
-
if (use_surface) {
geom = DRW_cache_mesh_surface_weights_get(ob);
DRW_shgroup_call_add(stl->g_data->fweights_shgrp, geom, ob->obmat);
@@ -233,7 +230,6 @@ void PAINT_WEIGHT_collection_settings_create(IDProperty *properties)
properties->type == IDP_GROUP &&
properties->subtype == IDP_GROUP_SUB_MODE_PAINT_WEIGHT);
- BKE_collection_engine_property_add_bool(properties, "use_shading", true);
BKE_collection_engine_property_add_bool(properties, "use_wire", false);
}