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:
authorClément Foucault <foucault.clem@gmail.com>2018-12-18 17:08:33 +0300
committerClément Foucault <foucault.clem@gmail.com>2018-12-18 22:51:52 +0300
commit45e1d4d9ac36891b2e13a18f5d5211eabaaaef39 (patch)
tree4b4e9ee517c55a1c3fccb4b3340e9c2c2346b102 /source/blender
parent6e5b573dc8288826f05fd3a0b0b6de2a9753ba8b (diff)
DRW: Fix flat object not being selectable in wireframe view
The problem was double. They were not selectable in wireframe view and they would not display with the right color, thus always appearing un-selected.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/draw/engines/basic/basic_engine.c1
-rw-r--r--source/blender/draw/modes/overlay_mode.c15
2 files changed, 9 insertions, 7 deletions
diff --git a/source/blender/draw/engines/basic/basic_engine.c b/source/blender/draw/engines/basic/basic_engine.c
index 9dc8c8f2f34..eea41c932e2 100644
--- a/source/blender/draw/engines/basic/basic_engine.c
+++ b/source/blender/draw/engines/basic/basic_engine.c
@@ -141,6 +141,7 @@ static void basic_cache_populate(void *vedata, Object *ob)
/* Make flat object selectable in ortho view if wireframe is enabled. */
if ((draw_ctx->v3d->overlay.flag & V3D_OVERLAY_WIREFRAMES) ||
+ (draw_ctx->v3d->shading.type == OB_WIRE) ||
(ob->dtx & OB_DRAWWIRE) ||
(ob->dt == OB_WIRE))
{
diff --git a/source/blender/draw/modes/overlay_mode.c b/source/blender/draw/modes/overlay_mode.c
index 0c67263bd4f..7060c1c9704 100644
--- a/source/blender/draw/modes/overlay_mode.c
+++ b/source/blender/draw/modes/overlay_mode.c
@@ -174,7 +174,6 @@ static void overlay_cache_init(void *vedata)
psl->face_wireframe_pass = DRW_pass_create("Face Wires", state);
g_data->flat_wires = DRW_shgroup_create(flat_wires_sh, psl->face_wireframe_pass);
- DRW_shgroup_uniform_vec4(g_data->flat_wires, "color", ts.colorWire, 1);
g_data->sculpt_wires = DRW_shgroup_create(sculpt_wire_sh, psl->face_wireframe_pass);
@@ -246,6 +245,13 @@ static void overlay_cache_populate(void *vedata, Object *ob)
const int stencil_mask = (ob->dtx & OB_DRAWXRAY) ? 0x00 : 0xFF;
DRWShadingGroup *shgrp = NULL;
+ float *rim_col = ts.colorWire;
+ if (!is_edit_mode && !is_sculpt_mode && !has_edit_mesh_cage &&
+ ((ob->base_flag & BASE_SELECTED) != 0))
+ {
+ rim_col = (ob == draw_ctx->obact) ? ts.colorActive : ts.colorSelect;
+ }
+
/* This fixes only the biggest case which is a plane in ortho view. */
int flat_axis = 0;
bool is_flat_object_viewed_from_side = (rv3d->persp == RV3D_ORTHO) &&
@@ -260,17 +266,12 @@ static void overlay_cache_populate(void *vedata, Object *ob)
shgrp = DRW_shgroup_create_sub(shgrp);
DRW_shgroup_stencil_mask(shgrp, stencil_mask);
DRW_shgroup_call_object_add(shgrp, geom, ob);
+ DRW_shgroup_uniform_vec4(shgrp, "color", rim_col, 1);
}
}
else {
struct GPUBatch *geom = DRW_cache_object_face_wireframe_get(ob);
if (geom || is_sculpt_mode) {
- float *rim_col = ts.colorWire;
- if (!is_edit_mode && !is_sculpt_mode && !has_edit_mesh_cage &&
- ((ob->base_flag & BASE_SELECTED) != 0))
- {
- rim_col = (ob == draw_ctx->obact) ? ts.colorActive : ts.colorSelect;
- }
shgrp = (is_sculpt_mode) ? pd->sculpt_wires : pd->face_wires;
shgrp = DRW_shgroup_create_sub(shgrp);