diff options
author | Dalai Felinto <dfelinto@gmail.com> | 2017-01-26 20:56:52 +0300 |
---|---|---|
committer | Dalai Felinto <dfelinto@gmail.com> | 2017-01-26 20:56:52 +0300 |
commit | 4c43dddeb758ee0b507cde2fa8d2bf543a2dde2b (patch) | |
tree | 806102dfcecc68600fff730cf3cc48df1ed52e5e /source/blender/blenkernel | |
parent | 9023abbf27c4efcdba3d9bd7c884680e56e4d9cb (diff) |
Use the ultimate depsgraph callback function
Note: when in edit mode this depsgraph update is not being called. We are using DerivedMesh in those cases, so it is fine. I would like to investigate this though
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_mesh_render.h | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/mesh_render.c | 31 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/object_update.c | 4 |
3 files changed, 28 insertions, 8 deletions
diff --git a/source/blender/blenkernel/BKE_mesh_render.h b/source/blender/blenkernel/BKE_mesh_render.h index 8a2b3f9d9ec..29787dcfdab 100644 --- a/source/blender/blenkernel/BKE_mesh_render.h +++ b/source/blender/blenkernel/BKE_mesh_render.h @@ -32,6 +32,7 @@ struct Batch; struct Mesh; +void BKE_mesh_batch_cache_dirty(struct Mesh *me); void BKE_mesh_batch_cache_free(struct Mesh *me); struct Batch *BKE_mesh_batch_cache_get_all_edges(struct Mesh *me); struct Batch *BKE_mesh_batch_cache_get_all_triangles(struct Mesh *me); diff --git a/source/blender/blenkernel/intern/mesh_render.c b/source/blender/blenkernel/intern/mesh_render.c index f90783a3dbb..e18b4ceb439 100644 --- a/source/blender/blenkernel/intern/mesh_render.c +++ b/source/blender/blenkernel/intern/mesh_render.c @@ -234,7 +234,8 @@ typedef struct MeshBatchCache { Batch *fancy_edges; /* owns its vertex buffer (not shared) */ Batch *overlay_edges; /* owns its vertex buffer */ - /* TODO: settings, before DEPSGRAPH update */ + /* settings to determine if cache is invalid */ + bool is_dirty; int tot_edges; int tot_faces; int tot_polys; @@ -261,13 +262,17 @@ static bool mesh_batch_cache_valid(Mesh *me) } } - /* TODO: temporary check, waiting for depsgraph update */ - if ((cache->tot_edges != mesh_render_get_num_edges(me)) || - (cache->tot_faces != mesh_render_get_num_faces(me)) || - (cache->tot_polys != mesh_render_get_num_polys(me)) || - (cache->tot_verts != mesh_render_get_num_verts(me))) - { - return false; + if (cache->is_dirty == false) { + return true; + } + else { + if ((cache->tot_edges != mesh_render_get_num_edges(me)) || + (cache->tot_faces != mesh_render_get_num_faces(me)) || + (cache->tot_polys != mesh_render_get_num_polys(me)) || + (cache->tot_verts != mesh_render_get_num_verts(me))) + { + return false; + } } return true; @@ -287,6 +292,8 @@ static void mesh_batch_cache_init(Mesh *me) DerivedMesh *dm = me->edit_btmesh->derivedFinal; dm->dirty |= DM_MESH_BATCH_CACHE; } + + cache->is_dirty = false; } static MeshBatchCache *mesh_batch_cache_get(Mesh *me) @@ -378,6 +385,14 @@ static ElementList *mesh_batch_cache_get_triangles_in_order(Mesh *me) return cache->triangles_in_order; } +void BKE_mesh_batch_cache_dirty(struct Mesh *me) +{ + MeshBatchCache *cache = me->batch_cache; + if (cache) { + cache->is_dirty = true; + } +} + void BKE_mesh_batch_cache_free(Mesh *me) { MeshBatchCache *cache = me->batch_cache; diff --git a/source/blender/blenkernel/intern/object_update.c b/source/blender/blenkernel/intern/object_update.c index 2e2ec00f780..46e6d09294d 100644 --- a/source/blender/blenkernel/intern/object_update.c +++ b/source/blender/blenkernel/intern/object_update.c @@ -51,6 +51,7 @@ #include "BKE_key.h" #include "BKE_lamp.h" #include "BKE_lattice.h" +#include "BKE_mesh_render.h" #include "BKE_editmesh.h" #include "BKE_object.h" #include "BKE_particle.h" @@ -347,4 +348,7 @@ void BKE_object_eval_uber_data(EvaluationContext *eval_ctx, void BKE_object_eval_shading(EvaluationContext *UNUSED(eval_ctx), Object *ob) { DEBUG_PRINT("%s on %s\n", __func__, ob->id.name); + if (ob->type == OB_MESH) { + BKE_mesh_batch_cache_dirty(ob->data); + } } |