[Bf-blender-cvs] [4c43dddeb7] blender2.8: Use the ultimate depsgraph callback function

Dalai Felinto noreply at git.blender.org
Thu Jan 26 18:57:09 CET 2017


Commit: 4c43dddeb758ee0b507cde2fa8d2bf543a2dde2b
Author: Dalai Felinto
Date:   Thu Jan 26 18:56:52 2017 +0100
Branches: blender2.8
https://developer.blender.org/rB4c43dddeb758ee0b507cde2fa8d2bf543a2dde2b

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

===================================================================

M	source/blender/blenkernel/BKE_mesh_render.h
M	source/blender/blenkernel/intern/mesh_render.c
M	source/blender/blenkernel/intern/object_update.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_mesh_render.h b/source/blender/blenkernel/BKE_mesh_render.h
index 8a2b3f9d9e..29787dcfda 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 f90783a3db..e18b4ceb43 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 2e2ec00f78..46e6d09294 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);
+	}
 }




More information about the Bf-blender-cvs mailing list