Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/makesdna')
-rw-r--r--source/blender/makesdna/DNA_ID.h18
-rw-r--r--source/blender/makesdna/DNA_ID_enums.h80
-rw-r--r--source/blender/makesdna/DNA_action_types.h12
-rw-r--r--source/blender/makesdna/DNA_brush_enums.h6
-rw-r--r--source/blender/makesdna/DNA_brush_types.h4
-rw-r--r--source/blender/makesdna/DNA_curve_types.h8
-rw-r--r--source/blender/makesdna/DNA_curves_types.h49
-rw-r--r--source/blender/makesdna/DNA_customdata_types.h4
-rw-r--r--source/blender/makesdna/DNA_fluid_types.h2
-rw-r--r--source/blender/makesdna/DNA_gpencil_modifier_types.h3
-rw-r--r--source/blender/makesdna/DNA_ipo_types.h2
-rw-r--r--source/blender/makesdna/DNA_mesh_types.h20
-rw-r--r--source/blender/makesdna/DNA_modifier_types.h6
-rw-r--r--source/blender/makesdna/DNA_node_types.h5
-rw-r--r--source/blender/makesdna/DNA_object_types.h22
-rw-r--r--source/blender/makesdna/DNA_scene_types.h13
-rw-r--r--source/blender/makesdna/DNA_userdef_enums.h9
-rw-r--r--source/blender/makesdna/DNA_userdef_types.h1
-rw-r--r--source/blender/makesdna/DNA_windowmanager_types.h9
-rw-r--r--source/blender/makesdna/DNA_xr_types.h26
20 files changed, 203 insertions, 96 deletions
diff --git a/source/blender/makesdna/DNA_ID.h b/source/blender/makesdna/DNA_ID.h
index c045082d569..011f3618e15 100644
--- a/source/blender/makesdna/DNA_ID.h
+++ b/source/blender/makesdna/DNA_ID.h
@@ -330,7 +330,7 @@ enum {
/* 2 characters for ID code and 64 for actual name */
#define MAX_ID_NAME 66
-/* ID_Runtime.remapping_status */
+/* ID_Runtime_Remap.status */
enum {
/** new_id is directly linked in current .blend. */
ID_REMAP_IS_LINKED_DIRECT = 1 << 0,
@@ -879,7 +879,7 @@ typedef enum IDRecalcFlag {
#define FILTER_ID_AR (1ULL << 1)
#define FILTER_ID_BR (1ULL << 2)
#define FILTER_ID_CA (1ULL << 3)
-#define FILTER_ID_CU (1ULL << 4)
+#define FILTER_ID_CU_LEGACY (1ULL << 4)
#define FILTER_ID_GD (1ULL << 5)
#define FILTER_ID_GR (1ULL << 6)
#define FILTER_ID_IM (1ULL << 7)
@@ -912,12 +912,12 @@ typedef enum IDRecalcFlag {
#define FILTER_ID_SIM (1ULL << 35)
#define FILTER_ID_ALL \
- (FILTER_ID_AC | FILTER_ID_AR | FILTER_ID_BR | FILTER_ID_CA | FILTER_ID_CU | FILTER_ID_GD | \
- FILTER_ID_GR | FILTER_ID_IM | FILTER_ID_LA | FILTER_ID_LS | FILTER_ID_LT | FILTER_ID_MA | \
- FILTER_ID_MB | FILTER_ID_MC | FILTER_ID_ME | FILTER_ID_MSK | FILTER_ID_NT | FILTER_ID_OB | \
- FILTER_ID_PA | FILTER_ID_PAL | FILTER_ID_PC | FILTER_ID_SCE | FILTER_ID_SPK | FILTER_ID_SO | \
- FILTER_ID_TE | FILTER_ID_TXT | FILTER_ID_VF | FILTER_ID_WO | FILTER_ID_CF | FILTER_ID_WS | \
- FILTER_ID_LP | FILTER_ID_CV | FILTER_ID_PT | FILTER_ID_VO | FILTER_ID_SIM)
+ (FILTER_ID_AC | FILTER_ID_AR | FILTER_ID_BR | FILTER_ID_CA | FILTER_ID_CU_LEGACY | \
+ FILTER_ID_GD | FILTER_ID_GR | FILTER_ID_IM | FILTER_ID_LA | FILTER_ID_LS | FILTER_ID_LT | \
+ FILTER_ID_MA | FILTER_ID_MB | FILTER_ID_MC | FILTER_ID_ME | FILTER_ID_MSK | FILTER_ID_NT | \
+ FILTER_ID_OB | FILTER_ID_PA | FILTER_ID_PAL | FILTER_ID_PC | FILTER_ID_SCE | FILTER_ID_SPK | \
+ FILTER_ID_SO | FILTER_ID_TE | FILTER_ID_TXT | FILTER_ID_VF | FILTER_ID_WO | FILTER_ID_CF | \
+ FILTER_ID_WS | FILTER_ID_LP | FILTER_ID_CV | FILTER_ID_PT | FILTER_ID_VO | FILTER_ID_SIM)
/**
* This enum defines the index assigned to each type of IDs in the array returned by
@@ -998,7 +998,7 @@ enum {
/* Object data types. */
INDEX_ID_AR,
INDEX_ID_ME,
- INDEX_ID_CU,
+ INDEX_ID_CU_LEGACY,
INDEX_ID_MB,
INDEX_ID_CV,
INDEX_ID_PT,
diff --git a/source/blender/makesdna/DNA_ID_enums.h b/source/blender/makesdna/DNA_ID_enums.h
index a6f950517eb..b0ca13615b8 100644
--- a/source/blender/makesdna/DNA_ID_enums.h
+++ b/source/blender/makesdna/DNA_ID_enums.h
@@ -40,46 +40,46 @@ enum eIconSizes {
* and the first 2 bytes of #ID.name (for runtime checks, see #GS macro).
*/
typedef enum ID_Type {
- ID_SCE = MAKE_ID2('S', 'C'), /* Scene */
- ID_LI = MAKE_ID2('L', 'I'), /* Library */
- ID_OB = MAKE_ID2('O', 'B'), /* Object */
- ID_ME = MAKE_ID2('M', 'E'), /* Mesh */
- ID_CU = MAKE_ID2('C', 'U'), /* Curve */
- ID_MB = MAKE_ID2('M', 'B'), /* MetaBall */
- ID_MA = MAKE_ID2('M', 'A'), /* Material */
- ID_TE = MAKE_ID2('T', 'E'), /* Tex (Texture) */
- ID_IM = MAKE_ID2('I', 'M'), /* Image */
- ID_LT = MAKE_ID2('L', 'T'), /* Lattice */
- ID_LA = MAKE_ID2('L', 'A'), /* Light */
- ID_CA = MAKE_ID2('C', 'A'), /* Camera */
- ID_IP = MAKE_ID2('I', 'P'), /* Ipo (depreciated, replaced by FCurves) */
- ID_KE = MAKE_ID2('K', 'E'), /* Key (shape key) */
- ID_WO = MAKE_ID2('W', 'O'), /* World */
- ID_SCR = MAKE_ID2('S', 'R'), /* Screen */
- ID_VF = MAKE_ID2('V', 'F'), /* VFont (Vector Font) */
- ID_TXT = MAKE_ID2('T', 'X'), /* Text */
- ID_SPK = MAKE_ID2('S', 'K'), /* Speaker */
- ID_SO = MAKE_ID2('S', 'O'), /* Sound */
- ID_GR = MAKE_ID2('G', 'R'), /* Collection */
- ID_AR = MAKE_ID2('A', 'R'), /* bArmature */
- ID_AC = MAKE_ID2('A', 'C'), /* bAction */
- ID_NT = MAKE_ID2('N', 'T'), /* bNodeTree */
- ID_BR = MAKE_ID2('B', 'R'), /* Brush */
- ID_PA = MAKE_ID2('P', 'A'), /* ParticleSettings */
- ID_GD = MAKE_ID2('G', 'D'), /* bGPdata, (Grease Pencil) */
- ID_WM = MAKE_ID2('W', 'M'), /* WindowManager */
- ID_MC = MAKE_ID2('M', 'C'), /* MovieClip */
- ID_MSK = MAKE_ID2('M', 'S'), /* Mask */
- ID_LS = MAKE_ID2('L', 'S'), /* FreestyleLineStyle */
- ID_PAL = MAKE_ID2('P', 'L'), /* Palette */
- ID_PC = MAKE_ID2('P', 'C'), /* PaintCurve */
- ID_CF = MAKE_ID2('C', 'F'), /* CacheFile */
- ID_WS = MAKE_ID2('W', 'S'), /* WorkSpace */
- ID_LP = MAKE_ID2('L', 'P'), /* LightProbe */
- ID_CV = MAKE_ID2('C', 'V'), /* Curves */
- ID_PT = MAKE_ID2('P', 'T'), /* PointCloud */
- ID_VO = MAKE_ID2('V', 'O'), /* Volume */
- ID_SIM = MAKE_ID2('S', 'I'), /* Simulation (geometry node groups) */
+ ID_SCE = MAKE_ID2('S', 'C'), /* Scene */
+ ID_LI = MAKE_ID2('L', 'I'), /* Library */
+ ID_OB = MAKE_ID2('O', 'B'), /* Object */
+ ID_ME = MAKE_ID2('M', 'E'), /* Mesh */
+ ID_CU_LEGACY = MAKE_ID2('C', 'U'), /* Curve. ID_CV should be used in the future (see T95355). */
+ ID_MB = MAKE_ID2('M', 'B'), /* MetaBall */
+ ID_MA = MAKE_ID2('M', 'A'), /* Material */
+ ID_TE = MAKE_ID2('T', 'E'), /* Tex (Texture) */
+ ID_IM = MAKE_ID2('I', 'M'), /* Image */
+ ID_LT = MAKE_ID2('L', 'T'), /* Lattice */
+ ID_LA = MAKE_ID2('L', 'A'), /* Light */
+ ID_CA = MAKE_ID2('C', 'A'), /* Camera */
+ ID_IP = MAKE_ID2('I', 'P'), /* Ipo (depreciated, replaced by FCurves) */
+ ID_KE = MAKE_ID2('K', 'E'), /* Key (shape key) */
+ ID_WO = MAKE_ID2('W', 'O'), /* World */
+ ID_SCR = MAKE_ID2('S', 'R'), /* Screen */
+ ID_VF = MAKE_ID2('V', 'F'), /* VFont (Vector Font) */
+ ID_TXT = MAKE_ID2('T', 'X'), /* Text */
+ ID_SPK = MAKE_ID2('S', 'K'), /* Speaker */
+ ID_SO = MAKE_ID2('S', 'O'), /* Sound */
+ ID_GR = MAKE_ID2('G', 'R'), /* Collection */
+ ID_AR = MAKE_ID2('A', 'R'), /* bArmature */
+ ID_AC = MAKE_ID2('A', 'C'), /* bAction */
+ ID_NT = MAKE_ID2('N', 'T'), /* bNodeTree */
+ ID_BR = MAKE_ID2('B', 'R'), /* Brush */
+ ID_PA = MAKE_ID2('P', 'A'), /* ParticleSettings */
+ ID_GD = MAKE_ID2('G', 'D'), /* bGPdata, (Grease Pencil) */
+ ID_WM = MAKE_ID2('W', 'M'), /* WindowManager */
+ ID_MC = MAKE_ID2('M', 'C'), /* MovieClip */
+ ID_MSK = MAKE_ID2('M', 'S'), /* Mask */
+ ID_LS = MAKE_ID2('L', 'S'), /* FreestyleLineStyle */
+ ID_PAL = MAKE_ID2('P', 'L'), /* Palette */
+ ID_PC = MAKE_ID2('P', 'C'), /* PaintCurve */
+ ID_CF = MAKE_ID2('C', 'F'), /* CacheFile */
+ ID_WS = MAKE_ID2('W', 'S'), /* WorkSpace */
+ ID_LP = MAKE_ID2('L', 'P'), /* LightProbe */
+ ID_CV = MAKE_ID2('C', 'V'), /* Curves */
+ ID_PT = MAKE_ID2('P', 'T'), /* PointCloud */
+ ID_VO = MAKE_ID2('V', 'O'), /* Volume */
+ ID_SIM = MAKE_ID2('S', 'I'), /* Simulation (geometry node groups) */
} ID_Type;
/* Only used as 'placeholder' in .blend files for directly linked data-blocks. */
diff --git a/source/blender/makesdna/DNA_action_types.h b/source/blender/makesdna/DNA_action_types.h
index 2a6b86711ab..fa0898e6ea5 100644
--- a/source/blender/makesdna/DNA_action_types.h
+++ b/source/blender/makesdna/DNA_action_types.h
@@ -104,12 +104,14 @@ typedef struct bAnimVizSettings {
short path_type;
/** Number of frames between points indicated on the paths. */
short path_step;
+ /** #eMotionPath_Ranges. */
+ short path_range;
/** #eMotionPaths_ViewFlag. */
short path_viewflag;
/** #eMotionPaths_BakeFlag. */
short path_bakeflag;
- char _pad[6];
+ char _pad[4];
/** Start and end frames of path-calculation range. */
int path_sf, path_ef;
@@ -131,6 +133,14 @@ typedef enum eMotionPaths_Types {
MOTIONPATH_TYPE_ACFRA = 1,
} eMotionPath_Types;
+/* bAnimVizSettings->path_range */
+typedef enum eMotionPath_Ranges {
+ /* Default is scene */
+ MOTIONPATH_RANGE_SCENE = 0,
+ MOTIONPATH_RANGE_KEYS_SELECTED = 1,
+ MOTIONPATH_RANGE_KEYS_ALL = 2,
+} eMotionPath_Ranges;
+
/* bAnimVizSettings->path_viewflag */
typedef enum eMotionPaths_ViewFlag {
/* show frames on path */
diff --git a/source/blender/makesdna/DNA_brush_enums.h b/source/blender/makesdna/DNA_brush_enums.h
index 0667e508a82..bca177f6d7a 100644
--- a/source/blender/makesdna/DNA_brush_enums.h
+++ b/source/blender/makesdna/DNA_brush_enums.h
@@ -455,6 +455,12 @@ typedef enum eBrushUVSculptTool {
UV_SCULPT_TOOL_PINCH = 2,
} eBrushUVSculptTool;
+/* Brush.curves_sculpt_tool. */
+typedef enum eBrushCurvesSculptTool {
+ CURVES_SCULPT_TOOL_TEST1 = 0,
+ CURVES_SCULPT_TOOL_TEST2 = 1,
+} eBrushCurvesSculptTool;
+
/** When #BRUSH_ACCUMULATE is used */
#define SCULPT_TOOL_HAS_ACCUMULATE(t) \
ELEM(t, \
diff --git a/source/blender/makesdna/DNA_brush_types.h b/source/blender/makesdna/DNA_brush_types.h
index 77c49393029..fe80220b1dd 100644
--- a/source/blender/makesdna/DNA_brush_types.h
+++ b/source/blender/makesdna/DNA_brush_types.h
@@ -256,7 +256,9 @@ typedef struct Brush {
char gpencil_sculpt_tool;
/** Active grease pencil weight tool. */
char gpencil_weight_tool;
- char _pad1[6];
+ /** Active curves sculpt tool. */
+ char curves_sculpt_tool;
+ char _pad1[5];
float autosmooth_factor;
diff --git a/source/blender/makesdna/DNA_curve_types.h b/source/blender/makesdna/DNA_curve_types.h
index 14a06f197bf..66206bcfddd 100644
--- a/source/blender/makesdna/DNA_curve_types.h
+++ b/source/blender/makesdna/DNA_curve_types.h
@@ -306,14 +306,6 @@ enum {
CU_AUTOSPACE_EVALUATED = 2,
};
-#if 0 /* Moved to overlay options in 2.8 */
-/* Curve.drawflag */
-enum {
- CU_HIDE_HANDLES = 1 << 0,
- CU_HIDE_NORMALS = 1 << 1,
-};
-#endif
-
/* Curve.flag */
enum {
CU_3D = 1 << 0,
diff --git a/source/blender/makesdna/DNA_curves_types.h b/source/blender/makesdna/DNA_curves_types.h
index 03a587c896b..98d2aa4b295 100644
--- a/source/blender/makesdna/DNA_curves_types.h
+++ b/source/blender/makesdna/DNA_curves_types.h
@@ -13,6 +13,33 @@
extern "C" {
#endif
+#ifdef __cplusplus
+namespace blender::bke {
+class CurvesGeometryRuntime;
+} // namespace blender::bke
+using CurvesGeometryRuntimeHandle = blender::bke::CurvesGeometryRuntime;
+#else
+typedef struct CurvesGeometryRuntimeHandle CurvesGeometryRuntimeHandle;
+#endif
+
+typedef enum CurveType {
+ CURVE_TYPE_CATMULL_ROM = 0,
+ CURVE_TYPE_POLY = 1,
+ CURVE_TYPE_BEZIER = 2,
+ CURVE_TYPE_NURBS = 3,
+} CurveType;
+
+typedef enum HandleType {
+ /** The handle can be moved anywhere, and doesn't influence the point's other handle. */
+ BEZIER_HANDLE_FREE = 0,
+ /** The location is automatically calculated to be smooth. */
+ BEZIER_HANDLE_AUTO = 1,
+ /** The location is calculated to point to the next/previous control point. */
+ BEZIER_HANDLE_VECTOR = 2,
+ /** The location is constrained to point in the opposite direction as the other handle. */
+ BEZIER_HANDLE_ALIGN = 3,
+} HandleType;
+
/**
* A reusable data structure for geometry consisting of many curves. All control point data is
* stored contiguously for better efficiency. Data for each curve is stored as a slice of the
@@ -34,13 +61,19 @@ typedef struct CurvesGeometry {
float *radius;
/**
+ * The type of each curve. #CurveType.
+ * \note This data is owned by #curve_data.
+ */
+ int8_t *curve_type;
+
+ /**
* The start index of each curve in the point data. The size of each curve can be calculated by
* subtracting the offset from the next offset. That is valid even for the last curve because
* this array is allocated with a length one larger than the number of splines.
*
* \note This is *not* stored in #CustomData because its size is one larger than #curve_data.
*/
- int *offsets;
+ int *curve_offsets;
/**
* All attributes stored on control points (#ATTR_DOMAIN_POINT).
@@ -60,6 +93,11 @@ typedef struct CurvesGeometry {
* The number of curves in the data-block.
*/
int curve_size;
+
+ /**
+ * Runtime data for curves, stored as a pointer to allow defining this as a C++ class.
+ */
+ CurvesGeometryRuntimeHandle *runtime;
} CurvesGeometry;
typedef struct Curves {
@@ -77,6 +115,15 @@ typedef struct Curves {
short totcol;
short _pad2[3];
+ /**
+ * Used as base mesh when curves represent e.g. hair or fur. This surface is used in edit modes.
+ * When set, the curves will have attributes that indicate a position on this surface. This is
+ * used for deforming the curves when the surface is deformed dynamically.
+ *
+ * This is expected to be a mesh object.
+ */
+ struct Object *surface;
+
/* Draw Cache. */
void *batch_cache;
} Curves;
diff --git a/source/blender/makesdna/DNA_customdata_types.h b/source/blender/makesdna/DNA_customdata_types.h
index 23406033126..2f9f63cb966 100644
--- a/source/blender/makesdna/DNA_customdata_types.h
+++ b/source/blender/makesdna/DNA_customdata_types.h
@@ -98,6 +98,10 @@ typedef enum CustomDataType {
CD_MTFACE = 5,
CD_MCOL = 6,
CD_ORIGINDEX = 7,
+ /**
+ * Used for derived face corner normals on mesh `ldata`, since currently they are not computed
+ * lazily. Derived vertex and polygon normals are stored in #Mesh_Runtime.
+ */
CD_NORMAL = 8,
CD_FACEMAP = 9, /* exclusive face group, each face can only be part of one */
CD_PROP_FLOAT = 10,
diff --git a/source/blender/makesdna/DNA_fluid_types.h b/source/blender/makesdna/DNA_fluid_types.h
index 953a15f7502..11780d99af8 100644
--- a/source/blender/makesdna/DNA_fluid_types.h
+++ b/source/blender/makesdna/DNA_fluid_types.h
@@ -611,7 +611,7 @@ typedef struct FluidDomainSettings {
/* Fluid guiding options. */
float guide_alpha; /* Guiding weight scalar (determines strength). */
- int guide_beta; /* Guiding blur radius (affects size of vortices vortices). */
+ int guide_beta; /* Guiding blur radius (affects size of vortices). */
float guide_vel_factor; /* Multiply guiding velocity by this factor. */
int guide_res[3]; /* Res for velocity guide grids - independent from base res. */
short guide_source;
diff --git a/source/blender/makesdna/DNA_gpencil_modifier_types.h b/source/blender/makesdna/DNA_gpencil_modifier_types.h
index 64099de5a5e..e30dd4e1c8f 100644
--- a/source/blender/makesdna/DNA_gpencil_modifier_types.h
+++ b/source/blender/makesdna/DNA_gpencil_modifier_types.h
@@ -649,9 +649,10 @@ typedef struct SimplifyGpencilModifierData {
int layer_pass;
/** Sample length */
float length;
+ /** Sample sharp threshold */
+ float sharp_threshold;
/** Merge distance */
float distance;
- char _pad[4];
} SimplifyGpencilModifierData;
typedef enum eSimplifyGpencil_Flag {
diff --git a/source/blender/makesdna/DNA_ipo_types.h b/source/blender/makesdna/DNA_ipo_types.h
index f40fb55e72e..70ee7c99d01 100644
--- a/source/blender/makesdna/DNA_ipo_types.h
+++ b/source/blender/makesdna/DNA_ipo_types.h
@@ -272,7 +272,7 @@ typedef struct Ipo {
#define SEQ_FAC_SPEED 2
#define SEQ_FAC_OPACITY 3
-/* ********* Curve (ID_CU) *********** */
+/* ********* Curve (ID_CU_LEGACY) *********** */
#define CU_TOTIPO 1
#define CU_TOTNAM 1
diff --git a/source/blender/makesdna/DNA_mesh_types.h b/source/blender/makesdna/DNA_mesh_types.h
index c566ad93335..d8a853681fd 100644
--- a/source/blender/makesdna/DNA_mesh_types.h
+++ b/source/blender/makesdna/DNA_mesh_types.h
@@ -116,27 +116,25 @@ typedef struct Mesh_Runtime {
*/
char wrapper_type_finalize;
+ int subsurf_resolution;
/**
* Settings for lazily evaluating the subdivision on the CPU if needed. These are
* set in the modifier when GPU subdivision can be performed.
*/
char subsurf_apply_render;
char subsurf_use_optimal_display;
- char _pad[2];
- int subsurf_resolution;
-
- void *_pad2;
/**
- * Used to mark when derived data needs to be recalculated for a certain layer.
- * Currently only normals.
+ * Caches for lazily computed vertex and polygon normals. These are stored here rather than in
+ * #CustomData because they can be calculated on a const mesh, and adding custom data layers on a
+ * const mesh is not thread-safe.
*/
+ char vert_normals_dirty;
+ char poly_normals_dirty;
+ float (*vert_normals)[3];
+ float (*poly_normals)[3];
- int64_t cd_dirty_vert;
- int64_t cd_dirty_edge;
- int64_t cd_dirty_loop;
- int64_t cd_dirty_poly;
-
+ void *_pad2;
} Mesh_Runtime;
typedef struct Mesh {
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index db5a3d69e4d..807a615f7f9 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -1604,6 +1604,10 @@ enum {
MOD_WVG_MIX_DIF = 6,
/** Average of both weights. */
MOD_WVG_MIX_AVG = 7,
+ /** Minimum of both weights. */
+ MOD_WVG_MIX_MIN = 8,
+ /** Maximum of both weights. */
+ MOD_WVG_MIX_MAX = 9,
};
/** #WeightVGMixModifierData.mix_set (what vertices to affect). */
@@ -1694,7 +1698,7 @@ enum {
MOD_WVG_PROXIMITY_GEOM_FACES = (1 << 2),
MOD_WVG_PROXIMITY_INVERT_VGROUP_MASK = (1 << 3),
MOD_WVG_PROXIMITY_INVERT_FALLOFF = (1 << 4),
- MOD_WVG_PROXIMITY_WEIGHTS_NORMALIZE = (1 << 3),
+ MOD_WVG_PROXIMITY_WEIGHTS_NORMALIZE = (1 << 5),
};
/* Defines common to all WeightVG modifiers. */
diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index 963a34aa645..18b79a6fc25 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -1610,6 +1610,11 @@ typedef struct NodeGeometryDeleteGeometry {
int8_t mode;
} NodeGeometryDeleteGeometry;
+typedef struct NodeGeometryDuplicateElements {
+ /* AttributeDomain. */
+ int8_t domain;
+} NodeGeometryDuplicateElements;
+
typedef struct NodeGeometrySeparateGeometry {
/* AttributeDomain. */
int8_t domain;
diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h
index 96c60fcac97..9e0bf7dcc5a 100644
--- a/source/blender/makesdna/DNA_object_types.h
+++ b/source/blender/makesdna/DNA_object_types.h
@@ -471,7 +471,8 @@ typedef struct ObHook {
enum {
OB_EMPTY = 0,
OB_MESH = 1,
- OB_CURVE = 2,
+ /** Curve object is still used but replaced by "Curves" for the future (see T95355). */
+ OB_CURVES_LEGACY = 2,
OB_SURF = 3,
OB_FONT = 4,
OB_MBALL = 5,
@@ -515,17 +516,26 @@ enum {
OB_VOLUME))
#define OB_TYPE_SUPPORT_VGROUP(_type) (ELEM(_type, OB_MESH, OB_LATTICE, OB_GPENCIL))
#define OB_TYPE_SUPPORT_EDITMODE(_type) \
- (ELEM(_type, OB_MESH, OB_FONT, OB_CURVE, OB_SURF, OB_MBALL, OB_LATTICE, OB_ARMATURE))
-#define OB_TYPE_SUPPORT_PARVERT(_type) (ELEM(_type, OB_MESH, OB_SURF, OB_CURVE, OB_LATTICE))
+ (ELEM(_type, \
+ OB_MESH, \
+ OB_FONT, \
+ OB_CURVES_LEGACY, \
+ OB_SURF, \
+ OB_MBALL, \
+ OB_LATTICE, \
+ OB_ARMATURE, \
+ OB_CURVES))
+#define OB_TYPE_SUPPORT_PARVERT(_type) \
+ (ELEM(_type, OB_MESH, OB_SURF, OB_CURVES_LEGACY, OB_LATTICE))
/** Matches #OB_TYPE_SUPPORT_EDITMODE. */
-#define OB_DATA_SUPPORT_EDITMODE(_type) (ELEM(_type, ID_ME, ID_CU, ID_MB, ID_LT, ID_AR))
+#define OB_DATA_SUPPORT_EDITMODE(_type) (ELEM(_type, ID_ME, ID_CU_LEGACY, ID_MB, ID_LT, ID_AR))
/* is this ID type used as object data */
#define OB_DATA_SUPPORT_ID(_id_type) \
(ELEM(_id_type, \
ID_ME, \
- ID_CU, \
+ ID_CU_LEGACY, \
ID_MB, \
ID_LA, \
ID_SPK, \
@@ -540,7 +550,7 @@ enum {
#define OB_DATA_SUPPORT_ID_CASE \
ID_ME: \
- case ID_CU: \
+ case ID_CU_LEGACY: \
case ID_MB: \
case ID_LA: \
case ID_SPK: \
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index 0d42abdb363..daecb3d7a31 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -141,7 +141,6 @@ typedef struct FFMpegCodecData {
int audio_bitrate;
int audio_mixrate;
int audio_channels;
- char _pad0[4];
float audio_volume;
int gop_size;
/** Only used if FFMPEG_USE_MAX_B_FRAMES flag is set. */
@@ -156,9 +155,7 @@ typedef struct FFMpegCodecData {
int rc_buffer_size;
int mux_packet_size;
int mux_rate;
- char _pad1[4];
-
- IDProperty *properties;
+ void *_pad1;
} FFMpegCodecData;
/* ************************************************************* */
@@ -995,6 +992,10 @@ typedef struct Sculpt {
struct Object *gravity_object;
} Sculpt;
+typedef struct CurvesSculpt {
+ Paint paint;
+} CurvesSculpt;
+
typedef struct UvSculpt {
Paint paint;
} UvSculpt;
@@ -1380,6 +1381,8 @@ typedef struct ToolSettings {
GpSculptPaint *gp_sculptpaint;
/** Gpencil weight paint. */
GpWeightPaint *gp_weightpaint;
+ /** Curves sculpt. */
+ CurvesSculpt *curves_sculpt;
/* Vertex group weight - used only for editmode, not weight
* paint */
@@ -1988,7 +1991,7 @@ extern const char *RE_engine_id_CYCLES;
((v3d == NULL) || (((1 << (base)->object->type) & (v3d)->object_type_exclude_select) == 0)) && \
(((base)->flag & BASE_SELECTABLE) != 0))
#define BASE_SELECTED(v3d, base) (BASE_VISIBLE(v3d, base) && (((base)->flag & BASE_SELECTED) != 0))
-#define BASE_EDITABLE(v3d, base) (BASE_VISIBLE(v3d, base) && ((base)->object->id.lib == NULL))
+#define BASE_EDITABLE(v3d, base) (BASE_VISIBLE(v3d, base) && !ID_IS_LINKED((base)->object))
#define BASE_SELECTED_EDITABLE(v3d, base) \
(BASE_EDITABLE(v3d, base) && (((base)->flag & BASE_SELECTED) != 0))
diff --git a/source/blender/makesdna/DNA_userdef_enums.h b/source/blender/makesdna/DNA_userdef_enums.h
index bb061e73c9c..e90aa0e0f07 100644
--- a/source/blender/makesdna/DNA_userdef_enums.h
+++ b/source/blender/makesdna/DNA_userdef_enums.h
@@ -10,7 +10,14 @@
extern "C" {
#endif
-/** #UserDef.dupflag */
+/**
+ * #UserDef.dupflag
+ *
+ * The flag tells #BKE_object_duplicate() whether to copy data linked to the object,
+ * or to reference the existing data.
+ * #U.dupflag should be used for default operations or you can construct a flag as Python does.
+ * If #eDupli_ID_Flags is 0 then no data will be copied (linked duplicate).
+ */
typedef enum eDupli_ID_Flags {
USER_DUP_MESH = (1 << 0),
USER_DUP_CURVE = (1 << 1),
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h
index e081be73a1c..80a107e4bae 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -1318,6 +1318,7 @@ typedef enum eNdof_Flag {
NDOF_PANY_INVERT_AXIS = (1 << 13),
NDOF_PANZ_INVERT_AXIS = (1 << 14),
NDOF_TURNTABLE = (1 << 15),
+ NDOF_CAMERA_PAN_ZOOM = (1 << 16),
} eNdof_Flag;
#define NDOF_PIXELS_PER_SECOND 600.0f
diff --git a/source/blender/makesdna/DNA_windowmanager_types.h b/source/blender/makesdna/DNA_windowmanager_types.h
index 626c2b2a81f..dabef04583b 100644
--- a/source/blender/makesdna/DNA_windowmanager_types.h
+++ b/source/blender/makesdna/DNA_windowmanager_types.h
@@ -295,9 +295,6 @@ typedef struct wmWindow {
/** Storage for event system. */
struct wmEvent *eventstate;
- /** Internal for wm_operators.c. */
- struct wmGesture *tweak;
-
/* Input Method Editor data - complex character input (especially for Asian character input)
* Currently WIN32 and APPLE, runtime-only data. */
struct wmIMEData *ime_data;
@@ -364,7 +361,9 @@ typedef struct wmKeyMapItem {
/** Event code itself. */
short type;
/** KM_ANY, KM_PRESS, KM_NOTHING etc. */
- short val;
+ int8_t val;
+ /** Use when `val == WM_CLICK_DRAG`, */
+ int8_t direction;
/** `oskey` also known as apple, windows-key or super, value denotes order of pressed. */
short shift, ctrl, alt, oskey;
/** Raw-key modifier. */
@@ -422,7 +421,7 @@ enum {
enum {
KMI_TYPE_KEYBOARD = 0,
KMI_TYPE_MOUSE = 1,
- KMI_TYPE_TWEAK = 2,
+ /* 2 is deprecated, was tweak. */
KMI_TYPE_TEXTINPUT = 3,
KMI_TYPE_TIMER = 4,
KMI_TYPE_NDOF = 5,
diff --git a/source/blender/makesdna/DNA_xr_types.h b/source/blender/makesdna/DNA_xr_types.h
index bf77339a494..09eab0d7bf7 100644
--- a/source/blender/makesdna/DNA_xr_types.h
+++ b/source/blender/makesdna/DNA_xr_types.h
@@ -106,8 +106,23 @@ typedef enum eXrPoseFlag {
XR_POSE_AIM = (1 << 1),
} eXrPoseFlag;
+/**
+ * The following user and component path lengths are dependent on OpenXR's XR_MAX_PATH_LENGTH
+ * (256). A user path will be combined with a component path to identify an action binding, and
+ * that combined path should also have a max of XR_MAX_PATH_LENGTH (e.g. user_path =
+ * /user/hand/left, component_path = /input/trigger/value, full_path =
+ * /user/hand/left/input/trigger/value).
+ */
+#define XR_MAX_USER_PATH_LENGTH 64
+#define XR_MAX_COMPONENT_PATH_LENGTH 192
+
/* -------------------------------------------------------------------- */
+typedef struct XrComponentPath {
+ struct XrComponentPath *next, *prev;
+ char path[192]; /* XR_MAX_COMPONENT_PATH_LENGTH */
+} XrComponentPath;
+
typedef struct XrActionMapBinding {
struct XrActionMapBinding *next, *prev;
@@ -117,8 +132,7 @@ typedef struct XrActionMapBinding {
/** OpenXR interaction profile path. */
char profile[256];
/** OpenXR component paths. */
- char component_path0[192];
- char component_path1[192];
+ ListBase component_paths; /* XrComponentPath */
/** Input threshold/region. */
float float_threshold;
@@ -132,6 +146,11 @@ typedef struct XrActionMapBinding {
/* -------------------------------------------------------------------- */
+typedef struct XrUserPath {
+ struct XrUserPath *next, *prev;
+ char path[64]; /* XR_MAX_USER_PATH_LENGTH */
+} XrUserPath;
+
typedef struct XrActionMapItem {
struct XrActionMapItem *next, *prev;
@@ -142,8 +161,7 @@ typedef struct XrActionMapItem {
char _pad[7];
/** OpenXR user paths. */
- char user_path0[64];
- char user_path1[64];
+ ListBase user_paths; /* XrUserPath */
/** Operator to be called on XR events. */
char op[64]; /* OP_MAX_TYPENAME */