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:
authorDalai Felinto <dfelinto@gmail.com>2017-01-26 20:56:52 +0300
committerDalai Felinto <dfelinto@gmail.com>2017-01-26 20:56:52 +0300
commit4c43dddeb758ee0b507cde2fa8d2bf543a2dde2b (patch)
tree806102dfcecc68600fff730cf3cc48df1ed52e5e
parent9023abbf27c4efcdba3d9bd7c884680e56e4d9cb (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
-rw-r--r--source/blender/blenkernel/BKE_mesh_render.h1
-rw-r--r--source/blender/blenkernel/intern/mesh_render.c31
-rw-r--r--source/blender/blenkernel/intern/object_update.c4
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);
+ }
}