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:
authorCampbell Barton <ideasman42@gmail.com>2014-06-19 16:34:52 +0400
committerCampbell Barton <ideasman42@gmail.com>2014-06-19 16:34:52 +0400
commit74f2e7fbc7f537b963611dbe27a5286c331b801d (patch)
tree7354fa8601f1d06f4dcc7282fcc9f6e561aa0caf /source/blender/editors/space_view3d
parent7ecc3f47342dafce3afa3cebbd08136b780fef0f (diff)
View3D: Handle un-weighed vertex color properly
D608 by Gaia Clary
Diffstat (limited to 'source/blender/editors/space_view3d')
-rw-r--r--source/blender/editors/space_view3d/drawobject.c44
1 files changed, 35 insertions, 9 deletions
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index c9857061abf..a0f6d0d5372 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -2458,6 +2458,11 @@ static void bm_color_from_weight(float col[3], BMVert *vert, drawDMEdgesWeightIn
}
}
+static void draw_dm_edges_nop_interp__setDrawInterpOptions(void *UNUSED(userData), int UNUSED(index), float UNUSED(t))
+{
+ /* pass */
+}
+
static void draw_dm_edges_weight_interp__setDrawInterpOptions(void *userData, int index, float t)
{
drawDMEdgesWeightInterp_userData *data = userData;
@@ -2494,17 +2499,38 @@ static void draw_dm_edges_weight_interp(BMEditMesh *em, DerivedMesh *dm, const c
data.weight_user = weight_user;
UI_GetThemeColor3fv(TH_VERTEX_UNREFERENCED, data.alert_color);
- glEnable(GL_BLEND);
- dm->drawMappedEdgesInterp(dm, draw_dm_edges_sel_interp__setDrawOptions, draw_dm_edges_weight_interp__setDrawInterpOptions, &data);
- glDisable(GL_BLEND);
+ if ((data.vgroup_index != -1) && (data.cd_dvert_offset != -1)) {
+ glEnable(GL_BLEND);
+ dm->drawMappedEdgesInterp(
+ dm,
+ draw_dm_edges_sel_interp__setDrawOptions,
+ draw_dm_edges_weight_interp__setDrawInterpOptions,
+ &data);
+ glDisable(GL_BLEND);
+ }
+ else {
+ float col[3];
+
+ if (data.weight_user == OB_DRAW_GROUPUSER_NONE) {
+ weight_to_rgb(col, 0.0f);
+ }
+ else {
+ copy_v3_v3(col, data.alert_color);
+ }
+ glColor3fv(col);
+
+ dm->drawMappedEdgesInterp(
+ dm,
+ draw_dm_edges_sel_interp__setDrawOptions,
+ draw_dm_edges_nop_interp__setDrawInterpOptions,
+ &data);
+ }
+
}
-static bool draw_dm_edges_weight_check(Mesh *me, BMEditMesh *em, View3D *v3d)
+static bool draw_dm_edges_weight_check(Mesh *me, View3D *v3d)
{
- if ((me->drawflag & ME_DRAWEIGHT) &&
- (em->ob->actdef) &&
- (CustomData_has_layer(&em->bm->vdata, CD_MDEFORMVERT)))
- {
+ if (me->drawflag & ME_DRAWEIGHT) {
if ((v3d->drawtype == OB_WIRE) ||
(v3d->flag2 & V3D_SOLID_MATCAP) ||
((v3d->flag2 & V3D_OCCLUDE_WIRE) && (v3d->drawtype > OB_WIRE)))
@@ -2932,7 +2958,7 @@ static void draw_em_fancy_edges(BMEditMesh *em, Scene *scene, View3D *v3d,
((ts->selectmode & SCE_SELECT_VERTEX) || (me->drawflag & ME_DRAWEIGHT)))
{
glShadeModel(GL_SMOOTH);
- if (draw_dm_edges_weight_check(me, em, v3d)) {
+ if (draw_dm_edges_weight_check(me, v3d)) {
draw_dm_edges_weight_interp(em, cageDM, ts->weightuser);
}
else {