Cleanup: misc spelling fixes
[blender.git] / source / blender / makesdna / DNA_customdata_types.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
17  * All rights reserved.
18  */
19
20 /** \file
21  * \ingroup DNA
22  *
23  * Used for custom mesh data types (stored per vert/edge/loop/face)
24  */
25
26 #ifndef __DNA_CUSTOMDATA_TYPES_H__
27 #define __DNA_CUSTOMDATA_TYPES_H__
28
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32
33 #include "DNA_defs.h"
34
35 /** descriptor and storage for a custom data layer */
36 typedef struct CustomDataLayer {
37   /** Type of data in layer. */
38   int type;
39   /** In editmode, offset of layer in block. */
40   int offset;
41   /** General purpose flag. */
42   int flag;
43   /** Number of the active layer of this type. */
44   int active;
45   /** Number of the layer to render. */
46   int active_rnd;
47   /** Number of the layer to render. */
48   int active_clone;
49   /** Number of the layer to render. */
50   int active_mask;
51   /** Shape keyblock unique id reference. */
52   int uid;
53   /** Layer name, MAX_CUSTOMDATA_LAYER_NAME. */
54   char name[64];
55   /** Layer data. */
56   void *data;
57 } CustomDataLayer;
58
59 #define MAX_CUSTOMDATA_LAYER_NAME 64
60
61 typedef struct CustomDataExternal {
62   /** FILE_MAX. */
63   char filename[1024];
64 } CustomDataExternal;
65
66 /** structure which stores custom element data associated with mesh elements
67  * (vertices, edges or faces). The custom data is organized into a series of
68  * layers, each with a data type (e.g. MTFace, MDeformVert, etc.). */
69 typedef struct CustomData {
70   /** CustomDataLayers, ordered by type. */
71   CustomDataLayer *layers;
72   /**
73    * runtime only! - maps types to indices of first layer of that type,
74    * MUST be >= CD_NUMTYPES, but we cant use a define here.
75    * Correct size is ensured in CustomData_update_typemap assert().
76    */
77   int typemap[42];
78   char _pad0[4];
79   /** Number of layers, size of layers array. */
80   int totlayer, maxlayer;
81   /** In editmode, total size of all data layers. */
82   int totsize;
83   /** (BMesh Only): Memory pool for allocation of blocks. */
84   struct BLI_mempool *pool;
85   /** External file storing customdata layers. */
86   CustomDataExternal *external;
87 } CustomData;
88
89 /* CustomData.type */
90 typedef enum CustomDataType {
91   /* Used by GLSL attributes in the cases when we need a delayed CD type
92    * assignment (in the cases when we don't know in advance which layer
93    * we are addressing).
94    */
95   CD_AUTO_FROM_NAME = -1,
96
97   CD_MVERT = 0,
98 #ifdef DNA_DEPRECATED
99   CD_MSTICKY = 1, /* DEPRECATED */
100 #endif
101   CD_MDEFORMVERT = 2,
102   CD_MEDGE = 3,
103   CD_MFACE = 4,
104   CD_MTFACE = 5,
105   CD_MCOL = 6,
106   CD_ORIGINDEX = 7,
107   CD_NORMAL = 8,
108   CD_FACEMAP = 9, /* exclusive face group, each face can only be part of one */
109   CD_PROP_FLT = 10,
110   CD_PROP_INT = 11,
111   CD_PROP_STR = 12,
112   CD_ORIGSPACE = 13, /* for modifier stack face location mapping */
113   CD_ORCO = 14,      /* undeformed vertex coordinates, normalized to 0..1 range */
114 #ifdef DNA_DEPRECATED
115   CD_MTEXPOLY = 15, /* deprecated */
116 #endif
117   CD_MLOOPUV = 16,
118   CD_MLOOPCOL = 17,
119   CD_TANGENT = 18,
120   CD_MDISPS = 19,
121   CD_PREVIEW_MCOL = 20, /* for displaying weightpaint colors */
122                         /*  CD_ID_MCOL          = 21, */
123   CD_TEXTURE_MLOOPCOL = 22,
124   CD_CLOTH_ORCO = 23,
125   CD_RECAST = 24,
126
127   /* BMESH ONLY START */
128   CD_MPOLY = 25,
129   CD_MLOOP = 26,
130   CD_SHAPE_KEYINDEX = 27,
131   CD_SHAPEKEY = 28,
132   CD_BWEIGHT = 29,
133   CD_CREASE = 30,
134   CD_ORIGSPACE_MLOOP = 31,
135   CD_PREVIEW_MLOOPCOL = 32,
136   CD_BM_ELEM_PYPTR = 33,
137   /* BMESH ONLY END */
138
139   CD_PAINT_MASK = 34,
140   CD_GRID_PAINT_MASK = 35,
141   CD_MVERT_SKIN = 36,
142   CD_FREESTYLE_EDGE = 37,
143   CD_FREESTYLE_FACE = 38,
144   CD_MLOOPTANGENT = 39,
145   CD_TESSLOOPNORMAL = 40,
146   CD_CUSTOMLOOPNORMAL = 41,
147
148   CD_NUMTYPES = 42,
149 } CustomDataType;
150
151 /* Bits for CustomDataMask */
152 #define CD_MASK_MVERT (1 << CD_MVERT)
153 // #define CD_MASK_MSTICKY      (1 << CD_MSTICKY)  /* DEPRECATED */
154 #define CD_MASK_MDEFORMVERT (1 << CD_MDEFORMVERT)
155 #define CD_MASK_MEDGE (1 << CD_MEDGE)
156 #define CD_MASK_MFACE (1 << CD_MFACE)
157 #define CD_MASK_MTFACE (1 << CD_MTFACE)
158 #define CD_MASK_MCOL (1 << CD_MCOL)
159 #define CD_MASK_ORIGINDEX (1 << CD_ORIGINDEX)
160 #define CD_MASK_NORMAL (1 << CD_NORMAL)
161 #define CD_MASK_FACEMAP (1 << CD_FACEMAP)
162 #define CD_MASK_PROP_FLT (1 << CD_PROP_FLT)
163 #define CD_MASK_PROP_INT (1 << CD_PROP_INT)
164 #define CD_MASK_PROP_STR (1 << CD_PROP_STR)
165 #define CD_MASK_ORIGSPACE (1 << CD_ORIGSPACE)
166 #define CD_MASK_ORCO (1 << CD_ORCO)
167 // #define CD_MASK_MTEXPOLY (1 << CD_MTEXPOLY)  /* DEPRECATED */
168 #define CD_MASK_MLOOPUV (1 << CD_MLOOPUV)
169 #define CD_MASK_MLOOPCOL (1 << CD_MLOOPCOL)
170 #define CD_MASK_TANGENT (1 << CD_TANGENT)
171 #define CD_MASK_MDISPS (1 << CD_MDISPS)
172 #define CD_MASK_PREVIEW_MCOL (1 << CD_PREVIEW_MCOL)
173 #define CD_MASK_CLOTH_ORCO (1 << CD_CLOTH_ORCO)
174 #define CD_MASK_RECAST (1 << CD_RECAST)
175
176 /* BMESH ONLY START */
177 #define CD_MASK_MPOLY (1 << CD_MPOLY)
178 #define CD_MASK_MLOOP (1 << CD_MLOOP)
179 #define CD_MASK_SHAPE_KEYINDEX (1 << CD_SHAPE_KEYINDEX)
180 #define CD_MASK_SHAPEKEY (1 << CD_SHAPEKEY)
181 #define CD_MASK_BWEIGHT (1 << CD_BWEIGHT)
182 #define CD_MASK_CREASE (1 << CD_CREASE)
183 #define CD_MASK_ORIGSPACE_MLOOP (1LL << CD_ORIGSPACE_MLOOP)
184 #define CD_MASK_PREVIEW_MLOOPCOL (1LL << CD_PREVIEW_MLOOPCOL)
185 #define CD_MASK_BM_ELEM_PYPTR (1LL << CD_BM_ELEM_PYPTR)
186 /* BMESH ONLY END */
187
188 #define CD_MASK_PAINT_MASK (1LL << CD_PAINT_MASK)
189 #define CD_MASK_GRID_PAINT_MASK (1LL << CD_GRID_PAINT_MASK)
190 #define CD_MASK_MVERT_SKIN (1LL << CD_MVERT_SKIN)
191 #define CD_MASK_FREESTYLE_EDGE (1LL << CD_FREESTYLE_EDGE)
192 #define CD_MASK_FREESTYLE_FACE (1LL << CD_FREESTYLE_FACE)
193 #define CD_MASK_MLOOPTANGENT (1LL << CD_MLOOPTANGENT)
194 #define CD_MASK_TESSLOOPNORMAL (1LL << CD_TESSLOOPNORMAL)
195 #define CD_MASK_CUSTOMLOOPNORMAL (1LL << CD_CUSTOMLOOPNORMAL)
196
197 /** Data types that may be defined for all mesh elements types. */
198 #define CD_MASK_GENERIC_DATA (CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_PROP_STR)
199
200 typedef struct CustomData_MeshMasks {
201   uint64_t vmask;
202   uint64_t emask;
203   uint64_t fmask;
204   uint64_t pmask;
205   uint64_t lmask;
206 } CustomData_MeshMasks;
207
208 /* CustomData.flag */
209 enum {
210   /* Indicates layer should not be copied by CustomData_from_template or CustomData_copy_data */
211   CD_FLAG_NOCOPY = (1 << 0),
212   /* Indicates layer should not be freed (for layers backed by external data) */
213   CD_FLAG_NOFREE = (1 << 1),
214   /* Indicates the layer is only temporary, also implies no copy */
215   CD_FLAG_TEMPORARY = ((1 << 2) | CD_FLAG_NOCOPY),
216   /* Indicates the layer is stored in an external file */
217   CD_FLAG_EXTERNAL = (1 << 3),
218   /* Indicates external data is read into memory */
219   CD_FLAG_IN_MEMORY = (1 << 4),
220 };
221
222 /* Limits */
223 #define MAX_MTFACE 8
224 #define MAX_MCOL 8
225
226 #define DYNTOPO_NODE_NONE -1
227
228 #define CD_TEMP_CHUNK_SIZE 128
229
230 #ifdef __cplusplus
231 }
232 #endif
233
234 #endif /* __DNA_CUSTOMDATA_TYPES_H__ */