Revision: 37161
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37161
Author:   jwilkins
Date:     2011-06-04 03:55:20 +0000 (Sat, 04 Jun 2011)
Log Message:
-----------
Revision: 29503
Author: nicholasbishop
Date: 9:11:00 PM, Wednesday, June 16, 2010
Message:
Several bug fixes:

* Added layerFree_grid to fix leaked memory when freeing CD_FACEGRID
* Added layerCopy_grid to fix copying a multires mesh and having masks not 
transfer over
* Added writing for CD_PAINTMASK layer
* Added writing and reading for CD_FACEGRID

Modified Paths:
--------------
    branches/soc-2011-onion/source/blender/blenkernel/BKE_customdata.h
    branches/soc-2011-onion/source/blender/blenkernel/intern/customdata.c
    branches/soc-2011-onion/source/blender/blenkernel/intern/multires.c
    branches/soc-2011-onion/source/blender/blenloader/intern/readfile.c
    branches/soc-2011-onion/source/blender/blenloader/intern/writefile.c
    branches/soc-2011-onion/source/blender/makesdna/DNA_customdata_types.h

Property Changed:
----------------
    branches/soc-2011-onion/


Property changes on: branches/soc-2011-onion
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/soc-2010-jwilkins:28499-37009
/branches/soc-2010-nicolasbishop:28448-29483
/trunk/blender:36833-37054
   + /branches/soc-2010-jwilkins:28499-37009
/branches/soc-2010-nicolasbishop:28448-29483,29503
/trunk/blender:36833-37054

Modified: branches/soc-2011-onion/source/blender/blenkernel/BKE_customdata.h
===================================================================
--- branches/soc-2011-onion/source/blender/blenkernel/BKE_customdata.h  
2011-06-04 03:30:35 UTC (rev 37160)
+++ branches/soc-2011-onion/source/blender/blenkernel/BKE_customdata.h  
2011-06-04 03:55:20 UTC (rev 37161)
@@ -289,6 +289,9 @@
 void CustomData_from_bmeshpoly(struct CustomData *fdata, struct CustomData 
*pdata, struct CustomData *ldata, int total);
 void CustomData_bmesh_init_pool(struct CustomData *data, int allocsize);
 
+/* Subsurf grids */
+void CustomData_set_num_grid_elements(struct CustomData *data, int grid_elems);
+
 /* External file storage */
 
 void CustomData_external_add(struct CustomData *data,

Modified: branches/soc-2011-onion/source/blender/blenkernel/intern/customdata.c
===================================================================
--- branches/soc-2011-onion/source/blender/blenkernel/intern/customdata.c       
2011-06-04 03:30:35 UTC (rev 37160)
+++ branches/soc-2011-onion/source/blender/blenkernel/intern/customdata.c       
2011-06-04 03:55:20 UTC (rev 37161)
@@ -806,8 +806,28 @@
                mcol[i] = default_mcol;
 }
 
+void layerCopy_grid(const void *source_v, void *dest_v, int count)
+{
+       const CustomData *source = source_v;
+       CustomData *dest = dest_v;
+       int i;
 
+       for(i = 0; i < count; ++i)
+               CustomData_copy(source + i, dest + i, ~0, CD_DUPLICATE,
+                               source[i].grid_elems);
+}
 
