merge with trunk at r27259 and commit of a patch by anthony jones to fix msvc (though...
[blender-staging.git] / source / blender / makesdna / DNA_meshdata_types.h
index 4e427ed733ce1dfb5682f3fcf33647f5ae627526..1cfbd9d8d513fae6661ac8b20be93b3d7586cd53 100644 (file)
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
  * All rights reserved.
 #define DNA_MESHDATA_TYPES_H
 
 #include "DNA_customdata_types.h"
+#include "DNA_listBase.h"
 
 struct Bone;
 struct Image;
 
+/*tesselation face, see MLoop/MPoly for the real face data*/
 typedef struct MFace {
        unsigned int v1, v2, v3, v4;
-       char pad, mat_nr;
+       short mat_nr;
        char edcode, flag;      /* we keep edcode, for conversion to edges draw flags in old files */
 } MFace;
 
@@ -60,16 +62,33 @@ typedef struct MDeformVert {
 typedef struct MVert {
        float   co[3];
        short   no[3];
-       char flag, mat_nr, bweight, pad[3];
+       short   mat_nr;
+       char flag, bweight, pad[2];
 } MVert;
 
-/* at the moment alpha is abused for vertex painting
+/* tesselation vertex color data.
+ * at the moment alpha is abused for vertex painting
  * and not used for transperency, note that red and blue are swapped */
 typedef struct MCol {
        char a, r, g, b;        
 } MCol;
 
-/*bmesh custom data stuff*/
+/*new face structure, replaces MFace, which is now
+  only used for storing tesselations.*/
+typedef struct MPoly {
+       /*offset into loop array and number of loops in the face*/
+       int loopstart, totloop;
+       short mat_nr;
+       short flag;
+} MPoly;
+
+/*the e here is because we want to move away from
+  relying on edge hashes.*/
+typedef struct MLoop {
+       int v; /*vertex index*/
+       int e; /*edge index*/
+} MLoop;
+
 typedef struct MTexPoly{
        struct Image *tpage;
        char flag, transp;
@@ -78,11 +97,19 @@ typedef struct MTexPoly{
 
 typedef struct MLoopUV{
        float uv[2];
+       int flag;
 }MLoopUV;
 
+/*mloopuv->flag*/
+#define MLOOPUV_EDGESEL        1
+#define MLOOPUV_VERTSEL        2
+#define MLOOPUV_PINNED 4
+
+/* at the moment alpha is abused for vertex painting
+ * and not used for transperency, note that red and blue are swapped */
 typedef struct MLoopCol{
        char a, r, g, b;
-}MLoopCol;
+} MLoopCol;
 
 typedef struct MSticky {
        float co[2];
@@ -93,6 +120,7 @@ typedef struct MSelect {
        int type;
 } MSelect;
 
+/*tesselation uv face data*/
 typedef struct MTFace {
        float uv[4][2];
        struct Image *tpage;
@@ -115,7 +143,14 @@ typedef struct OrigSpaceFace {
        float uv[4][2];
 } OrigSpaceFace;
 
-/* Multiresolution modeling */
+typedef struct MDisps {
+       /* Strange bug in SDNA: if disps pointer comes first, it fails to see totdisp */
+       int totdisp;
+       char pad[4];
+       float (*disps)[3];
+} MDisps;
+
+/** Multires structs kept for compatibility with old files **/
 typedef struct MultiresCol {
        float a, r, g, b;
 } MultiresCol;
@@ -125,7 +160,7 @@ typedef struct MultiresColFace {
 } MultiresColFace;
 typedef struct MultiresFace {
        unsigned int v[4];
-               unsigned int mid;
+       unsigned int mid;
        char flag, mat_nr, pad[2];
 } MultiresFace;
 typedef struct MultiresEdge {
@@ -141,15 +176,9 @@ typedef struct MultiresLevel {
        MultiresColFace *colfaces;
        MultiresEdge *edges;
 
-       /* Temporary connectivity data */
-       char *edge_boundary_states;
-       struct ListBase *vert_edge_map;
-       struct ListBase *vert_face_map;
-       struct MultiresMapNode *map_mem;
-
        unsigned int totvert, totface, totedge, pad;
 
-       /* Kept for compatibility with older files */
+       /* Kept for compatibility with even older files */
        MVert *verts;
 } MultiresLevel;
 
@@ -167,6 +196,8 @@ typedef struct Multires {
        char *edge_creases;
 } Multires;
 
+/** End Multires **/
+
 typedef struct PartialVisibility {
        unsigned int *vert_map; /* vert_map[Old Index]= New Index */
        int *edge_map; /* edge_map[Old Index]= New Index, -1= hidden */
@@ -176,10 +207,12 @@ typedef struct PartialVisibility {
 } PartialVisibility;
 
 /* mvert->flag (1=SELECT) */
-#define ME_SPHERETEST  2
-#define ME_SPHERETEMP  4
-#define ME_HIDE                        16
+#define ME_SPHERETEST          2
+#define ME_VERT_TMP_TAG                4
+#define ME_HIDE                                16
+#define ME_PIN                 64
 #define ME_VERT_MERGED         (1<<6)
+#define ME_VERT_PBVH_UPDATE    (1<<7)
 
 /* medge->flag (1=SELECT)*/
 #define ME_EDGEDRAW                    (1<<1)
@@ -211,7 +244,9 @@ typedef struct PartialVisibility {
 /* flag (mface) */
 #define ME_SMOOTH                      1
 #define ME_FACE_SEL                    2
-                                               /* flag ME_HIDE==16 is used here too */ 
+/* flag ME_HIDE==16 is used here too */ 
+#define ME_DRAW_ACT                    4
+
 /* mselect->type */
 #define ME_VSEl        0
 #define ME_ESEl 1
@@ -234,7 +269,7 @@ typedef struct PartialVisibility {
 #define TF_LIGHT               16
 
 #define TF_SHAREDCOL   64
-#define TF_TILES               128
+#define TF_TILES               128             /* deprecated */
 #define TF_BILLBOARD   256
 #define TF_TWOSIDE             512
 #define TF_INVISIBLE   1024
@@ -264,7 +299,4 @@ typedef struct PartialVisibility {
 #define TF_PIN3                        64
 #define TF_PIN4                128
 
-/* multires->flag */
-#define MULTIRES_NO_RENDER 1
-
 #endif