Merge branch 'master' into blender2.8
[blender.git] / source / blender / makesdna / DNA_mesh_types.h
index a667d0e578d843045a61a21dbc0c3c0a91e7750d..9e15bd32b3bba1cd763155eccffd89607219cef7 100644 (file)
 struct AnimData;
 struct Ipo;
 struct Key;
+struct LinkNode;
 struct MCol;
 struct MEdge;
 struct MFace;
 struct MLoop;
 struct MLoopCol;
+struct MLoopTri;
 struct MLoopUV;
 struct MPoly;
 struct MTexPoly;
@@ -52,6 +54,50 @@ struct Material;
 struct Mesh;
 struct Multires;
 
+#
+#
+typedef struct EditMeshData {
+       /** when set, \a vertexNos, polyNos are lazy initialized */
+       const float (*vertexCos)[3];
+
+       /** lazy initialize (when \a vertexCos is set) */
+       float const (*vertexNos)[3];
+       float const (*polyNos)[3];
+       /** also lazy init but dont depend on \a vertexCos */
+       const float (*polyCos)[3];
+} EditMeshData;
+
+
+/**
+ * \warning Typical access is done via #BKE_mesh_runtime_looptri_ensure, #BKE_mesh_runtime_looptri_len.
+ */
+struct MLoopTri_Store {
+       /* WARNING! swapping between array (ready-to-be-used data) and array_wip (where data is actually computed)
+        *          shall always be protected by same lock as one used for looptris computing. */
+       struct MLoopTri *array, *array_wip;
+       int len;
+       int len_alloc;
+};
+
+/* not saved in file! */
+typedef struct Mesh_Runtime {
+       struct EditMeshData *edit_data;
+       void *batch_cache;
+
+       int64_t cd_dirty_vert;
+       int64_t cd_dirty_edge;
+       int64_t cd_dirty_loop;
+       int64_t cd_dirty_poly;
+
+       struct MLoopTri_Store looptris;
+
+       /** 'BVHCache', for 'BKE_bvhutil.c' */
+       struct LinkNode *bvh_cache;
+
+       int deformed_only; /* set by modifier stack if only deformed from original */
+       char padding[4];
+} Mesh_Runtime;
+
 typedef struct Mesh {
        ID id;
        struct AnimData *adt;           /* animation data (must be immediately after id for utilities to use it) */
@@ -66,7 +112,6 @@ typedef struct Mesh {
 /* BMESH ONLY */
        /*new face structures*/
        struct MPoly *mpoly;
-       struct MTexPoly *mtpoly;
        struct MLoop *mloop;
        struct MLoopUV *mloopuv;
        struct MLoopCol *mloopcol;
@@ -127,6 +172,8 @@ typedef struct Mesh {
        short totcol;
 
        struct Multires *mr DNA_DEPRECATED; /* deprecated multiresolution modeling data, only keep for loading old files */
+
+       Mesh_Runtime runtime;
 } Mesh;
 
 /* deprecated by MTFace, only here for file reading */