diff options
author | Julian Eisel <eiseljulian@gmail.com> | 2019-07-16 22:09:30 +0300 |
---|---|---|
committer | Julian Eisel <eiseljulian@gmail.com> | 2019-07-16 22:09:30 +0300 |
commit | fca4826c7f9d3258434df1b463189ca232cfd5c8 (patch) | |
tree | 04b6a047cd3ba879a2c886365c2228bde6a644f0 /source/blender/draw/intern | |
parent | b0845fc1332bf242237fe858803bcebe87ffd7b3 (diff) | |
parent | a36a44bb811d8dbe39dfaf79e21c509b3134ec66 (diff) |
Merge branch 'master' into soc-2019-openxr
Diffstat (limited to 'source/blender/draw/intern')
-rw-r--r-- | source/blender/draw/intern/draw_armature.c | 22 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_cache_impl_mesh.c | 2 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_instance_data.c | 3 |
3 files changed, 16 insertions, 11 deletions
diff --git a/source/blender/draw/intern/draw_armature.c b/source/blender/draw/intern/draw_armature.c index 4f387de16a8..f97efa9aed9 100644 --- a/source/blender/draw/intern/draw_armature.c +++ b/source/blender/draw/intern/draw_armature.c @@ -883,7 +883,7 @@ static void update_color(const Object *ob, const float const_color[4]) #define NO_ALPHA(c) (((c)[3] = 1.0f), (c)) UI_GetThemeColor3fv(TH_SELECT, NO_ALPHA(g_theme.select_color)); - UI_GetThemeColor3fv(TH_EDGE_SELECT, NO_ALPHA(g_theme.edge_select_color)); + UI_GetThemeColorShade3fv(TH_EDGE_SELECT, 60, NO_ALPHA(g_theme.edge_select_color)); UI_GetThemeColorShade3fv(TH_EDGE_SELECT, -20, NO_ALPHA(g_theme.bone_select_color)); UI_GetThemeColor3fv(TH_WIRE, NO_ALPHA(g_theme.wire_color)); UI_GetThemeColor3fv(TH_WIRE_EDIT, NO_ALPHA(g_theme.wire_edit_color)); @@ -1886,19 +1886,23 @@ static void draw_armature_edit(Object *ob) { const DRWContextState *draw_ctx = DRW_context_state_get(); EditBone *eBone; - bArmature *arm = ob->data; int index; const bool is_select = DRW_state_is_select(); - update_color(ob, NULL); - edbo_compute_bbone_child(arm); - const bool show_text = DRW_state_show_text(); const bool show_relations = ((draw_ctx->v3d->flag & V3D_HIDE_HELPLINES) == 0); - const Object *orig_object = DEG_get_original_object(ob); + const Object *ob_orig = DEG_get_original_object(ob); + /* FIXME(campbell): We should be able to use the CoW object, + * however the active bone isn't updated. Long term solution is an 'EditArmature' struct. + * for now we can draw from the original armature. See: T66773. */ + // bArmature *arm = ob->data; + bArmature *arm = ob_orig->data; + + update_color(ob, NULL); + edbo_compute_bbone_child(arm); - for (eBone = arm->edbo->first, index = orig_object->runtime.select_id; eBone; + for (eBone = arm->edbo->first, index = ob_orig->runtime.select_id; eBone; eBone = eBone->next, index += 0x10000) { if (eBone->layer & arm->layer) { if ((eBone->flag & BONE_HIDDEN_A) == 0) { @@ -1993,8 +1997,8 @@ static void draw_armature_pose(Object *ob, const float const_color[4]) } if (arm->flag & ARM_POSEMODE) { - const Object *orig_object = DEG_get_original_object(ob); - index = orig_object->runtime.select_id; + const Object *ob_orig = DEG_get_original_object(ob); + index = ob_orig->runtime.select_id; } } diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c index f3089231e8c..306031809d1 100644 --- a/source/blender/draw/intern/draw_cache_impl_mesh.c +++ b/source/blender/draw/intern/draw_cache_impl_mesh.c @@ -3018,7 +3018,7 @@ static void mesh_create_loop_edge_fac(MeshRenderData *rdata, GPUVertBuf *vbo) BM_ITER_ELEM (loop, &iter_loop, efa, BM_LOOPS_OF_FACE) { float ratio = mesh_loop_edge_factor_get( efa->no, loop->v->co, loop->v->no, loop->next->v->co); - vertbuf_raw_step(&wd_step, ratio * 255); + vertbuf_raw_step(&wd_step, ratio * 253 + 1); } } BLI_assert(GPU_vertbuf_raw_used(&wd_step) == loop_len); diff --git a/source/blender/draw/intern/draw_instance_data.c b/source/blender/draw/intern/draw_instance_data.c index 3e5dfb53fc7..802f49d6549 100644 --- a/source/blender/draw/intern/draw_instance_data.c +++ b/source/blender/draw/intern/draw_instance_data.c @@ -141,7 +141,8 @@ GPUBatch *DRW_temp_batch_instance_request(DRWInstanceDataList *idatalist, GPUBatch *batch = BLI_memblock_alloc(idatalist->pool_instancing); bool is_compatible = (batch->gl_prim_type == geom->gl_prim_type) && (batch->inst == buf) && - (buf->vbo_id != 0) && (batch->phase == GPU_BATCH_READY_TO_DRAW); + (buf->vbo_id != 0) && (batch->phase == GPU_BATCH_READY_TO_DRAW) && + (batch->elem == geom->elem); for (int i = 0; i < GPU_BATCH_VBO_MAX_LEN && is_compatible; i++) { if (batch->verts[i] != geom->verts[i]) { is_compatible = false; |