diff options
author | Sebastian Parborg <darkdefende@gmail.com> | 2022-04-29 19:20:54 +0300 |
---|---|---|
committer | Sebastian Parborg <darkdefende@gmail.com> | 2022-04-29 19:22:32 +0300 |
commit | 074a8558b7b320d7be78d436ab5473fd5b53ff56 (patch) | |
tree | bb44834d91255a483282008b26b4dac9eb36b113 /source/blender/draw/intern/draw_cache.c | |
parent | 3eb9b4dfbc25c2d1dfbd2c6ff3802fed19b9163b (diff) |
Fix rendering of wire curves when used as custom bone objects
In the current code we do not render any curves if they have not been
converted to meshes. This change makes the custom bone drawing try to
render mesh objects first and then falls back to curve objects if there
is no mesh data available.
Reviewed By: Clement
Differential Revision: http://developer.blender.org/D14804
Diffstat (limited to 'source/blender/draw/intern/draw_cache.c')
-rw-r--r-- | source/blender/draw/intern/draw_cache.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/source/blender/draw/intern/draw_cache.c b/source/blender/draw/intern/draw_cache.c index e606d67df25..19d6557c34a 100644 --- a/source/blender/draw/intern/draw_cache.c +++ b/source/blender/draw/intern/draw_cache.c @@ -3357,7 +3357,7 @@ void drw_batch_cache_generate_requested(Object *ob) } } -void drw_batch_cache_generate_requested_evaluated_mesh(Object *ob) +void drw_batch_cache_generate_requested_evaluated_mesh_or_curve(Object *ob) { /* NOTE: Logic here is duplicated from #drw_batch_cache_generate_requested. */ @@ -3374,7 +3374,17 @@ void drw_batch_cache_generate_requested_evaluated_mesh(Object *ob) ((mode == CTX_MODE_EDIT_MESH) && DRW_object_is_in_edit_mode(ob)))); Mesh *mesh = BKE_object_get_evaluated_mesh_no_subsurf(ob); - DRW_mesh_batch_cache_create_requested(DST.task_graph, ob, mesh, scene, is_paint_mode, use_hide); + /* Try getting the mesh first and if that fails, try getting the curve data. + * If the curves are surfaces or have certain modifiers applied to them, the will have mesh data + * of the final result. + */ + if (mesh != NULL) { + DRW_mesh_batch_cache_create_requested( + DST.task_graph, ob, mesh, scene, is_paint_mode, use_hide); + } + else if (ELEM(ob->type, OB_CURVES_LEGACY, OB_FONT, OB_SURF)) { + DRW_curve_batch_cache_create_requested(ob, scene); + } } void drw_batch_cache_generate_requested_delayed(Object *ob) |