+void layerFree_grid(void *data, int count, int size)
+{
+       CustomData *cd = data;
+       int i;
+
+       for(i = 0; i < count; ++i) {
+               CustomData_free(cd + i, cd[i].grid_elems);
+       }
+}
+
+
 static const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = {
        /* 0 */
        {sizeof(MVert), "MVert", 1, NULL, NULL, NULL, NULL, NULL, NULL},
@@ -850,7 +870,7 @@
         {sizeof(MCol)*4, "MCol", 4, "TexturedCol", NULL, NULL, 
layerInterp_mcol,
         layerSwap_mcol, layerDefault_mcol},
        {sizeof(float)*3, "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
-       {sizeof(CustomData), "CustomData", 1, "Face Grid", NULL, NULL, NULL, 
NULL, NULL},
+       {sizeof(CustomData), "CustomData", 1, "Face Grid", layerCopy_grid, 
layerFree_grid, NULL, NULL, NULL},
        {sizeof(float)*3, "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
        {sizeof(float), "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
 };
@@ -869,7 +889,8 @@
 const CustomDataMask CD_MASK_MESH =
        CD_MASK_MVERT | CD_MASK_MEDGE | CD_MASK_MFACE |
        CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_MTFACE | CD_MASK_MCOL |
-       CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_PROP_STR | CD_MASK_MDISPS 
| CD_MASK_PAINTMASK;
+       CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_PROP_STR | CD_MASK_MDISPS 
|
+       CD_MASK_FACEGRID | CD_MASK_PAINTMASK;
 const CustomDataMask CD_MASK_EDITMESH =
        CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_MTFACE |
        CD_MASK_MCOL|CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_PROP_STR | 
CD_MASK_MDISPS | CD_MASK_FACEGRID;
@@ -2363,6 +2384,12 @@
        return keeplayer;
 }
 
+/* Subsurf grids */
+void CustomData_set_num_grid_elements(CustomData *data, int grid_elems)
+{
+       data->grid_elems = grid_elems;
+}
+
 /****************************** External Files *******************************/
 
 static void customdata_external_filename(char filename[FILE_MAX], ID *id, 
CustomDataExternal *external)

Modified: branches/soc-2011-onion/source/blender/blenkernel/intern/multires.c
===================================================================
--- branches/soc-2011-onion/source/blender/blenkernel/intern/multires.c 
2011-06-04 03:30:35 UTC (rev 37160)
+++ branches/soc-2011-onion/source/blender/blenkernel/intern/multires.c 
2011-06-04 03:55:20 UTC (rev 37161)
@@ -341,6 +341,7 @@
                memset(cd, 0, sizeof(*cd));
                CustomData_copy(&old, cd, ~0, CD_CALLOC, totelem);
                CustomData_free(&old, 0);
+               CustomData_set_num_grid_elements(cd, totelem);
        }
 
        /* This will be replaced when we do CD_DISPS */

Modified: branches/soc-2011-onion/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/soc-2011-onion/source/blender/blenloader/intern/readfile.c 
2011-06-04 03:30:35 UTC (rev 37160)
+++ branches/soc-2011-onion/source/blender/blenloader/intern/readfile.c 
2011-06-04 03:55:20 UTC (rev 37161)
@@ -3457,7 +3457,7 @@
 
 static void direct_link_customdata(FileData *fd, CustomData *data, int count)
 {
-       int i = 0;
+       int i = 0, j;
 
        data->layers= newdataadr(fd, data->layers);
        data->external= newdataadr(fd, data->external);
@@ -3472,6 +3472,11 @@
                        layer->data = newdataadr(fd, layer->data);
                        if(layer->type == CD_MDISPS)
                                direct_link_mdisps(fd, count, layer->data, 
layer->flag & CD_FLAG_EXTERNAL);
+                       if(layer->type == CD_FACEGRID) {
+                               CustomData *grids = layer->data;
+                               for(j = 0; j < count; ++j)
+                                       direct_link_customdata(fd, grids + j, 
grids[j].grid_elems);
+                       }
                        i++;
                }
        }

Modified: branches/soc-2011-onion/source/blender/blenloader/intern/writefile.c
===================================================================
--- branches/soc-2011-onion/source/blender/blenloader/intern/writefile.c        
2011-06-04 03:30:35 UTC (rev 37160)
+++ branches/soc-2011-onion/source/blender/blenloader/intern/writefile.c        
2011-06-04 03:55:20 UTC (rev 37161)
@@ -1526,7 +1526,7 @@
 
 static void write_customdata(WriteData *wd, ID *id, int count, CustomData 
*data, int partial_type, int partial_count)
 {
-       int i;
+       int i, j;
 
        /* write external customdata (not for undo) */
        if(data->external && !wd->current)
@@ -1546,6 +1546,16 @@
                else if (layer->type == CD_MDISPS) {
                        write_mdisps(wd, count, layer->data, layer->flag & 
CD_FLAG_EXTERNAL);
                }
+               else if (layer->type == CD_PAINTMASK) {
+                       writedata(wd, DATA, sizeof(float)*count, layer->data);
+               }
+               else if (layer->type == CD_FACEGRID) {
+                       CustomData *grids = layer->data;
+                       writestruct(wd, DATA, "CustomData", count, grids);
+                       for(j = 0; j < count; ++j)
+                               write_customdata(wd, id, grids[j].grid_elems,
+                                                grids + j, -1, 0);
+               }
                else {
                        CustomData_file_write_info(layer->type, &structname, 
&structnum);
                        if (structnum) {

Modified: branches/soc-2011-onion/source/blender/makesdna/DNA_customdata_types.h
===================================================================
--- branches/soc-2011-onion/source/blender/makesdna/DNA_customdata_types.h      
2011-06-04 03:30:35 UTC (rev 37160)
+++ branches/soc-2011-onion/source/blender/makesdna/DNA_customdata_types.h      
2011-06-04 03:55:20 UTC (rev 37161)
@@ -62,7 +62,8 @@
 typedef struct CustomData {
        CustomDataLayer *layers;      /* CustomDataLayers, ordered by type */
        int totlayer, maxlayer;       /* number of layers, size of layers array 
*/
-       int totsize, pad;             /* in editmode, total size of all data 
layers */
+       int totsize;                  /* in editmode, total size of all data 
layers */
+       int grid_elems;               /* For grids, number of elements */
        void *pool;                   /* Bmesh: Memory pool for allocation of 
blocks */
        CustomDataExternal *external; /* external file storing customdata 
layers */
 } CustomData;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to