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>2019-04-24 20:11:28 +0300
committerClément Foucault <foucault.clem@gmail.com>2019-04-24 20:11:36 +0300
commita14735d11d2e16f24f63513d58b1d95864bdf27f (patch)
tree36e91749e07e1a4f5af0196cc39a1f183da716dc /source/blender
parentc265e25bb1752135e9541789dd1fb6275e4f8309 (diff)
Fix T61184 linked curves with curve modifiers arent drawn correctly
Force Displist to Mesh conversion if there is any modifier. This is until we find a better way to store the batches per objects. Also fix draw cache functions that were not returning final mesh edges.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenkernel/intern/displist.c9
-rw-r--r--source/blender/draw/intern/draw_cache.c24
2 files changed, 27 insertions, 6 deletions
diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c
index e3ee28ed022..c228595b6e8 100644
--- a/source/blender/blenkernel/intern/displist.c
+++ b/source/blender/blenkernel/intern/displist.c
@@ -1028,7 +1028,10 @@ static void curve_calc_modifiers_post(Depsgraph *depsgraph,
}
/* If we need normals, no choice, have to convert to mesh now. */
- if (mti->dependsOnNormals != NULL && mti->dependsOnNormals(md) && modified == NULL) {
+ bool need_normal = mti->dependsOnNormals != NULL && mti->dependsOnNormals(md);
+ /* XXX 2.8 : now that batch cache is stored inside the ob->data
+ * we need to create a Mesh for each curve that uses modifiers. */
+ if (modified == NULL /* && need_normal */) {
if (vertCos != NULL) {
displist_apply_allverts(dispbase, vertCos);
}
@@ -1046,7 +1049,7 @@ static void curve_calc_modifiers_post(Depsgraph *depsgraph,
if (!vertCos) {
vertCos = BKE_mesh_vertexCos_get(modified, &totvert);
}
- if (mti->dependsOnNormals != NULL && mti->dependsOnNormals(md)) {
+ if (need_normal) {
BKE_mesh_ensure_normals(modified);
}
mti->deformVerts(md, &mectx_deform, modified, vertCos, totvert);
@@ -1095,7 +1098,7 @@ static void curve_calc_modifiers_post(Depsgraph *depsgraph,
vertCos = NULL;
}
- if (mti->dependsOnNormals != NULL && mti->dependsOnNormals(md)) {
+ if (need_normal) {
BKE_mesh_ensure_normals(modified);
}
mesh_applied = mti->applyModifier(md, &mectx_apply, modified);
diff --git a/source/blender/draw/intern/draw_cache.c b/source/blender/draw/intern/draw_cache.c
index 8a13d8be622..26063df1082 100644
--- a/source/blender/draw/intern/draw_cache.c
+++ b/source/blender/draw/intern/draw_cache.c
@@ -3302,7 +3302,13 @@ GPUBatch *DRW_cache_curve_edge_wire_get(Object *ob)
BLI_assert(ob->type == OB_CURVE);
struct Curve *cu = ob->data;
- return DRW_curve_batch_cache_get_wire_edge(cu);
+ struct Mesh *mesh_eval = ob->runtime.mesh_eval;
+ if (mesh_eval != NULL) {
+ return DRW_mesh_batch_cache_get_loose_edges(mesh_eval);
+ }
+ else {
+ return DRW_curve_batch_cache_get_wire_edge(cu);
+ }
}
GPUBatch *DRW_cache_curve_edge_normal_get(Object *ob)
@@ -3448,7 +3454,13 @@ GPUBatch *DRW_cache_text_edge_wire_get(Object *ob)
BLI_assert(ob->type == OB_FONT);
struct Curve *cu = ob->data;
- return DRW_curve_batch_cache_get_wire_edge(cu);
+ struct Mesh *mesh_eval = ob->runtime.mesh_eval;
+ if (mesh_eval != NULL) {
+ return DRW_mesh_batch_cache_get_loose_edges(mesh_eval);
+ }
+ else {
+ return DRW_curve_batch_cache_get_wire_edge(cu);
+ }
}
GPUBatch *DRW_cache_text_surface_get(Object *ob)
@@ -3560,7 +3572,13 @@ GPUBatch *DRW_cache_surf_edge_wire_get(Object *ob)
BLI_assert(ob->type == OB_SURF);
struct Curve *cu = ob->data;
- return DRW_curve_batch_cache_get_wire_edge(cu);
+ struct Mesh *mesh_eval = ob->runtime.mesh_eval;
+ if (mesh_eval != NULL) {
+ return DRW_mesh_batch_cache_get_loose_edges(mesh_eval);
+ }
+ else {
+ return DRW_curve_batch_cache_get_wire_edge(cu);
+ }
}
GPUBatch *DRW_cache_surf_face_wireframe_get(Object *ob)