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:
authorSebastian Parborg <darkdefende@gmail.com>2022-04-29 19:20:54 +0300
committerSebastian Parborg <darkdefende@gmail.com>2022-04-29 19:22:32 +0300
commit074a8558b7b320d7be78d436ab5473fd5b53ff56 (patch)
treebb44834d91255a483282008b26b4dac9eb36b113 /source/blender/draw/intern
parent3eb9b4dfbc25c2d1dfbd2c6ff3802fed19b9163b (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')
-rw-r--r--source/blender/draw/intern/draw_cache.c14
-rw-r--r--source/blender/draw/intern/draw_manager.c2
-rw-r--r--source/blender/draw/intern/draw_manager.h2
3 files changed, 14 insertions, 4 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)
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index adf9d4a13df..6ab8d30109e 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -164,7 +164,7 @@ static void drw_task_graph_deinit(void)
BLI_task_graph_work_and_wait(DST.task_graph);
BLI_gset_free(DST.delayed_extraction,
- (void (*)(void *key))drw_batch_cache_generate_requested_evaluated_mesh);
+ (void (*)(void *key))drw_batch_cache_generate_requested_evaluated_mesh_or_curve);
DST.delayed_extraction = NULL;
BLI_task_graph_work_and_wait(DST.task_graph);
diff --git a/source/blender/draw/intern/draw_manager.h b/source/blender/draw/intern/draw_manager.h
index 8812f112014..7a9585262ff 100644
--- a/source/blender/draw/intern/draw_manager.h
+++ b/source/blender/draw/intern/draw_manager.h
@@ -671,7 +671,7 @@ void drw_batch_cache_generate_requested(struct Object *ob);
* \warning Only evaluated mesh data is handled by this delayed generation.
*/
void drw_batch_cache_generate_requested_delayed(Object *ob);
-void drw_batch_cache_generate_requested_evaluated_mesh(Object *ob);
+void drw_batch_cache_generate_requested_evaluated_mesh_or_curve(Object *ob);
void drw_resource_buffer_finish(DRWData *vmempool);