Merged changes in the trunk up to revision 47056.
[blender-staging.git] / source / blender / makesdna / DNA_meshdata_types.h
index f5a8a185556ca26cb45515f09f0f1b16cd575d42..dc8115b556cadd4d9202c2a72b7806c30fa7d6d9 100644 (file)
@@ -95,7 +95,7 @@ typedef struct MLoop {
 typedef struct MTexPoly {
        struct Image *tpage;
        char flag, transp;
-       short mode,tile,unwrap;
+       short mode, tile, unwrap;
 } MTexPoly;
 
 /* can copy from/to MTexPoly/MTFace */
@@ -122,9 +122,30 @@ typedef struct MLoopUV {
 /* at the moment alpha is abused for vertex painting
  * and not used for transparency, note that red and blue are swapped */
 typedef struct MLoopCol {
-       char a, r, g, b;
+       char r, g, b, a;
 } MLoopCol;
 
+#define MESH_MLOOPCOL_FROM_MCOL(_mloopcol, _mcol) \
+{                                                 \
+       MLoopCol   *mloopcol__tmp = _mloopcol;        \
+       const MCol *mcol__tmp     = _mcol;            \
+       mloopcol__tmp->r = mcol__tmp->b;              \
+       mloopcol__tmp->g = mcol__tmp->g;              \
+       mloopcol__tmp->b = mcol__tmp->r;              \
+       mloopcol__tmp->a = mcol__tmp->a;              \
+} (void)0
+
+
+#define MESH_MLOOPCOL_TO_MCOL(_mloopcol, _mcol) \
+{                                               \
+       const MLoopCol *mloopcol__tmp = _mloopcol;  \
+       MCol           *mcol__tmp     = _mcol;      \
+       mcol__tmp->b = mloopcol__tmp->r;            \
+       mcol__tmp->g = mloopcol__tmp->g;            \
+       mcol__tmp->r = mloopcol__tmp->b;            \
+       mcol__tmp->a = mloopcol__tmp->a;            \
+} (void)0
+
 typedef struct MSticky {
        float co[2];
 } MSticky;
@@ -166,6 +187,12 @@ typedef struct MDisps {
        int totdisp;
        int level;
        float (*disps)[3];
+       
+       /* Used for hiding parts of a multires mesh. Essentially the multires
+        * equivalent of MVert.flag's ME_HIDE bit.
+        *
+        * This is a bitmap, keep in sync with type used in BLI_bitmap.h */
+       unsigned int *hidden;
 } MDisps;
 
 /** Multires structs kept for compatibility with old files **/
@@ -220,6 +247,37 @@ typedef struct MRecast {
        int             i;
 } MRecast;
 
+typedef struct GridPaintMask {
+       /* The data array contains gridsize*gridsize elements */
+       float *data;
+
+       /* The maximum multires level associated with this grid */
+       unsigned int level;
+
+       int pad;
+} GridPaintMask;
+
+typedef enum MVertSkinFlag {
+       /* Marks a vertex as the edge-graph root, used for calculating
+          rotations for all connected edges (recursively.) Also used to
+          choose a root when generating an armature. */
+       MVERT_SKIN_ROOT = 1,
+
+       /* Marks a branch vertex (vertex with more than two connected
+          edges) so that it's neighbors are directly hulled together,
+          rather than the default of generating intermediate frames. */
+       MVERT_SKIN_LOOSE = 2
+} MVertSkinFlag;
+
+typedef struct MVertSkin {
+       /* Radii of the skin, define how big the generated frames
+          are. Currently only the first two elements are used. */
+       float radius[3];
+
+       /* MVertSkinFlag */
+       int flag;
+} MVertSkin;
+
 /* mvert->flag (1=SELECT) */
 #define ME_SPHERETEST          2
 #define ME_VERT_TMP_TAG                4
@@ -230,12 +288,13 @@ typedef struct MRecast {
 /* medge->flag (1=SELECT)*/
 #define ME_EDGEDRAW                    (1<<1)
 #define ME_SEAM                                (1<<2)
-#define ME_FGON                                (1<<3)
+#define ME_FGON                                (1<<3) /* no longer used (now we have ngons), only defined so we can clear it */
                                                /* reserve 16 for ME_HIDE */
 #define ME_EDGERENDER          (1<<5)
 #define ME_LOOSEEDGE           (1<<7)
 /* #define ME_SEAM_LAST                (1<<8) */ /* UNUSED */
 #define ME_SHARP                       (1<<9)    /* only reason this flag remains a 'short' */
+#define ME_FREESTYLE_EDGE      (1<<10)
 
 /* puno = vertexnormal (mface) */
 #define ME_PROJXY              16
@@ -252,6 +311,7 @@ typedef struct MRecast {
 /* flag (mface) */
 #define ME_SMOOTH                      1
 #define ME_FACE_SEL                    2
+#define ME_FREESTYLE_FACE      4
 /* flag ME_HIDE==16 is used here too */ 
 
 #define ME_POLY_LOOP_PREV(mloop, mp, i)  (&(mloop)[(mp)->loopstart + (((i) + (mp)->totloop - 1) % (mp)->totloop)])