Commit: 221ed1342bd2f34f16158dcbfc8e5fbf185fd381
Author: Nicholas Bishop
Date:   Mon Jan 19 15:59:55 2015 +0100
Branches: cycles-ptex-12
https://developer.blender.org/rB221ed1342bd2f34f16158dcbfc8e5fbf185fd381

Add a couple new CustomData layers for Ptex

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

M       source/blender/blenkernel/intern/customdata.c
M       source/blender/makesdna/DNA_customdata_types.h

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

diff --git a/source/blender/blenkernel/intern/customdata.c 
b/source/blender/blenkernel/intern/customdata.c
index 89ebed2..da37322 100644
--- a/source/blender/blenkernel/intern/customdata.c
+++ b/source/blender/blenkernel/intern/customdata.c
@@ -60,6 +60,7 @@
 #include "BKE_mesh_mapping.h"
 #include "BKE_mesh_remap.h"
 #include "BKE_multires.h"
+#include "BKE_ptex.h"
 
 #include "bmesh.h"
 
@@ -1141,6 +1142,44 @@ static void layerSwap_flnor(void *data, const int 
*corner_indices)
        memcpy(flnors, nors, sizeof(nors));
 }
 
+/*** CD_LOOP_PTEX ***/
+
+static void layerCopy_loop_ptex(const void *src, void *dst, int count)
+{
+       const MLoopPtex *loop_ptex_src = src;
+       MLoopPtex *loop_ptex_dst = dst;
+       int i;
+
+       memcpy(loop_ptex_dst, loop_ptex_src, sizeof(*loop_ptex_dst) * count);
+       for (i = 0; i < count; i++) {
+               loop_ptex_dst[i].data = MEM_dupallocN(loop_ptex_dst[i].data);
+       }
+}
+
+static void layerDefault_loop_ptex(void *data, int count)
+{
+       MLoopPtex *loop_ptex = data;
+       int i;
+
+       memset(loop_ptex, 0, sizeof(*loop_ptex) * count);
+       for (i = 0; i < count; i++) {
+               loop_ptex[i].data_type = MPTEX_DATA_TYPE_UINT8;
+               loop_ptex[i].num_channels = 4;
+       }
+}
+
+static void layerFree_loop_ptex(void *data, int count, int UNUSED(size))
+{
+       MLoopPtex *loop_ptex = data;
+       int i;
+
+       for (i = 0; i < count; i++) {
+               BKE_loop_ptex_free(&loop_ptex[i]);
+       }
+}
+
+/********************/
+
 static const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = {
        /* 0: CD_MVERT */
        {sizeof(MVert), "MVert", 1, NULL, NULL, NULL, NULL, NULL, NULL},
@@ -1255,6 +1294,13 @@ static const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = {
        {sizeof(float[4]), "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
        /* 40: CD_TESSLOOPNORMAL */
        {sizeof(short[4][3]), "", 0, NULL, NULL, NULL, NULL, layerSwap_flnor, 
NULL},
+       /* 41: CD_LOOP_PTEX_UV */
+       {sizeof(MLoopPtexUV), "MLoopPtexUV", 1, NULL, NULL, NULL, NULL, NULL, 
NULL},
+       /* 42: CD_TESSFACE_PTEX */
+       {sizeof(MTessFacePtex), "MTessFacePtex", 1, NULL, NULL, NULL, NULL, 
NULL, NULL},
+       /* 43: CD_LOOP_PTEX */
+       {sizeof(MLoopPtex), "MLoopPtex", 1, N_("Ptex"), layerCopy_loop_ptex,
+        layerFree_loop_ptex, NULL, NULL, layerDefault_loop_ptex},
 };
 
 /* note, numbers are from trunk and need updating for bmesh */
@@ -1271,6 +1317,7 @@ static const char *LAYERTYPENAMES[CD_NUMTYPES] = {
        /* 30-34 */ "CDSubSurfCrease", "CDOrigSpaceLoop", "CDPreviewLoopCol", 
"CDBMElemPyPtr", "CDPaintMask",
        /* 35-36 */ "CDGridPaintMask", "CDMVertSkin",
        /* 37-40 */ "CDFreestyleEdge", "CDFreestyleFace", "CDMLoopTangent", 
"CDTessLoopNormal",
+       /* 41-43 */ "CDLoopPtexUV", "CDTessFacePtex", "CDLoopPtex",
 };
 
 
@@ -1282,7 +1329,8 @@ const CustomDataMask CD_MASK_MESH =
     CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_PROP_STR | CD_MASK_MDISPS |
     CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL | CD_MASK_MPOLY | CD_MASK_MLOOP |
     CD_MASK_MTEXPOLY | CD_MASK_RECAST | CD_MASK_PAINT_MASK |
-    CD_MASK_GRID_PAINT_MASK | CD_MASK_MVERT_SKIN | CD_MASK_FREESTYLE_EDGE | 
CD_MASK_FREESTYLE_FACE;
+    CD_MASK_GRID_PAINT_MASK | CD_MASK_MVERT_SKIN | CD_MASK_FREESTYLE_EDGE | 
CD_MASK_FREESTYLE_FACE |
+       CD_MASK_TESSFACE_PTEX | CD_MASK_LOOP_PTEX_UV | CD_MASK_LOOP_PTEX;
 const CustomDataMask CD_MASK_EDITMESH =
     CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_MTFACE | CD_MASK_MLOOPUV |
     CD_MASK_MLOOPCOL | CD_MASK_MTEXPOLY | CD_MASK_SHAPE_KEYINDEX |
@@ -1295,13 +1343,15 @@ const CustomDataMask CD_MASK_DERIVEDMESH =
     CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL | CD_MASK_MTEXPOLY | 
CD_MASK_PREVIEW_MLOOPCOL |
     CD_MASK_PROP_STR | CD_MASK_ORIGSPACE | CD_MASK_ORIGSPACE_MLOOP | 
CD_MASK_ORCO | CD_MASK_TANGENT |
     CD_MASK_PREVIEW_MCOL | CD_MASK_SHAPEKEY | CD_MASK_RECAST |
-    CD_MASK_ORIGINDEX | CD_MASK_MVERT_SKIN | CD_MASK_FREESTYLE_EDGE | 
CD_MASK_FREESTYLE_FACE;
+    CD_MASK_ORIGINDEX | CD_MASK_MVERT_SKIN | CD_MASK_FREESTYLE_EDGE | 
CD_MASK_FREESTYLE_FACE |
+       CD_MASK_TESSFACE_PTEX | CD_MASK_LOOP_PTEX_UV | CD_MASK_LOOP_PTEX;
 const CustomDataMask CD_MASK_BMESH =
     CD_MASK_MLOOPUV | CD_MASK_MLOOPCOL | CD_MASK_MTEXPOLY |
     CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_PROP_FLT | 
CD_MASK_PROP_INT |
     CD_MASK_PROP_STR | CD_MASK_SHAPEKEY | CD_MASK_SHAPE_KEYINDEX | 
CD_MASK_MDISPS |
     CD_MASK_CREASE | CD_MASK_BWEIGHT | CD_MASK_RECAST | CD_MASK_PAINT_MASK |
-    CD_MASK_GRID_PAINT_MASK | CD_MASK_MVERT_SKIN | CD_MASK_FREESTYLE_EDGE | 
CD_MASK_FREESTYLE_FACE;
+    CD_MASK_GRID_PAINT_MASK | CD_MASK_MVERT_SKIN | CD_MASK_FREESTYLE_EDGE | 
CD_MASK_FREESTYLE_FACE |
+    CD_MASK_LOOP_PTEX;
 const CustomDataMask CD_MASK_FACECORNERS =  /* XXX Not used anywhere! */
     CD_MASK_MTFACE | CD_MASK_MCOL | CD_MASK_MTEXPOLY | CD_MASK_MLOOPUV |
     CD_MASK_MLOOPCOL | CD_MASK_NORMAL | CD_MASK_MLOOPTANGENT;
@@ -1316,7 +1366,8 @@ const CustomDataMask CD_MASK_EVERYTHING =
     /* BMESH ONLY END */
     CD_MASK_PAINT_MASK | CD_MASK_GRID_PAINT_MASK | CD_MASK_MVERT_SKIN |
     CD_MASK_FREESTYLE_EDGE | CD_MASK_FREESTYLE_FACE |
-    CD_MASK_MLOOPTANGENT | CD_MASK_TESSLOOPNORMAL;
+    CD_MASK_MLOOPTANGENT | CD_MASK_TESSLOOPNORMAL |
+       CD_MASK_TESSFACE_PTEX | CD_MASK_LOOP_PTEX_UV | CD_MASK_LOOP_PTEX;
 
 static const LayerTypeInfo *layerType_getInfo(int type)
 {
@@ -2407,6 +2458,9 @@ void CustomData_from_bmeshpoly(CustomData *fdata, 
CustomData *pdata, CustomData
                else if (ldata->layers[i].type == CD_NORMAL) {
                        CustomData_add_layer_named(fdata, CD_TESSLOOPNORMAL, 
CD_CALLOC, NULL, total, ldata->layers[i].name);
                }
+               else if (ldata->layers[i].type == CD_LOOP_PTEX_UV) {
+                       CustomData_add_layer_named(fdata, CD_TESSFACE_PTEX, 
CD_CALLOC, NULL, total, ldata->layers[i].name);
+               }
        }
 
        CustomData_bmesh_update_active_layers(fdata, pdata, ldata);
diff --git a/source/blender/makesdna/DNA_customdata_types.h 
b/source/blender/makesdna/DNA_customdata_types.h
index 7fedad2..39bfa4e 100644
--- a/source/blender/makesdna/DNA_customdata_types.h
+++ b/source/blender/makesdna/DNA_customdata_types.h
@@ -63,9 +63,10 @@ typedef struct CustomDataExternal {
  * layers, each with a data type (e.g. MTFace, MDeformVert, etc.). */
 typedef struct CustomData {
        CustomDataLayer *layers;      /* CustomDataLayers, ordered by type */
-       int typemap[41];              /* runtime only! - maps types to indices 
of first layer of that type,
+       int typemap[44];              /* runtime only! - maps types to indices 
of first layer of that type,
                                       * MUST be >= CD_NUMTYPES, but we cant 
use a define here.
                                       * Correct size is ensured in 
CustomData_update_typemap assert() */
+       int pad;
        int totlayer, maxlayer;       /* number of layers, size of layers array 
*/
        int totsize;                  /* in editmode, total size of all data 
layers */
        struct BLI_mempool *pool;     /* (BMesh Only): Memory pool for 
allocation of blocks */
@@ -120,7 +121,11 @@ typedef enum CustomDataType {
        CD_MLOOPTANGENT     = 39,
        CD_TESSLOOPNORMAL   = 40,
 
-       CD_NUMTYPES         = 41
+       CD_LOOP_PTEX_UV     = 41,
+       CD_TESSFACE_PTEX    = 42,
+       CD_LOOP_PTEX        = 43,
+
+       CD_NUMTYPES         = 44
 } CustomDataType;
 
 /* Bits for CustomDataMask */
@@ -168,6 +173,10 @@ typedef enum CustomDataType {
 #define CD_MASK_MLOOPTANGENT    (1LL << CD_MLOOPTANGENT)
 #define CD_MASK_TESSLOOPNORMAL  (1LL << CD_TESSLOOPNORMAL)
 
+#define CD_MASK_LOOP_PTEX_UV    (1LL << CD_LOOP_PTEX_UV)
+#define CD_MASK_TESSFACE_PTEX   (1LL << CD_TESSFACE_PTEX)
+#define CD_MASK_LOOP_PTEX       (1LL << CD_LOOP_PTEX)
+
 /* CustomData.flag */
 enum {
        /* Indicates layer should not be copied by CustomData_from_template or 
CustomData_copy_data */

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

Reply via email to