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/intern/mesh_render.c | |
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/intern/mesh_render.c')
-rw-r--r-- | source/blender/blenkernel/intern/mesh_render.c | 31 |
1 files changed, 23 insertions, 8 deletions
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; |