[Bf-blender-cvs] [189de98ac15] soc-2018-npr: Added a very basic cache system

Sebastian Parborg noreply at git.blender.org
Thu Aug 9 09:42:01 CEST 2018


Commit: 189de98ac15da271f580fabb41bb5374acbf2c4c
Author: Sebastian Parborg
Date:   Tue Aug 7 19:30:07 2018 +0200
Branches: soc-2018-npr
https://developer.blender.org/rB189de98ac15da271f580fabb41bb5374acbf2c4c

Added a very basic cache system

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

M	source/blender/makesdna/DNA_modifier_types.h
M	source/blender/modifiers/intern/MOD_mybmesh.c

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

diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index fad666d5189..037b4a92339 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -1499,6 +1499,7 @@ enum {
 typedef struct MyBMeshModifierData {
 	ModifierData modifier;
 	struct Object *camera_ob;
+	void *osd_eval;
 	int flag;  /* options stored here */
 	short pad[2];
 } MyBMeshModifierData;
diff --git a/source/blender/modifiers/intern/MOD_mybmesh.c b/source/blender/modifiers/intern/MOD_mybmesh.c
index f5ad53fdb4e..09c29416f12 100644
--- a/source/blender/modifiers/intern/MOD_mybmesh.c
+++ b/source/blender/modifiers/intern/MOD_mybmesh.c
@@ -4386,7 +4386,13 @@ static Mesh *mybmesh_do(Mesh *mesh, MyBMeshModifierData *mmd, float cam_loc[3])
 
 	TIMEIT_START(osd_create);
 
-	osd_eval = create_osd_eval(bm, mesh);
+	if (mmd->osd_eval == NULL){
+		osd_eval = create_osd_eval(bm, mesh);
+		mmd->osd_eval = osd_eval;
+	} else {
+		//TODO make a smarter cache system. Or even better, resuse the OSD data from a subsurf modifier!
+		osd_eval = mmd->osd_eval;
+	}
 
 	TIMEIT_END(osd_create);
 
@@ -4407,7 +4413,6 @@ static Mesh *mybmesh_do(Mesh *mesh, MyBMeshModifierData *mmd, float cam_loc[3])
 		result = BKE_bmesh_to_mesh_nomain(bm, &((struct BMeshToMeshParams){0}));
 		BM_mesh_free(bm);
 		BM_mesh_free(bm_orig);
-		openSubdiv_deleteEvaluator(osd_eval);
 		return result;
 	}
 	{
@@ -4508,8 +4513,6 @@ static Mesh *mybmesh_do(Mesh *mesh, MyBMeshModifierData *mmd, float cam_loc[3])
 	BM_mesh_free(bm);
 	BM_mesh_free(bm_orig);
 
-	openSubdiv_deleteEvaluator(osd_eval);
-
 	result->runtime.cd_dirty_vert |= CD_MASK_NORMAL;
 
 	return result;
@@ -4521,6 +4524,15 @@ static void initData(ModifierData *md)
 	MyBMeshModifierData *mmd = (MyBMeshModifierData *) md;
 
 	mmd->camera_ob = NULL;
+	mmd->osd_eval = NULL;
+}
+
+static void freeData(ModifierData *md)
+{
+	MyBMeshModifierData *mmd = (MyBMeshModifierData *) md;
+	if (mmd->osd_eval != NULL){
+	openSubdiv_deleteEvaluator(mmd->osd_eval);
+	}
 }
 
 static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx,
@@ -4611,7 +4623,7 @@ ModifierTypeInfo modifierType_MyBMesh = {
 
 	/* initData */          initData,
 	/* requiredDataMask */  NULL,
-	/* freeData */          NULL,
+	/* freeData */          freeData,
 	/* isDisabled */        NULL,
 	/* updateDepsgraph */   updateDepsgraph,
 	/* dependsOnTime */     NULL,



More information about the Bf-blender-cvs mailing list