[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18374] branches/blender2.5/blender/source /blender: Got rid of old multires code, brought in multires modifier from

Nicholas Bishop nicholasbishop at gmail.com
Tue Jan 6 19:59:04 CET 2009


Revision: 18374
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18374
Author:   nicholasbishop
Date:     2009-01-06 19:59:03 +0100 (Tue, 06 Jan 2009)

Log Message:
-----------
Got rid of old multires code, brought in multires modifier from 
soc-2008-nicholasbishop branch.

Note: any old code with multires_test() or multires_level1_test() can 
just be deleted, not needed by the multires modifier.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/BKE_multires.h
    branches/blender2.5/blender/source/blender/blenkernel/BKE_sculpt.h
    branches/blender2.5/blender/source/blender/blenkernel/BKE_subsurf.h
    branches/blender2.5/blender/source/blender/blenkernel/intern/DerivedMesh.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/customdata.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/mesh.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/modifier.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/multires.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/scene.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/subsurf_ccg.c
    branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
    branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c
    branches/blender2.5/blender/source/blender/editors/mesh/editface.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_add.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c
    branches/blender2.5/blender/source/blender/editors/object/object_edit.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_customdata_types.h
    branches/blender2.5/blender/source/blender/makesdna/DNA_meshdata_types.h
    branches/blender2.5/blender/source/blender/makesdna/DNA_modifier_types.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_action.c
    branches/blender2.5/blender/source/blender/render/intern/include/render_types.h
    branches/blender2.5/blender/source/blender/render/intern/source/convertblender.c

Removed Paths:
-------------
    branches/blender2.5/blender/source/blender/blenkernel/intern/multires-firstlevel.c
    branches/blender2.5/blender/source/blender/editors/include/ED_multires.h

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_multires.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_multires.h	2009-01-06 18:52:18 UTC (rev 18373)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_multires.h	2009-01-06 18:59:03 UTC (rev 18374)
@@ -27,42 +27,58 @@
  * ***** END GPL LICENSE BLOCK *****
  */ 
 
-struct CustomData;
-struct EditMesh;
-struct Multires;
-struct MultiresLevel;
+struct DerivedMesh;
 struct Mesh;
+struct MFace;
+struct MultiresModifierData;
 struct Object;
 
-/* Level access */
-struct MultiresLevel *current_level(struct Multires *mr);
-struct MultiresLevel *multires_level_n(struct Multires *mr, int n);
+typedef struct MultiresSubsurf {
+	struct MultiresModifierData *mmd;
+	struct Mesh *me;
+} MultiresSubsurf;
 
-/* Level control */
-void multires_add_level(struct Object *ob, struct Mesh *me, const char subdiv_type);
-void multires_set_level(struct Object *ob, struct Mesh *me, const int render);
-void multires_free_level(struct MultiresLevel *lvl);
+typedef struct IndexNode {
+	struct IndexNode *next, *prev;
+	int index;
+} IndexNode;
 
-void multires_edge_level_update(struct Object *ob, struct Mesh *me);
+void create_vert_face_map(ListBase **map, IndexNode **mem, const struct MFace *mface,
+			  const int totvert, const int totface);
+void create_vert_edge_map(ListBase **map, IndexNode **mem, const struct MEdge *medge,
+			  const int totvert, const int totedge);
 
-void multires_free(struct Multires *mr);
-struct Multires *multires_copy(struct Multires *orig);
-void multires_create(struct Object *ob, struct Mesh *me);
+/* MultiresDM */
+struct Mesh *MultiresDM_get_mesh(struct DerivedMesh *dm);
+struct DerivedMesh *MultiresDM_new(struct MultiresSubsurf *, struct DerivedMesh*, int, int, int);
+void *MultiresDM_get_vertnorm(struct DerivedMesh *);
+void *MultiresDM_get_orco(struct DerivedMesh *);
+struct MVert *MultiresDM_get_subco(struct DerivedMesh *);
+struct ListBase *MultiresDM_get_vert_face_map(struct DerivedMesh *);
+struct ListBase *MultiresDM_get_vert_edge_map(struct DerivedMesh *);
+int *MultiresDM_get_face_offsets(struct DerivedMesh *);
+int MultiresDM_get_totlvl(struct DerivedMesh *);
+int MultiresDM_get_lvl(struct DerivedMesh *);
+void MultiresDM_set_update(struct DerivedMesh *, void (*)(struct DerivedMesh*));
+int *MultiresDM_get_flags(struct DerivedMesh *);
 
