[Bf-blender-cvs] [fe52a05e950] blender2.8: Modifiers: use Mesh instead of DerivedMesh for dynamic paint.

Sebastian Parborg noreply at git.blender.org
Mon Sep 24 17:14:54 CEST 2018


Commit: fe52a05e950e474036c80f554a4675f12203695b
Author: Sebastian Parborg
Date:   Mon Sep 24 16:32:29 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBfe52a05e950e474036c80f554a4675f12203695b

Modifiers: use Mesh instead of DerivedMesh for dynamic paint.

Differential Revision: https://developer.blender.org/D3720

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

M	source/blender/blenkernel/BKE_dynamicpaint.h
M	source/blender/blenkernel/intern/dynamicpaint.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/makesdna/DNA_dynamicpaint_types.h
M	source/blender/modifiers/intern/MOD_dynamicpaint.c

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

diff --git a/source/blender/blenkernel/BKE_dynamicpaint.h b/source/blender/blenkernel/BKE_dynamicpaint.h
index 12f61116f5f..d4ca7602272 100644
--- a/source/blender/blenkernel/BKE_dynamicpaint.h
+++ b/source/blender/blenkernel/BKE_dynamicpaint.h
@@ -65,8 +65,8 @@ typedef struct PaintWavePoint {
 	short state;
 } PaintWavePoint;
 
-struct DerivedMesh *dynamicPaint_Modifier_do(struct DynamicPaintModifierData *pmd, struct Depsgraph *depsgraph, struct Scene *scene,
-                                             struct Object *ob, struct DerivedMesh *dm);
+struct Mesh *dynamicPaint_Modifier_do(struct DynamicPaintModifierData *pmd, struct Depsgraph *depsgraph, struct Scene *scene,
+                                             struct Object *ob, struct Mesh *dm);
 void dynamicPaint_Modifier_free(struct DynamicPaintModifierData *pmd);
 void dynamicPaint_Modifier_copy(const struct DynamicPaintModifierData *pmd, struct DynamicPaintModifierData *tsmd);
 
diff --git a/source/blender/blenkernel/intern/dynamicpaint.c b/source/blender/blenkernel/intern/dynamicpaint.c
index eadf6c5ea22..4cea52ea792 100644
--- a/source/blender/blenkernel/intern/dynamicpaint.c
+++ b/source/blender/blenkernel/intern/dynamicpaint.c
@@ -58,18 +58,18 @@
 #include "BKE_collection.h"
 #include "BKE_collision.h"
 #include "BKE_colorband.h"
-#include "BKE_cdderivedmesh.h"
 #include "BKE_constraint.h"
 #include "BKE_customdata.h"
 #include "BKE_deform.h"
-#include "BKE_DerivedMesh.h"
 #include "BKE_dynamicpaint.h"
 #include "BKE_effect.h"
 #include "BKE_global.h"
 #include "BKE_image.h"
 #include "BKE_main.h"
 #include "BKE_material.h"
+#include "BKE_mesh.h"
 #include "BKE_mesh_mapping.h"
+#include "BKE_mesh_runtime.h"
 #include "BKE_modifier.h"
 #include "BKE_object.h"
 #include "BKE_particle.h"
@@ -250,7 +250,7 @@ static int dynamicPaint_surfaceNumOfPoints(DynamicPaintSurface *surface)
 		return 0; /* not supported atm */
 	}
 	else if (surface->format == MOD_DPAINT_SURFACE_F_VERTEX) {
-		return (surface->canvas->dm) ? surface->canvas->dm->getNumVerts(surface->canvas->dm) : 0;
+		return (surface->canvas->mesh) ? surface->canvas->mesh->totvert : 0;
 	}
 
 	return 0;
