[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13617] trunk/blender/source/blender: == Multires ==

Nicholas Bishop nicholasbishop at gmail.com
Sat Feb 9 21:50:26 CET 2008


Revision: 13617
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13617
Author:   nicholasbishop
Date:     2008-02-09 21:50:25 +0100 (Sat, 09 Feb 2008)

Log Message:
-----------
== Multires ==

Fixed bug #8215, Crash with shaded view + multires mesh

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
    trunk/blender/source/blender/makesdna/DNA_meshdata_types.h
    trunk/blender/source/blender/render/intern/include/render_types.h
    trunk/blender/source/blender/render/intern/source/convertblender.c

Modified: trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2008-02-09 19:05:15 UTC (rev 13616)
+++ trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2008-02-09 20:50:25 UTC (rev 13617)
@@ -2578,7 +2578,7 @@
 {
 	float *vert_copy= NULL;
 
-	if(me->mr) {
+	if(me->mr && !(me->mr->flag & MULTIRES_NO_RENDER)) {
 		MultiresLevel *lvl= NULL;
 		int i;
 		
@@ -2604,16 +2604,21 @@
 void multires_render_final(Object *ob, Mesh *me, DerivedMesh **dm, float *vert_copy,
 			   const int orig_lvl, CustomDataMask dataMask)
 {
-	if(me->mr) {
+	if(me->mr && !(me->mr->flag & MULTIRES_NO_RENDER)) {
 		if((*dm)->getNumVerts(*dm) == me->totvert &&
 		   (*dm)->getNumFaces(*dm) == me->totface) {
 			MultiresLevel *lvl= multires_level_n(me->mr, BLI_countlist(&me->mr->levels));
 			DerivedMesh *old= NULL;
+			MVert *vertdup= NULL;
 			int i;
 
-			(*dm)->copyVertArray(*dm, me->mvert);
+			/* 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];
 
+			/* Go to the render level */
 			me->mr->newlvl= me->mr->renderlvl;
 			multires_set_level(ob, me, 1);
 			(*dm)= getMeshDerivedMesh(me, ob, NULL);

Modified: trunk/blender/source/blender/makesdna/DNA_meshdata_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_meshdata_types.h	2008-02-09 19:05:15 UTC (rev 13616)
+++ trunk/blender/source/blender/makesdna/DNA_meshdata_types.h	2008-02-09 20:50:25 UTC (rev 13617)
@@ -146,7 +146,7 @@
 	MVert *verts;
 
 	unsigned char level_count, current, newlvl, edgelvl, pinlvl, renderlvl;
-	unsigned char use_col, pad;
+	unsigned char use_col, flag;
 
 	/* Special level 1 data that cannot be modified from other levels */
 	CustomData vdata;
@@ -250,4 +250,7 @@
 #define TF_PIN3	   		64
 #define TF_PIN4	    	128
 
+/* multires->flag */
+#define MULTIRES_NO_RENDER 1
+
 #endif

Modified: trunk/blender/source/blender/render/intern/include/render_types.h
===================================================================
--- trunk/blender/source/blender/render/intern/include/render_types.h	2008-02-09 19:05:15 UTC (rev 13616)
+++ trunk/blender/source/blender/render/intern/include/render_types.h	2008-02-09 20:50:25 UTC (rev 13617)
@@ -491,6 +491,7 @@
 #define R_LAMPHALO		8
 #define R_GLOB_NOPUNOFLIP	16
 #define R_NEED_TANGENT	32
+#define R_SKIP_MULTIRES	64
 
 /* vlakren->flag (vlak = face in dutch) char!!! */
 #define R_SMOOTH		1

Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/convertblender.c	2008-02-09 19:05:15 UTC (rev 13616)
+++ trunk/blender/source/blender/render/intern/source/convertblender.c	2008-02-09 20:50:25 UTC (rev 13617)
@@ -2985,6 +2985,13 @@
 		if(need_orco)
 			mask |= CD_MASK_ORCO;
 
+	if(me->mr) {
+		if(re->flag & R_SKIP_MULTIRES)
+			me->mr->flag |= MULTIRES_NO_RENDER;
+		else
+			me->mr->flag &= ~MULTIRES_NO_RENDER;
+	}
+
 	dm= mesh_create_derived_render(ob, mask);
 	if(dm==NULL) return;	/* in case duplicated object fails? */
 
@@ -5070,6 +5077,8 @@
 	re->r.mode &= ~R_OSA;
 	re->flag |= R_GLOB_NOPUNOFLIP;
 	re->excludeob= actob;
+	if(type == RE_BAKE_LIGHT)
+		re->flag |= R_SKIP_MULTIRES;
 
 	if(type==RE_BAKE_NORMALS && re->r.bake_normal_space==R_BAKE_SPACE_TANGENT)
 		re->flag |= R_NEED_TANGENT;





More information about the Bf-blender-cvs mailing list