-/* CustomData */
-void multires_delete_layer(struct Object *ob, struct CustomData *cd, const int type, int n);
-void multires_add_layer(struct Object *ob, struct CustomData *cd, const int type, const int n);
-void multires_del_lower_customdata(struct Multires *mr, struct MultiresLevel *cr_lvl);
-void multires_to_mcol(struct MultiresColFace *f, MCol mcol[4]);
-/* After adding or removing vcolor layers, run this */
-void multires_load_cols(struct Mesh *me);
+#define MULTIRES_DM_UPDATE_BLOCK 1
+#define MULTIRES_DM_UPDATE_ALWAYS 2
 
-/* Private (used in multires-firstlevel.c) */
-void multires_level_to_mesh(struct Object *ob, struct Mesh *me, const int render);
-void multires_update_levels(struct Mesh *me, const int render);
-void multires_update_first_level(struct Mesh *me, struct EditMesh *em);
-void multires_update_customdata(struct MultiresLevel *lvl1, struct EditMesh *em, struct CustomData *src,
-				struct CustomData *dst, const int type);
-void multires_customdata_to_mesh(struct Mesh *me, struct EditMesh *em,
-				 struct MultiresLevel *lvl, struct CustomData *src,
-                                 struct CustomData *dst, const int type);
+void multires_force_update(struct Object *ob);
+
+struct DerivedMesh *multires_dm_create_from_derived(struct MultiresModifierData*, struct DerivedMesh*,
+						    struct Mesh *, int, int);
+
+int multiresModifier_switch_level(struct Object *, const int);
+void multiresModifier_join(struct Object *);
+void multiresModifier_del_levels(struct MultiresModifierData *, struct Object *, int direction);
+void multiresModifier_subdivide(struct MultiresModifierData *mmd, struct Object *ob, int distance,
+				int updateblock, int simple);
+void multiresModifier_setLevel(void *mmd_v, void *ob_v);
+int multiresModifier_reshape(struct MultiresModifierData *mmd, struct Object *dst, struct Object *src);
+
+/* Related to the old multires */
+struct Multires;
+void multires_load_old(struct DerivedMesh *, struct Multires *);
+void multires_free(struct Multires*);

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_sculpt.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_sculpt.h	2009-01-06 18:52:18 UTC (rev 18373)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_sculpt.h	2009-01-06 18:59:03 UTC (rev 18374)
@@ -30,6 +30,8 @@
 #ifndef BKE_SCULPT_H
 #define BKE_SCULPT_H
 
+struct MFace;
+struct MVert;
 struct NumInput;
 struct RadialControl;
 struct Scene;
@@ -40,6 +42,13 @@
 	struct ProjVert *projverts;
 
 	struct bglMats *mats;