@@ -813,9 +813,10 @@ static void surfaceGenerateGrid(struct DynamicPaintSurface *surface)
 void dynamicPaint_freeBrush(struct DynamicPaintModifierData *pmd)
 {
 	if (pmd->brush) {
-		if (pmd->brush->dm)
-			pmd->brush->dm->release(pmd->brush->dm);
-		pmd->brush->dm = NULL;
+		if (pmd->brush->mesh) {
+			BKE_id_free(NULL, pmd->brush->mesh);
+		}
+		pmd->brush->mesh = NULL;
 
 		if (pmd->brush->paint_ramp)
 			MEM_freeN(pmd->brush->paint_ramp);
@@ -942,10 +943,11 @@ void dynamicPaint_freeCanvas(DynamicPaintModifierData *pmd)
 			surface = next_surface;
 		}
 
-		/* free dm copy */
-		if (pmd->canvas->dm)
-			pmd->canvas->dm->release(pmd->canvas->dm);
-		pmd->canvas->dm = NULL;
+		/* free mesh copy */
+		if (pmd->canvas->mesh) {
+			BKE_id_free(NULL, pmd->canvas->mesh);
+		}
+		pmd->canvas->mesh = NULL;
 
 		MEM_freeN(pmd->canvas);
 		pmd->canvas = NULL;
@@ -1057,7 +1059,7 @@ bool dynamicPaint_createType(struct DynamicPaintModifierData *pmd, int type, str
 			if (!canvas)
 				return false;
 			canvas->pmd = pmd;
-			canvas->dm = NULL;
+			canvas->mesh = NULL;
 
 			/* Create one surface */
 			if (!dynamicPaint_createNewSurface(canvas, scene))
@@ -1097,7 +1099,7 @@ bool dynamicPaint_createType(struct DynamicPaintModifierData *pmd, int type, str
 			brush->smudge_strength = 0.3f;
 			brush->max_velocity = 1.0f;
 
-			brush->dm = NULL;
+			brush->mesh = NULL;
 
 			/* Paint proximity falloff colorramp. */
 			{
@@ -1285,7 +1287,7 @@ static bool surface_usesAdjData(DynamicPaintSurface *surface)
 static void dynamicPaint_initAdjacencyData(DynamicPaintSurface *surface, const bool force_init)
 {
 	PaintSurfaceData *sData = surface->data;
-	DerivedMesh *dm = surface->canvas->dm;
+	Mesh *mesh = surface->canvas->mesh;
 	PaintAdjData *ad;
 	int *temp_data;
 	int neigh_points = 0;
@@ -1295,7 +1297,7 @@ static void dynamicPaint_initAdjacencyData(DynamicPaintSurface *surface, const b
 
 	if (surface->format == MOD_DPAINT_SURFACE_F_VERTEX) {
 		/* For vertex format, neighbors are connected by edges */
-		neigh_points = 2 * dm->getNumEdges(dm);
+		neigh_points = 2 * mesh->totedge;
 	}
 	else if (surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ) {
 		neigh_points = sData->total_points * 8;
@@ -1331,11 +1333,11 @@ static void dynamicPaint_initAdjacencyData(DynamicPaintSurface *surface, const b
 		int n_pos;
 
 		/* For vertex format, count every vertex that is connected by an edge */
-		int numOfEdges = dm->getNumEdges(dm);
-		int numOfPolys = dm->getNumPolys(dm);
-		struct MEdge *edge =  dm->getEdgeArray(dm);
-		struct MPoly *mpoly = dm->getPolyArray(dm);
-		struct MLoop *mloop = dm->getLoopArray(dm);
+		int numOfEdges = mesh->totedge;
+		int numOfPolys = mesh->totpoly;
+		struct MEdge *edge =  mesh->medge;
+		struct MPoly *mpoly = mesh->mpoly;
+		struct MLoop *mloop = mesh->mloop;
 
 		/* count number of edges per vertex */
 		for (i = 0; i < numOfEdges; i++) {
@@ -1519,7 +1521,7 @@ static void dynamicPaint_setInitialColor(const Scene *scene, DynamicPaintSurface
 {
 	PaintSurfaceData *sData = surface->data;
 	PaintPoint *pPoint = (PaintPoint *)sData->type_data;
-	DerivedMesh *dm = surface->canvas->dm;
+	Mesh *mesh = surface->canvas->mesh;
 	int i;
 	const bool scene_color_manage = BKE_scene_check_color_management_enabled(scene);
 
@@ -1540,9 +1542,9 @@ static void dynamicPaint_setInitialColor(const Scene *scene, DynamicPaintSurface
 	else if (surface->init_color_type == MOD_DPAINT_INITIAL_TEXTURE) {
 		Tex *tex = surface->init_texture;
 
-		const MLoop *mloop = dm->getLoopArray(dm);
-		const MLoopTri *mlooptri = dm->getLoopTriArray(dm);
-		const int tottri = dm->getNumLoopTri(dm);
+		const MLoop *mloop = mesh->mloop;
+		const MLoopTri *mlooptri = BKE_mesh_runtime_looptri_ensure(mesh);
+		const int tottri = BKE_mesh_runtime_looptri_len(mesh);
 		const MLoopUV *mloopuv = NULL;
 
 		char uvname[MAX_CUSTOMDATA_LAYER_NAME];
@@ -1551,8 +1553,8 @@ static void dynamicPaint_setInitialColor(const Scene *scene, DynamicPaintSurface
 			return;
 
 		/* get uv map */
-		CustomData_validate_layer_name(&dm->loopData, CD_MLOOPUV, surface->init_layername, uvname);
-		mloopuv = CustomData_get_layer_named(&dm->loopData, CD_MLOOPUV, uvname);
+		CustomData_validate_layer_name(&mesh->ldata, CD_MLOOPUV, surface->init_layername, uvname);
+		mloopuv = CustomData_get_layer_named(&mesh->ldata, CD_MLOOPUV, uvname);
 		if (!mloopuv)
 			return;
 
@@ -1595,9 +1597,9 @@ static void dynamicPaint_setInitialColor(const Scene *scene, DynamicPaintSurface
 
 		/* for vertex surface, just copy colors from mcol */
 		if (surface->format == MOD_DPAINT_SURFACE_F_VERTEX) {
-			const MLoop *mloop = dm->getLoopArray(dm);
-			const int totloop = dm->getNumLoops(dm);
-			const MLoopCol *col = CustomData_get_layer_named(&dm->loopData, CD_MLOOPCOL, surface->init_layername);
+			const MLoop *mloop = mesh->mloop;
+			const int totloop = mesh->totloop;
+			const MLoopCol *col = CustomData_get_layer_named(&mesh->ldata, CD_MLOOPCOL, surface->init_layername);
 			if (!col)
 				return;
 
@@ -1606,8 +1608,8 @@ static void dynamicPaint_setInitialColor(const Scene *scene, DynamicPaintSurface
 			}
 		}
 		else if (surface->format == MOD_DPAINT_SURFACE_F_IMAGESEQ) {
-			const MLoopTri *mlooptri = dm->getLoopTriArray(dm);
-			MLoopCol *col = CustomData_get_layer_named(&dm->loopData, CD_MLOOPCOL, surface->init_layername);
+			const MLoopTri *mlooptri = BKE_mesh_runtime_looptri_ensure(mesh);
+			MLoopCol *col = CustomData_get_layer_named(&mesh->ldata, CD_MLOOPCOL, surface->init_layername);
 			if (!col)
 				return;
 
@@ -1729,7 +1731,7 @@ static void dynamic_paint_apply_surface_displace_cb(
 }
 
 /* apply displacing vertex surface to the derived mesh */
-static void dynamicPaint_applySurfaceDisplace(DynamicPaintSurface *surface, DerivedMesh *result)
+static void dynamicPaint_applySurfaceDisplace(DynamicPaintSurface *surface, Mesh *result)
 {
 	PaintSurfaceData *sData = surface->data;
 
@@ -1738,7 +1740,7 @@ static void dynamicPaint_applySurfaceDisplace(DynamicPaintSurface *surface, Deri
 
 	/* displace paint */
 	if (surface->type == MOD_DPAINT_SURFACE_T_DISPLACE) {
-		MVert *mvert = result->getVertArray(result);
+		MVert *mvert = result->mvert;
 
 		DynamicPaintModifierApplyData data = {.surface = surface, .mvert = mvert};
 		ParallelRangeSettings settings;
@@ -1856,10 +1858,10 @@ static void dynamic_paint_apply_surface_wave_cb(
 /*
  *	Apply canvas data to the object derived mesh
  */
-static DerivedMesh *dynamicPaint_Modifier_apply(
-        DynamicPaintModifierData *pmd, Object *ob, DerivedMesh *dm)
+static Mesh *dynamicPaint_Modifier_apply(
+        DynamicPaintModifierData *pmd, Object *ob, Mesh *mesh)
 {
-	DerivedMesh *result = CDDM_copy(dm);
+	Mesh *result = BKE_mesh_copy_for_eval(mesh, false);
 
 	if (pmd->canvas && !(pmd->canvas->flags & MOD_DPAINT_BAKING)) {
 
@@ -1879,10 +1881,10 @@ static DerivedMesh *dynamicPaint_Modifier_apply(
 
 					/* vertex color paint */
 					if (surface->type == MOD_DPAINT_SURFACE_T_PAINT) {
-						MLoop *mloop = CDDM_get_loops(result);
-						const int totloop = result->numLoopData;
-						MPoly *mpoly = CDDM_get_polys(result);
-						const int totpoly = result->numPolyData;
+						MLoop *mloop = result->mloop;
+						const int totloop = result->totloop;
+						MPoly *mpoly = result->mpoly;
+						const int totpoly = result->totpoly;
 
 						/* paint is stored on dry and wet layers, so mix final color first */
 						float (*fcolor)[4] = MEM_callocN(sizeof(*fcolor) * sData->total_points, "Temp paint color");
@@ -1900,28 +1902,28 @@ static DerivedMesh *dynamicPaint_Modifier_apply(
 						}
 
 						/* paint layer */
-						MLoopCol *mloopcol = CustomData_get_layer_named(&result->loopData, CD_MLOOPCOL, surface->output_name);
+						MLoopCol *mloopcol = CustomData_get_layer_named(&result->ldata, CD_MLOOPCOL, surface->output_name);
 						/* if output layer is lost from a constructive modifier, re-add it */
 						if (!mloopcol && dynamicPaint_outputLayerExists(surface, ob, 0)) {
 							mloopcol = CustomData_add_layer_named(
-							        &result->loopData, CD_ML

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list