[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33200] trunk/blender/source/blender/ blenkernel/intern/multires.c: == Multires ==
Nicholas Bishop
nicholasbishop at gmail.com
Sat Nov 20 19:54:58 CET 2010
Revision: 33200
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33200
Author: nicholasbishop
Date: 2010-11-20 19:54:58 +0100 (Sat, 20 Nov 2010)
Log Message:
-----------
== Multires ==
Fixed bug #20620, "VertColors and Flat/Soft imported from 2.49 are wrong
(MultiRes)" reported by Manuel R.
* Added function to load level-0 vertex colors
* Added function to load level-0 face flags
* Warning: the 2.5 multires modifier doesn't support multires vertex colors
or multires face flags; that data will be lost if you import it into 2.5.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/multires.c
Modified: trunk/blender/source/blender/blenkernel/intern/multires.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/multires.c 2010-11-20 18:46:36 UTC (rev 33199)
+++ trunk/blender/source/blender/blenkernel/intern/multires.c 2010-11-20 18:54:58 UTC (rev 33200)
@@ -1325,7 +1325,53 @@
multires_mvert_to_ss(dm, vdst);
}
+/* Copy the first-level vcol data to the mesh, if it exists */
+/* Warning: higher-level vcol data will be lost */
+static void multires_load_old_vcols(Mesh *me)
+{
+ MultiresLevel *lvl;
+ MultiresColFace *colface;
+ MCol *mcol;
+ int i, j;
+ if(!(lvl = me->mr->levels.first))
+ return;
+
+ if(!(colface = lvl->colfaces))
+ return;
+
+ /* older multires format never supported multiple vcol layers,
+ so we can assume the active vcol layer is the correct one */
+ if(!(mcol = CustomData_get_layer(&me->fdata, CD_MCOL)))
+ return;
+
+ for(i = 0; i < me->totface; ++i) {
+ for(j = 0; j < 4; ++j) {
+ mcol[i*4 + j].a = colface[i].col[j].a;
+ mcol[i*4 + j].r = colface[i].col[j].r;
+ mcol[i*4 + j].g = colface[i].col[j].g;
+ mcol[i*4 + j].b = colface[i].col[j].b;
+ }
+ }
+}
+
+/* Copy the first-level face-flag data to the mesh */
+static void multires_load_old_face_flags(Mesh *me)
+{
+ MultiresLevel *lvl;
+ MultiresFace *faces;
+ int i;
+
+ if(!(lvl = me->mr->levels.first))
+ return;
+
+ if(!(faces = lvl->faces))
+ return;
+
+ for(i = 0; i < me->totface; ++i)
+ me->mface[i].flag = faces[i].flag;
+}
+
void multires_load_old(Object *ob, Mesh *me)
{
MultiresLevel *lvl;
@@ -1386,6 +1432,9 @@
memset(&me->mr->vdata, 0, sizeof(CustomData));
memset(&me->mr->fdata, 0, sizeof(CustomData));
+ multires_load_old_vcols(me);
+ multires_load_old_face_flags(me);
+
/* Remove the old multires */
multires_free(me->mr);
me->mr= NULL;
More information about the Bf-blender-cvs
mailing list