+
+	int multires;
+	int totvert;
+	int totface;
+	struct MVert *mvert;
+	struct MFace *mface;
+	float *face_normals;
 	
 	/* An array of lists; array is sized as
 	   large as the number of verts in the mesh,

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_subsurf.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_subsurf.h	2009-01-06 18:52:18 UTC (rev 18373)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_subsurf.h	2009-01-06 18:59:03 UTC (rev 18374)
@@ -32,6 +32,7 @@
 struct Object;
 struct DerivedMesh;
 struct EditMesh;
+struct MultiresSubsurf;
 struct SubsurfModifierData;
 
 struct DerivedMesh *subsurf_make_derived_from_derived(
@@ -40,6 +41,13 @@
                         int useRenderParams, float (*vertCos)[3],
                         int isFinalCalc, int editMode);
 
+struct DerivedMesh *subsurf_make_derived_from_derived_with_multires(
+                        struct DerivedMesh *dm,
+                        struct SubsurfModifierData *smd,
+			struct MultiresSubsurf *ms,
+                        int useRenderParams, float (*vertCos)[3],
+                        int isFinalCalc, int editMode);
+
 void subsurf_calculate_limit_positions(Mesh *me, float (*positions_r)[3]);
 
 #endif

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/DerivedMesh.c	2009-01-06 18:52:18 UTC (rev 18373)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/DerivedMesh.c	2009-01-06 18:59:03 UTC (rev 18374)
@@ -71,7 +71,6 @@
 #include "BKE_material.h"
 #include "BKE_modifier.h"
 #include "BKE_mesh.h"
-#include "BKE_multires.h"
 #include "BKE_object.h"
 #include "BKE_subsurf.h"
 #include "BKE_texture.h"
@@ -83,8 +82,6 @@
 #include "BIF_gl.h"
 #include "BIF_glutil.h"
 
-//XXX #include "multires.h"
-//
 #include "GPU_draw.h"
 #include "GPU_extensions.h"
 #include "GPU_material.h"
@@ -1448,6 +1445,9 @@
 	if(G.f & G_VERTEXPAINT || G.f & G_WEIGHTPAINT)
 		mask |= CD_MASK_MCOL;
 
+	if(G.f & G_SCULPTMODE)
+		mask |= CD_MASK_MDISPS;
+
 	return mask;
 #endif
 	return 0;
@@ -2210,93 +2210,11 @@
 	return ob->derivedDeform;
 }
 
-/* Move to multires Pin level, returns a copy of the original vertex coords. */
-float *multires_render_pin(Object *ob, Mesh *me, int *orig_lvl)
-{
-	float *vert_copy= NULL;
-
-	if(me->mr && !(me->mr->flag & MULTIRES_NO_RENDER)) {
-		MultiresLevel *lvl= NULL;
-		int i;
-		
-		/* Make sure all mesh edits are properly stored in the multires data*/
-		//XXX multires_update_levels(me, 1);
-	
-		/* Copy the highest level of multires verts */
-		*orig_lvl= me->mr->current;
-		//XXX lvl= multires_level_n(me->mr, BLI_countlist(&me->mr->levels));
-		vert_copy= MEM_callocN(sizeof(float)*3*lvl->totvert, "multires vert_copy");
-		for(i=0; i<lvl->totvert; ++i)
-			VecCopyf(&vert_copy[i*3], me->mr->verts[i].co);
-	
-		/* Goto the pin level for multires */
-		me->mr->newlvl= me->mr->pinlvl;
-		//XXX multires_set_level(ob, me, 1);
-	}
-	
-	return vert_copy;
-}
-
-/* Propagate the changes to render level - fails if mesh topology changed */
-void multires_render_final(Object *ob, Mesh *me, DerivedMesh **dm, float *vert_copy,
-			   const int orig_lvl, CustomDataMask dataMask)
-{
-	if(me->mr && !(me->mr->flag & MULTIRES_NO_RENDER)) {
-		if((*dm)->getNumVerts(*dm) == me->totvert &&
-		   (*dm)->getNumFaces(*dm) == me->totface) {
-			//XXX MultiresLevel *lvl= multires_level_n(me->mr, BLI_countlist(&me->mr->levels));
-			DerivedMesh *old= NULL;
-			MVert *vertdup= NULL;
-			int i;
-
-			/* Copy the verts into the mesh */
-			vertdup= (*dm)->dupVertArray(*dm);
-			(*dm)->release(*dm);
-			for(i=0; i<me->totvert; ++i)
-				me->mvert[i]= vertdup[i];
-			/* Free vertdup after use*/
-			MEM_freeN(vertdup);
-			/* Go to the render level */
-			me->mr->newlvl= me->mr->renderlvl;
-			//XXX multires_set_level(ob, me, 1);
-			(*dm)= getMeshDerivedMesh(me, ob, NULL);
-
-			/* Some of the data in dm is referenced externally, so make a copy */
-			old= *dm;
-			(*dm)= CDDM_copy(old);
-			old->release(old);
-
-			if(dataMask & CD_MASK_ORCO)
-				add_orco_dm(ob, NULL, *dm, NULL);
-
-			/* Restore the original verts */
-			me->mr->newlvl= BLI_countlist(&me->mr->levels);
-			//XXX multires_set_level(ob, me, 1);
-			//XXX for(i=0; i<lvl->totvert; ++i)
-			//XXX 	VecCopyf(me->mvert[i].co, &vert_copy[i*3]);
-		}
-		
-		if(vert_copy)
-			MEM_freeN(vert_copy);
-			
-		me->mr->newlvl= orig_lvl;
-		//XXX multires_set_level(ob, me, 1);
-	}
-}
-
-/* Multires note - if mesh has multires enabled, mesh is first set to the Pin level,
-   where all modifiers are applied, then if the topology hasn't changed, the changes
-   from modifiers are propagated up to the Render level. */
 DerivedMesh *mesh_create_derived_render(Scene *scene, Object *ob, CustomDataMask dataMask)
 {
 	DerivedMesh *final;
-	Mesh *me= get_mesh(ob);
-	float *vert_copy= NULL;
-	int orig_lvl= 0;
 	
-	vert_copy= multires_render_pin(ob, me, &orig_lvl);
 	mesh_calc_modifiers(scene, ob, NULL, NULL, &final, 1, 1, 0, dataMask, -1);
-	multires_render_final(ob, me, &final, vert_copy, orig_lvl, dataMask);
 
 	return final;
 }
@@ -2304,13 +2222,8 @@
 DerivedMesh *mesh_create_derived_index_render(Scene *scene, Object *ob, CustomDataMask dataMask, int index)
 {

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list