Merge branch 'master' into blende2.8
[blender.git] / source / blender / makesdna / DNA_scene_types.h
index eba666f88291b4ee4e7b0ab841b692cc0a57132d..e800cc14afc3325897737d30b815fa21d65366d8 100644 (file)
@@ -47,7 +47,11 @@ extern "C" {
 #include "DNA_ID.h"
 #include "DNA_freestyle_types.h"
 #include "DNA_gpu_types.h"
+#include "DNA_collection_types.h"
+#include "DNA_layer_types.h"
+#include "DNA_material_types.h"
 #include "DNA_userdef_types.h"
+#include "DNA_view3d_types.h"
 
 struct CurveMapping;
 struct Object;
@@ -55,29 +59,20 @@ struct Brush;
 struct World;
 struct Scene;
 struct Image;
-struct Group;
+struct Collection;
 struct Text;
 struct bNodeTree;
 struct AnimData;
 struct Editing;
 struct SceneStats;
 struct bGPdata;
-struct bGPDbrush;
 struct MovieClip;
 struct ColorSpace;
+struct SceneCollection;
 
 /* ************************************************************* */
 /* Scene Data */
 
-/* Base - Wrapper for referencing Objects in a Scene */
-typedef struct Base {
-       struct Base *next, *prev;
-       unsigned int lay, selcol;
-       int flag;
-       short sx, sy;
-       struct Object *object;
-} Base;
-
 /* ************************************************************* */
 /* Output Format Data */
 
@@ -197,27 +192,25 @@ typedef struct AudioData {
 typedef struct SceneRenderLayer {
        struct SceneRenderLayer *next, *prev;
 
-       char name[64];  /* MAX_NAME */
+       char name[64] DNA_DEPRECATED;   /* MAX_NAME */
 
-       struct Material *mat_override;
-       struct Group *light_override;
+       struct Material *mat_override DNA_DEPRECATED; /* Converted to ViewLayer override. */
 
-       unsigned int lay;                 /* Scene.lay itself has priority over this */
-       unsigned int lay_zmask;   /* has to be after lay, this is for Z-masking */
-       unsigned int lay_exclude; /* not used by internal, exclude */
-       int layflag;
+       unsigned int lay DNA_DEPRECATED; /* Converted to LayerCollection cycles camera visibility override. */
+       unsigned int lay_zmask DNA_DEPRECATED; /* Converted to LayerCollection cycles holdout override. */
+       unsigned int lay_exclude DNA_DEPRECATED;
+       int layflag DNA_DEPRECATED; /* Converted to ViewLayer layflag and flag. */
 
        /* pass_xor has to be after passflag */
-       /* note, this is treestore element 'nr' in outliner, short still... */
-       int passflag;
-       int pass_xor;
+       int passflag DNA_DEPRECATED; /* pass_xor has to be after passflag */
+       int pass_xor DNA_DEPRECATED; /* Converted to ViewLayer passflag and flag. */
 
-       int samples;
-       float pass_alpha_threshold;
+       int samples DNA_DEPRECATED; /* Converted to ViewLayer override. */
+       float pass_alpha_threshold DNA_DEPRECATED; /* Converted to ViewLayer pass_alpha_threshold. */
 
-       IDProperty *prop;
+       IDProperty *prop DNA_DEPRECATED; /* Converted to ViewLayer id_properties. */
 
-       struct FreestyleConfig freestyleConfig;
+       struct FreestyleConfig freestyleConfig DNA_DEPRECATED; /* Converted to ViewLayer freestyleConfig. */
 } SceneRenderLayer;
 
 /* SceneRenderLayer.layflag */
@@ -270,7 +263,7 @@ typedef enum eScenePassType {
        SCE_PASS_SUBSURFACE_DIRECT        = (1 << 28),
        SCE_PASS_SUBSURFACE_INDIRECT      = (1 << 29),
        SCE_PASS_SUBSURFACE_COLOR         = (1 << 30),
-       SCE_PASS_ROUGHNESS                = (1 << 31),
+       SCE_PASS_ROUGHNESS                = (1u << 31u),
 } eScenePassType;
 
 #define RE_PASSNAME_COMBINED "Combined"
@@ -447,7 +440,7 @@ typedef struct ImageFormatData {
 #define R_IMF_IMTYPE_TIFF           22
 #define R_IMF_IMTYPE_OPENEXR        23
 #define R_IMF_IMTYPE_FFMPEG         24
-#define R_IMF_IMTYPE_FRAMESERVER    25
+/* #define R_IMF_IMTYPE_FRAMESERVER    25 */ /* frame server is nomore */
 #define R_IMF_IMTYPE_CINEON         26
 #define R_IMF_IMTYPE_DPX            27
 #define R_IMF_IMTYPE_MULTILAYER     28
@@ -528,7 +521,7 @@ typedef struct BakeData {
        char save_mode;
        char pad[3];
 
-       char cage[64];  /* MAX_NAME */
+       struct Object *cage_object;
 } BakeData;
 
 /* BakeData.normal_swizzle (char) */
@@ -563,6 +556,12 @@ typedef enum eBakePassFilter {
 
 #define R_BAKE_PASS_FILTER_ALL (~0)
 
+/* RenderEngineSettingsClay.options */
+typedef enum ClayFlagSettings {
+       CLAY_USE_AO     = (1 << 0),
+       CLAY_USE_HSV    = (1 << 1),
+} ClayFlagSettings;
+
 /* *************************************************************** */
 /* Render Data */
 
@@ -581,29 +580,14 @@ typedef struct RenderData {
 
        float framelen, blurfac;
 
-       /** For UR edge rendering: give the edges this color */
-       float edgeR, edgeG, edgeB;
-
-
-       /* standalone player */  //  XXX deprecated since 2.5
-       short fullscreen  DNA_DEPRECATED, xplay  DNA_DEPRECATED, yplay  DNA_DEPRECATED;
-       short freqplay  DNA_DEPRECATED;
-       /* standalone player */  //  XXX deprecated since 2.5
-       short depth  DNA_DEPRECATED, attrib  DNA_DEPRECATED;
-
-
        int frame_step;         /* frames to jump during render/playback */
 
        short stereomode  DNA_DEPRECATED;       /* standalone player stereo settings */  //  XXX deprecated since 2.5
 
        short dimensionspreset;         /* for the dimensions presets menu */
 
-       short filtertype;       /* filter is box, tent, gauss, mitch, etc */
-
        short size; /* size in % */
 
-       short maximsize DNA_DEPRECATED; /* max in Kb */
-
        short pad6;
 
        /* from buttons: */
@@ -616,15 +600,6 @@ typedef struct RenderData {
         */
        int ysch;
 
-       /**
-        * The number of part to use in the x direction
-        */
-       short xparts DNA_DEPRECATED;
-       /**
-        * The number of part to use in the y direction
-        */
-       short yparts DNA_DEPRECATED;
-
        /**
         * render tile dimensions
         */
@@ -649,22 +624,6 @@ typedef struct RenderData {
         */
        int mode;
 
-       /**
-        * Flags for raytrace settings. Use bit-masking to access the settings.
-        */
-       int raytrace_options;
-
-       /**
-        * Raytrace acceleration structure
-        */
-       short raytrace_structure;
-
-       short pad1;
-
-       /* octree resolution */
-       short ocres;
-       short pad4;
-
        /**
         * What to do with the sky/background. Picks sky/premul/key
         * blending for the background
@@ -676,7 +635,7 @@ typedef struct RenderData {
         */
        short osa;
 
-       short frs_sec, edgeint;
+       short frs_sec, pad[7];
 
 
        /* safety, border and display rect */
@@ -684,11 +643,9 @@ typedef struct RenderData {
        rcti disprect;
 
        /* information on different layers to be rendered */
-       ListBase layers;
-       short actlay;
-
-       /* number of mblur samples */
-       short mblur_samples;
+       ListBase layers DNA_DEPRECATED; /* Converted to Scene->view_layers. */
+       short actlay DNA_DEPRECATED; /* Converted to Scene->active_layer. */
+       short pad1;
 
        /**
         * Adjustment factors for the aspect ratio in the x direction, was a short in 2.45
@@ -705,18 +662,13 @@ typedef struct RenderData {
        /* color management settings - color profiles, gamma correction, etc */
        int color_mgt_flag;
 
-       /** post-production settings. deprecated, but here for upwards compat (initialized to 1) */
-       float postgamma, posthue, postsat;
-
         /* Dither noise intensity */
        float dither_intensity;
 
        /* Bake Render options */
-       short bake_osa, bake_filter, bake_mode, bake_flag;
-       short bake_normal_space, bake_quad_split;
-       float bake_maxdist, bake_biasdist;
-       short bake_samples, bake_pad;
-       float bake_user_scale, bake_pad1;
+       short bake_mode, bake_flag;
+       short bake_filter, bake_samples;
+       float bake_biasdist, bake_user_scale;
 
        /* path to render output */
        char pic[1024]; /* 1024 = FILE_MAX */
@@ -739,28 +691,12 @@ typedef struct RenderData {
        char pad5[5];
 
        /* render simplify */
-       int simplify_flag;
        short simplify_subsurf;
        short simplify_subsurf_render;
-       short simplify_shadowsamples, pad9;
+       short simplify_gpencil;
+       short pad10;
        float simplify_particles;
        float simplify_particles_render;
-       float simplify_aosss;
-
-       /* cineon */
-       short cineonwhite  DNA_DEPRECATED, cineonblack  DNA_DEPRECATED;  /*deprecated*/
-       float cineongamma  DNA_DEPRECATED;  /*deprecated*/
-
-       /* jpeg2000 */
-       short jp2_preset  DNA_DEPRECATED, jp2_depth  DNA_DEPRECATED;  /*deprecated*/
-       int rpad3;
-
-       /* Dome variables */ //  XXX deprecated since 2.5
-       short domeres  DNA_DEPRECATED, domemode  DNA_DEPRECATED;        //  XXX deprecated since 2.5
-       short domeangle  DNA_DEPRECATED, dometilt  DNA_DEPRECATED;      //  XXX deprecated since 2.5
-       float domeresbuf  DNA_DEPRECATED;       //  XXX deprecated since 2.5
-       float pad2;
-       struct Text *dometext  DNA_DEPRECATED;  //  XXX deprecated since 2.5
 
        /* Freestyle line thickness options */
        int line_thickness_mode;
@@ -768,6 +704,7 @@ typedef struct RenderData {
 
        /* render engine */
        char engine[32];
+       int pad2;
 
        /* Cycles baking */
        struct BakeData bake;
@@ -784,12 +721,21 @@ typedef struct RenderData {
        ListBase views;  /* SceneRenderView */
        short actview;
        short views_format;
-       short pad8[2];
+
+       /* Hair Display */
+       short hair_type, hair_subdiv;
 
        /* Motion blur shutter */
        struct CurveMapping mblur_shutter_curve;
 } RenderData;
 
+/* RenderData.hair_type */
+typedef enum eHairType {
+       SCE_HAIR_SHAPE_STRAND      = 0,
+       SCE_HAIR_SHAPE_STRIP       = 1,
+} eHairType;
+
+
 /* *************************************************************** */
 /* Render Conversion/Simplfication Settings */
 
@@ -807,180 +753,6 @@ typedef struct RenderProfile {
 
 } RenderProfile;
 
-/* *************************************************************** */
-/* Game Engine - Dome */
-
-typedef struct GameDome {
-       short res, mode;
-       short angle, tilt;
-       float resbuf, pad2;
-       struct Text *warptext;
-} GameDome;
-
-/* GameDome.mode */
-#define DOME_FISHEYE                   1
-#define DOME_TRUNCATED_FRONT   2
-#define DOME_TRUNCATED_REAR            3
-#define DOME_ENVMAP                            4
-#define DOME_PANORAM_SPH               5
-#define DOME_NUM_MODES                 6
-
-/* *************************************************************** */
-/* Game Engine */
-
-typedef struct GameFraming {
-       float col[3];
-       char type, pad1, pad2, pad3;
-} GameFraming;
-
-/* GameFraming.type */
-#define SCE_GAMEFRAMING_BARS   0
-#define SCE_GAMEFRAMING_EXTEND 1
-#define SCE_GAMEFRAMING_SCALE  2
-
-typedef struct RecastData {
-       float cellsize;
-       float cellheight;
-       float agentmaxslope;
-       float agentmaxclimb;
-       float agentheight;
-       float agentradius;
-       float edgemaxlen;
-       float edgemaxerror;
-       float regionminsize;
-       float regionmergesize;
-       int vertsperpoly;
-       float detailsampledist;
-       float detailsamplemaxerror;
-       char partitioning;
-       char pad1;
-       short pad2;
-} RecastData;
-
-/* RecastData.partitioning */
-#define RC_PARTITION_WATERSHED 0
-#define RC_PARTITION_MONOTONE 1
-#define RC_PARTITION_LAYERS 2
-
-typedef struct GameData {
-
-       /* standalone player */
-       struct GameFraming framing;
-       short playerflag, xplay, yplay, freqplay;
-       short depth, attrib, rt1, rt2;
-       short aasamples, pad4[3];
-
-       /* stereo/dome mode */
-       struct GameDome dome;
-       short stereoflag, stereomode;
-       float eyeseparation;
-       RecastData recastData;
-
-
-       /* physics (it was in world)*/
-       float gravity; /*Gravitation constant for the game world*/
-
-       /*
-        * Radius of the activity bubble, in Manhattan length. Objects
-        * outside the box are activity-culled. */
-       float activityBoxRadius;
-
-       /*
-        * bit 3: (gameengine): Activity culling is enabled.
-        * bit 5: (gameengine) : enable Bullet DBVT tree for view frustum culling
-        */
-       int flag;
-       short mode, matmode;
-       short occlusionRes;             /* resolution of occlusion Z buffer in pixel */
-       short physicsEngine;
-       short exitkey;
-       short vsync; /* Controls vsync: off, on, or adaptive (if supported) */
-       short ticrate, maxlogicstep, physubstep, maxphystep;
-       short obstacleSimulation;
-       short raster_storage;
-       float levelHeight;
-       float deactivationtime, lineardeactthreshold, angulardeactthreshold;
-
-       /* Scene LoD */
-       short lodflag, pad2;
-       int scehysteresis, pad5;
-
-} GameData;
-
-/* GameData.stereoflag */
-#define STEREO_NOSTEREO                1
-#define STEREO_ENABLED         2
-#define STEREO_DOME                    3
-
-/* GameData.stereomode */
-//#define STEREO_NOSTEREO               1
-#define STEREO_QUADBUFFERED 2
-#define STEREO_ABOVEBELOW       3
-#define STEREO_INTERLACED       4
-#define STEREO_ANAGLYPH                5
-#define STEREO_SIDEBYSIDE      6
-#define STEREO_VINTERLACE      7
-//#define STEREO_DOME          8
-#define STEREO_3DTVTOPBOTTOM 9
-
-/* GameData.physicsEngine */
-#define WOPHY_NONE             0
-#define WOPHY_BULLET   5
-
-/* obstacleSimulation */
-#define OBSTSIMULATION_NONE            0
-#define OBSTSIMULATION_TOI_rays                1
-#define OBSTSIMULATION_TOI_cells       2
-
-/* GameData.raster_storage */
-#define RAS_STORE_AUTO         0
-/* #define RAS_STORE_IMMEDIATE 1 */  /* DEPRECATED */
-#define RAS_STORE_VA           2
-#define RAS_STORE_VBO          3
-
-/* GameData.vsync */
-#define VSYNC_ON       0
-#define VSYNC_OFF      1
-#define VSYNC_ADAPTIVE 2
-
-/* GameData.flag */
-#define GAME_RESTRICT_ANIM_UPDATES                     (1 << 0)
-#define GAME_ENABLE_ALL_FRAMES                         (1 << 1)
-#define GAME_SHOW_DEBUG_PROPS                          (1 << 2)
-#define GAME_SHOW_FRAMERATE                                    (1 << 3)
-#define GAME_SHOW_PHYSICS                                      (1 << 4)
-#define GAME_DISPLAY_LISTS                                     (1 << 5)
-#define GAME_GLSL_NO_LIGHTS                                    (1 << 6)
-#define GAME_GLSL_NO_SHADERS                           (1 << 7)
-#define GAME_GLSL_NO_SHADOWS                           (1 << 8)
-#define GAME_GLSL_NO_RAMPS                                     (1 << 9)
-#define GAME_GLSL_NO_NODES                                     (1 << 10)
-#define GAME_GLSL_NO_EXTRA_TEX                         (1 << 11)
-#define GAME_IGNORE_DEPRECATION_WARNINGS       (1 << 12)
-#define GAME_ENABLE_ANIMATION_RECORD           (1 << 13)
-#define GAME_SHOW_MOUSE                                                (1 << 14)
-#define GAME_GLSL_NO_COLOR_MANAGEMENT          (1 << 15)
-#define GAME_SHOW_OBSTACLE_SIMULATION          (1 << 16)
-#define GAME_NO_MATERIAL_CACHING                       (1 << 17)
-#define GAME_GLSL_NO_ENV_LIGHTING                      (1 << 18)
-/* Note: GameData.flag is now an int (max 32 flags). A short could only take 16 flags */
-
-/* GameData.playerflag */
-#define GAME_PLAYER_FULLSCREEN                         (1 << 0)
-#define GAME_PLAYER_DESKTOP_RESOLUTION         (1 << 1)
-
-/* GameData.matmode */
-enum {
-#ifdef DNA_DEPRECATED
-       GAME_MAT_TEXFACE    = 0, /* deprecated */
-#endif
-       GAME_MAT_MULTITEX   = 1,
-       GAME_MAT_GLSL       = 2,
-};
-
-/* GameData.lodflag */
-#define SCE_LOD_USE_HYST               (1 << 0)
-
 /* UV Paint */
 /* ToolSettings.uv_sculpt_settings */
 #define UV_SCULPT_LOCK_BORDERS                         1
@@ -1025,9 +797,28 @@ typedef struct TimeMarker {
 
 #define PAINT_MAX_INPUT_SAMPLES 64
 
+typedef struct Paint_Runtime {
+       /* Avoid having to compare with scene pointer everywhere. */
+       unsigned int tool_offset;
+       unsigned short ob_mode;
+       char _pad[2];
+} Paint_Runtime;
+
+/* We might want to store other things here. */
+typedef struct PaintToolSlot {
+       struct Brush *brush;
+} PaintToolSlot;
+
 /* Paint Tool Base */
 typedef struct Paint {
        struct Brush *brush;
+
+       /* Each tool has it's own active brush,
+        * The currently active tool is defined by the current 'brush'. */
+       struct PaintToolSlot *tool_slots;
+       int                   tool_slots_len;
+       char _pad1[4];
+
        struct Palette *palette;
        struct CurveMapping *cavity_curve; /* cavity curve */
 
@@ -1047,6 +838,8 @@ typedef struct Paint {
 
        float tile_offset[3];
        int pad2;
+
+       struct Paint_Runtime runtime;
 } Paint;
 
 /* ------------------------------------------- */
@@ -1141,6 +934,11 @@ typedef struct UvSculpt {
        Paint paint;
 } UvSculpt;
 
+/* grease pencil drawing brushes */
+typedef struct GpPaint {
+       Paint paint;
+} GpPaint;
+
 /* ------------------------------------------- */
 /* Vertex Paint */
 
@@ -1161,78 +959,104 @@ enum {
 /* ------------------------------------------- */
 /* GPencil Stroke Sculpting */
 
-/* GP_BrushEdit_Settings.brushtype */
-typedef enum eGP_EditBrush_Types {
-       GP_EDITBRUSH_TYPE_SMOOTH    = 0,
-       GP_EDITBRUSH_TYPE_THICKNESS = 1,
-       GP_EDITBRUSH_TYPE_GRAB      = 2,
-       GP_EDITBRUSH_TYPE_PUSH      = 3,
-       GP_EDITBRUSH_TYPE_TWIST     = 4,
-       GP_EDITBRUSH_TYPE_PINCH     = 5,
-       GP_EDITBRUSH_TYPE_RANDOMIZE = 6,
-       GP_EDITBRUSH_TYPE_SUBDIVIDE = 7,
-       GP_EDITBRUSH_TYPE_SIMPLIFY  = 8,
-       GP_EDITBRUSH_TYPE_CLONE     = 9,
-       GP_EDITBRUSH_TYPE_STRENGTH  = 10,
-
-       /* !!! Update GP_EditBrush_Data brush[###]; below !!! */
-       TOT_GP_EDITBRUSH_TYPES
-} eGP_EditBrush_Types;
-
-/* GP_BrushEdit_Settings.lock_axis */
+/* GP_Sculpt_Settings.brushtype */
+typedef enum eGP_Sculpt_Types {
+       GP_SCULPT_TYPE_SMOOTH    = 0,
+       GP_SCULPT_TYPE_THICKNESS = 1,
+       GP_SCULPT_TYPE_STRENGTH  = 2,
+       GP_SCULPT_TYPE_GRAB      = 3,
+       GP_SCULPT_TYPE_PUSH      = 4,
+       GP_SCULPT_TYPE_TWIST     = 5,
+       GP_SCULPT_TYPE_PINCH     = 6,
+       GP_SCULPT_TYPE_RANDOMIZE = 7,
+       GP_SCULPT_TYPE_CLONE     = 8,
+       GP_SCULPT_TYPE_SUBDIVIDE = 9,
+       GP_SCULPT_TYPE_SIMPLIFY  = 10,
+       /* add any sculpt brush above this value */
+       GP_SCULPT_TYPE_WEIGHT    = 11,
+       /* add any weight paint brush below this value. Do no mix brushes */
+
+       /* !!! Update GP_Sculpt_Data brush[###]; below !!! */
+       GP_SCULPT_TYPE_MAX,
+} eGP_Sculpt_Types;
+
+/* GP_Sculpt_Settings.lock_axis */
 typedef enum eGP_Lockaxis_Types {
-       GP_LOCKAXIS_NONE = 0,
+       GP_LOCKAXIS_VIEW = 0,
        GP_LOCKAXIS_X = 1,
        GP_LOCKAXIS_Y = 2,
        GP_LOCKAXIS_Z = 3
 } eGP_Lockaxis_Types;
 
 /* Settings for a GPencil Stroke Sculpting Brush */
-typedef struct GP_EditBrush_Data {
+typedef struct GP_Sculpt_Data {
        short size;             /* radius of brush */
-       short flag;             /* eGP_EditBrush_Flag */
+       short flag;             /* eGP_Sculpt_Flag */
        float strength;         /* strength of effect */
-} GP_EditBrush_Data;
-
-/* GP_EditBrush_Data.flag */
-typedef enum eGP_EditBrush_Flag {
+       float curcolor_add[3];  /* cursor color for add */
+       float curcolor_sub[3];  /* cursor color for sub */
+       float target_weight;    /* target weight */
+       char pad_[4];
+} GP_Sculpt_Data;
+
+/* GP_Sculpt_Data.flag */
+typedef enum eGP_Sculpt_Flag {
        /* invert the effect of the brush */
-       GP_EDITBRUSH_FLAG_INVERT       = (1 << 0),
+       GP_SCULPT_FLAG_INVERT       = (1 << 0),
        /* adjust strength using pen pressure */
-       GP_EDITBRUSH_FLAG_USE_PRESSURE = (1 << 1),
+       GP_SCULPT_FLAG_USE_PRESSURE = (1 << 1),
 
        /* strength of brush falls off with distance from cursor */
-       GP_EDITBRUSH_FLAG_USE_FALLOFF  = (1 << 2),
+       GP_SCULPT_FLAG_USE_FALLOFF  = (1 << 2),
 
        /* smooth brush affects pressure values as well */
-       GP_EDITBRUSH_FLAG_SMOOTH_PRESSURE  = (1 << 3)
-} eGP_EditBrush_Flag;
-
-
+       GP_SCULPT_FLAG_SMOOTH_PRESSURE  = (1 << 3),
+       /* enable screen cursor */
+       GP_SCULPT_FLAG_ENABLE_CURSOR = (1 << 4),
+       /* temporary invert action */
+       GP_SCULPT_FLAG_TMP_INVERT = (1 << 5),
+       /* adjust radius using pen pressure */
+       GP_SCULPT_FLAG_PRESSURE_RADIUS = (1 << 6),
+} eGP_Sculpt_Flag;
 
 /* GPencil Stroke Sculpting Settings */
-typedef struct GP_BrushEdit_Settings {
-       GP_EditBrush_Data brush[11];  /* TOT_GP_EDITBRUSH_TYPES */
+typedef struct GP_Sculpt_Settings {
+       GP_Sculpt_Data brush[12];  /* GP_SCULPT_TYPE_MAX */
        void *paintcursor;            /* runtime */
 
-       int brushtype;                /* eGP_EditBrush_Types */
-       int flag;                     /* eGP_BrushEdit_SettingsFlag */
+       int brushtype;                /* eGP_Sculpt_Types (sculpt) */
+       int flag;                     /* eGP_Sculpt_SettingsFlag */
        int lock_axis;                /* eGP_Lockaxis_Types lock drawing to one axis */
-       float alpha;                  /* alpha factor for selection color */
-} GP_BrushEdit_Settings;
+       char pad1[4];
+
+       /* weight paint is a submode of sculpt but use its own index. All weight paint
+        * brushes must be defined at the end of the brush array.
+        */
+       int weighttype;               /* eGP_Sculpt_Types (weight paint) */
+       char pad[4];
+       struct CurveMapping *cur_falloff; /* multiframe edit falloff effect by frame */
+       struct CurveMapping *cur_primitive; /* Curve used for primitve tools */
+} GP_Sculpt_Settings;
 
-/* GP_BrushEdit_Settings.flag */
-typedef enum eGP_BrushEdit_SettingsFlag {
+/* GP_Sculpt_Settings.flag */
+typedef enum eGP_Sculpt_SettingsFlag {
        /* only affect selected points */
-       GP_BRUSHEDIT_FLAG_SELECT_MASK = (1 << 0),
+       GP_SCULPT_SETT_FLAG_SELECT_MASK = (1 << 0),
        /* apply brush to position */
-       GP_BRUSHEDIT_FLAG_APPLY_POSITION = (1 << 1),
+       GP_SCULPT_SETT_FLAG_APPLY_POSITION = (1 << 1),
        /* apply brush to strength */
-       GP_BRUSHEDIT_FLAG_APPLY_STRENGTH = (1 << 2),
+       GP_SCULPT_SETT_FLAG_APPLY_STRENGTH = (1 << 2),
        /* apply brush to thickness */
-       GP_BRUSHEDIT_FLAG_APPLY_THICKNESS = (1 << 3),
-} eGP_BrushEdit_SettingsFlag;
-
+       GP_SCULPT_SETT_FLAG_APPLY_THICKNESS = (1 << 3),
+       /* apply brush to thickness */
+       GP_SCULPT_SETT_FLAG_WEIGHT_MODE = (1 << 4),
+       /* enable falloff for multiframe editing */
+       GP_SCULPT_SETT_FLAG_FRAME_FALLOFF = (1 << 5),
+       /* apply brush to uv data */
+       GP_SCULPT_SETT_FLAG_APPLY_UV = (1 << 6),
+       /* apply primitve curve */
+       GP_SCULPT_SETT_FLAG_PRIMITIVE_CURVE = (1 << 7),
+} eGP_Sculpt_SettingsFlag;
 
 /* Settings for GP Interpolation Operators */
 typedef struct GP_Interpolate_Settings {
@@ -1276,17 +1100,6 @@ typedef enum eGP_Interpolate_Type {
        GP_IPO_SINE = 12,
 } eGP_Interpolate_Type;
 
-
-/* *************************************************************** */
-/* Transform Orientations */
-
-typedef struct TransformOrientation {
-       struct TransformOrientation *next, *prev;
-       char name[64];  /* MAX_NAME */
-       float mat[3][3];
-       int pad;
-} TransformOrientation;
-
 /* *************************************************************** */
 /* Unified Paint Settings
  */
@@ -1460,14 +1273,15 @@ typedef struct ToolSettings {
        VPaint *wpaint;         /* weight paint */
        Sculpt *sculpt;
        UvSculpt *uvsculpt;     /* uv smooth */
+       GpPaint *gp_paint;  /* gpencil paint */
 
        /* Vertex group weight - used only for editmode, not weight
         * paint */
        float vgroup_weight;
 
        float doublimit;        /* remove doubles limit */
-       float normalsize;       /* size of normals */
-       short automerge;
+       char automerge;
+       char object_flag;
 
        /* Selection Mode for Mesh */
        short selectmode;
@@ -1485,23 +1299,25 @@ typedef struct ToolSettings {
 
        /* Grease Pencil */
        char gpencil_flags;             /* flags/options for how the tool works */
-       char gpencil_src;               /* for main 3D view Grease Pencil, where data comes from */
 
        char gpencil_v3d_align; /* stroke placement settings: 3D View */
        char gpencil_v2d_align; /*                          : General 2D Editor */
        char gpencil_seq_align; /*                          : Sequencer Preview */
        char gpencil_ima_align; /*                          : Image Editor */
 
+       /* Annotations */
+       char annotate_v3d_align;  /* stroke placement settings - 3D View */
+
+       short annotate_thickness; /* default stroke thickness for annotation strokes */
+       short gpencil_selectmode; /* stroke selection mode */
+
        /* Grease Pencil Sculpt */
-       struct GP_BrushEdit_Settings gp_sculpt;
+       struct GP_Sculpt_Settings gp_sculpt;
 
        /* Grease Pencil Interpolation Tool(s) */
        struct GP_Interpolate_Settings gp_interpolate;
 
-       /* Grease Pencil Drawing Brushes (bGPDbrush) */
-       ListBase gp_brushes;
-
-       /* Image Paint (8 byttse aligned please!) */
+       /* Image Paint (8 bytes aligned please!) */
        struct ImagePaintSettings imapaint;
 
        /* Particle Editing */
@@ -1520,42 +1336,20 @@ typedef struct ToolSettings {
        /* Multires */
        char multires_subdiv_type;
 
-       /* Skeleton generation */
-       short skgen_resolution;
-       float skgen_threshold_internal;
-       float skgen_threshold_external;
-       float skgen_length_ratio;
-       float skgen_length_limit;
-       float skgen_angle_limit;
-       float skgen_correlation_limit;
-       float skgen_symmetry_limit;
-       float skgen_retarget_angle_weight;
-       float skgen_retarget_length_weight;
-       float skgen_retarget_distance_weight;
-       short skgen_options;
-       char  skgen_postpro;
-       char  skgen_postpro_passes;
-       char  skgen_subdivisions[3];
-       char  skgen_multi_level;
-
-       /* Skeleton Sketching */
-       struct Object *skgen_template;
-       char bone_sketching;
-       char bone_sketching_convert;
-       char skgen_subdivision_number;
-       char skgen_retarget_options;
-       char skgen_retarget_roll;
-       char skgen_side_string[8];
-       char skgen_num_string[8];
-
        /* Alt+RMB option */
        char edge_mode;
        char edge_mode_live_unwrap;
 
+       /* SCE_MPR_LOC/SCAL */
+       char gizmo_flag;
+
        /* Transform */
+       char transform_pivot_point;
+       char transform_flag;
        char snap_mode, snap_node_mode;
        char snap_uv_mode;
-       short snap_flag, snap_target;
+       char snap_flag;
+       char snap_target;
        short proportional, prop_mode;
        char proportional_objects; /* proportional edit, object mode */
        char proportional_mask; /* proportional edit, mask editing */
@@ -1570,10 +1364,11 @@ typedef struct ToolSettings {
        char vgroupsubset; /* subset selection filter in wpaint */
 
        /* UV painting */
-       int use_uv_sculpt;
-       int uv_sculpt_settings;
-       int uv_sculpt_tool;
-       int uv_relax_method;
+       char _pad2[2];
+       char use_uv_sculpt;
+       char uv_sculpt_settings;
+       char uv_sculpt_tool;
+       char uv_relax_method;
        /* XXX: these sculpt_paint_* fields are deprecated, use the
         * unified_paint_settings field instead! */
        short sculpt_paint_settings DNA_DEPRECATED;     short pad5;
@@ -1587,6 +1382,10 @@ typedef struct ToolSettings {
        struct CurvePaintSettings curve_paint_settings;
 
        struct MeshStatVis statvis;
+
+       /* Normal Editing */
+       float normal_vector[3];
+       int face_strength;
 } ToolSettings;
 
 /* *************************************************************** */
@@ -1610,6 +1409,12 @@ typedef struct UnitSettings {
        char system; /* imperial, metric etc */
        char system_rotation; /* not implemented as a proper unit system yet */
        short flag;
+
+       char length_unit;
+       char mass_unit;
+       char time_unit;
+
+       char pad[5];
 } UnitSettings;
 
 /* ------------------------------------------- */
@@ -1635,6 +1440,81 @@ typedef struct DisplaySafeAreas {
        float action_center[2];
 } DisplaySafeAreas;
 
+/* ------------------------------------------- */
+/* Scene Display - used for store scene specific display settings for the 3d view */
+typedef struct SceneDisplay {
+       float light_direction[3];      /* light direction for shadows/highlight */
+       float shadow_shift, shadow_focus;
+
+       /* Settings for Cavity Shader */
+       float matcap_ssao_distance;
+       float matcap_ssao_attenuation;
+       int matcap_ssao_samples;
+
+       /* OpenGL render engine settings. */
+       View3DShading shading;
+} SceneDisplay;
+
+typedef struct SceneEEVEE {
+       int flag;
+       int gi_diffuse_bounces;
+       int gi_cubemap_resolution;
+       int gi_visibility_resolution;
+       float gi_irradiance_smoothing;
+       float gi_glossy_clamp;
+       float gi_filter_quality;
+       float pad;
+
+       float gi_cubemap_draw_size;
+       float gi_irradiance_draw_size;
+
+       int taa_samples;
+       int taa_render_samples;
+       int sss_samples;
+       float sss_jitter_threshold;
+
+       float ssr_quality;
+       float ssr_max_roughness;
+       float ssr_thickness;
+       float ssr_border_fade;
+       float ssr_firefly_fac;
+
+       float volumetric_start;
+       float volumetric_end;
+       int volumetric_tile_size;
+       int volumetric_samples;
+       float volumetric_sample_distribution;
+       float volumetric_light_clamp;
+       int volumetric_shadow_samples;
+
+       float gtao_distance;
+       float gtao_factor;
+       float gtao_quality;
+
+       float bokeh_max_size;
+       float bokeh_threshold;
+
+       float bloom_color[3];
+       float bloom_threshold;
+       float bloom_knee;
+       float bloom_intensity;
+       float bloom_radius;
+       float bloom_clamp;
+
+       int motion_blur_samples;
+       float motion_blur_shutter;
+
+       int shadow_method;
+       int shadow_cube_size;
+       int shadow_cascade_size;
+
+       struct LightCache *light_cache;
+       char light_cache_info[64];
+
+       float overscan;
+       float light_threshold;
+} SceneEEVEE;
+
 /* *************************************************************** */
 /* Scene ID-Block */
 
@@ -1647,16 +1527,15 @@ typedef struct Scene {
 
        struct Scene *set;
 
-       ListBase base;
-       struct Base *basact;            /* active base */
-       struct Object *obedit;          /* name replaces old G.obedit */
+       ListBase base DNA_DEPRECATED;
+       struct Base  *basact DNA_DEPRECATED; /* active base */
+       void *_pad1;
 
-       float cursor[3];                        /* 3d cursor location */
-       char _pad[4];
+       View3DCursor cursor;                    /* 3d cursor location */
 
-       unsigned int lay;                       /* bitflags for layer visibility */
-       int layact;             /* active layer */
-       unsigned int lay_updated;       /* runtime flag, has layer ever been updated since load? */
+       unsigned int lay DNA_DEPRECATED;        /* bitflags for layer visibility */
+       int layact DNA_DEPRECATED;                      /* active layer */
+       unsigned int pad1;
 
        short flag;                                                             /* various settings */
 
@@ -1668,7 +1547,7 @@ typedef struct Scene {
        struct Editing *ed;                                                             /* sequence editor data is allocated here */
 
        struct ToolSettings *toolsettings;              /* default allocated now */
-       struct SceneStats *stats;                               /* default allocated now */
+       void *pad2;
        struct DisplaySafeAreas safe_areas;
 
        /* migrate or replace? depends on some internal things... */
@@ -1679,6 +1558,9 @@ typedef struct Scene {
        ListBase markers;
        ListBase transform_spaces;
 
+       int orientation_index_custom;
+       int orientation_type;
+
        void *sound_scene;
        void *playback_handle;
        void *sound_scrub_handle;
@@ -1687,24 +1569,17 @@ typedef struct Scene {
        void *fps_info;                                 /* (runtime) info/cache used for presenting playback framerate info to the user */
 
        /* none of the dependency graph  vars is mean to be saved */
-       struct Depsgraph *depsgraph;
-       void *pad1;
-       struct  DagForest *theDag;
-       short dagflags;
-       short pad3;
+       struct GHash *depsgraph_hash;
+       int pad7;
 
        /* User-Defined KeyingSets */
        int active_keyingset;                   /* index of the active KeyingSet. first KeyingSet has index 1, 'none' active is 0, 'add new' is -1 */
        ListBase keyingsets;                    /* KeyingSets for this scene */
 
-       /* Game Settings */
-       struct GameFraming framing  DNA_DEPRECATED; // XXX  deprecated since 2.5
-       struct GameData gm;
-
        /* Units */
        struct UnitSettings unit;
 
-       /* Grease Pencil */
+       /* Grease Pencil - Annotations */
        struct bGPdata *gpd;
 
        /* Movie Tracking */
@@ -1713,9 +1588,11 @@ typedef struct Scene {
        /* Physics simulation settings */
        struct PhysicsSettings physics_settings;
 
+       void *pad8;
        uint64_t customdata_mask;       /* XXX. runtime flag for drawing, actually belongs in the window, only used by BKE_object_handle_update() */
        uint64_t customdata_mask_modal; /* XXX. same as above but for temp operator use (gl renders) */
 
+
        /* Color Management */
        ColorManagedViewSettings view_settings;
        ColorManagedDisplaySettings display_settings;
@@ -1725,6 +1602,16 @@ typedef struct Scene {
        struct RigidBodyWorld *rigidbody_world;
 
        struct PreviewImage *preview;
+
+       ListBase view_layers;
+       /* Not an actual datablock, but memory owned by scene. */
+       Collection *master_collection;
+       struct SceneCollection *collection DNA_DEPRECATED;
+
+       IDProperty *layer_properties;  /* settings to be override by workspaces */
+
+       struct SceneDisplay display;
+       struct SceneEEVEE eevee;
 } Scene;
 
 /* **************** RENDERDATA ********************* */
@@ -1737,41 +1624,41 @@ typedef struct Scene {
 #define SCER_SHOW_SUBFRAME     (1<<3)
 
 /* RenderData.mode */
-#define R_OSA                  (1 << 0)
-#define R_SHADOW               (1 << 1)
-#define R_GAMMA                        (1 << 2)
-#define R_ORTHO                        (1 << 3)
-#define R_ENVMAP               (1 << 4)
-#define R_EDGE                 (1 << 5)
-#define R_FIELDS               (1 << 6)
-#define R_FIELDSTILL   (1 << 7)
-/*#define R_RADIO                      (1 << 8) */ /* deprecated */
-#define R_BORDER               (1 << 9)
-#define R_PANORAMA             (1 << 10)       /* deprecated as scene option, still used in renderer */
-#define R_CROP                 (1 << 11)
+#define R_OSA           (1 << 0)
+/* #define R_SHADOW     (1 << 1) */
+/* #define R_GAMMA      (1 << 2) */
+/* #define R_ORTHO      (1 << 3) */
+/* #define R_ENVMAP     (1 << 4) */
+/* #define R_EDGE       (1 << 5) */
+/* #define R_FIELDS     (1 << 6) */
+/*#define R_FIELDSTILL  (1 << 7) */
+/*#define R_RADIO       (1 << 8) */ /* deprecated */
+#define R_BORDER        (1 << 9)
+#define R_PANORAMA      (1 << 10) /* deprecated */
+#define R_CROP          (1 << 11)
                /* Disable camera switching: runtime (DURIAN_CAMERA_SWITCH) */
-#define R_NO_CAMERA_SWITCH     (1 << 12)
-#define R_ODDFIELD             (1 << 13)
-#define R_MBLUR                        (1 << 14)
+#define R_NO_CAMERA_SWITCH  (1 << 12)
+/* #define R_ODDFIELD       (1 << 13) */
+#define R_MBLUR         (1 << 14)
                /* unified was here */
-#define R_RAYTRACE      (1 << 16)
+/* #define R_RAYTRACE      (1 << 16) */
                /* R_GAUSS is obsolete, but used to retrieve setting from old files */
-#define R_GAUSS        (1 << 17)
+/* #define R_GAUSS          (1 << 17) */
                /* fbuf obsolete... */
-/*#define R_FBUF                       (1 << 18)*/
+/*#define R_FBUF            (1 << 18)*/
                /* threads obsolete... is there for old files, now use for autodetect threads */
-#define R_THREADS              (1 << 19)
+#define R_THREADS       (1 << 19)
                /* Use the same flag for autothreads */
-#define R_FIXED_THREADS                (1 << 19)
+#define R_FIXED_THREADS     (1 << 19)
 
-#define R_SPEED                                (1 << 20)
-#define R_SSS                          (1 << 21)
-#define R_NO_OVERWRITE         (1 << 22)  /* skip existing files */
-#define R_TOUCH                                (1 << 23)  /* touch files before rendering */
-#define R_SIMPLIFY                     (1 << 24)
-#define R_EDGE_FRS                     (1 << 25) /* R_EDGE reserved for Freestyle */
-#define R_PERSISTENT_DATA      (1 << 26) /* keep data around for re-render */
-#define R_USE_WS_SHADING       (1 << 27) /* use world space interpretation of lighting data */
+/* #define R_SPEED              (1 << 20) */
+/* #define R_SSS                (1 << 21) */
+#define R_NO_OVERWRITE      (1 << 22)  /* skip existing files */
+#define R_TOUCH             (1 << 23)  /* touch files before rendering */
+#define R_SIMPLIFY          (1 << 24)
+#define R_EDGE_FRS          (1 << 25) /* R_EDGE reserved for Freestyle */
+#define R_PERSISTENT_DATA   (1 << 26) /* keep data around for re-render */
+/* #define R_USE_WS_SHADING (1 << 27) */ /* use world space interpretation of lighting data */
 
 /* RenderData.seq_flag */
 enum {
@@ -1788,7 +1675,7 @@ enum {
 #define R_OUTPUT_NONE  3
 /*#define R_OUTPUT_FORKED      4*/
 
-/* RenderData.filtertype */
+/* RenderData.filtertype (used for nodes) */
 #define R_FILTER_BOX   0
 #define R_FILTER_TENT  1
 #define R_FILTER_QUAD  2
@@ -1796,66 +1683,55 @@ enum {
 #define R_FILTER_CATROM        4
 #define R_FILTER_GAUSS 5
 #define R_FILTER_MITCH 6
-#define R_FILTER_FAST_GAUSS    7 /* note, this is only used for nodes at the moment */
-
-/* RenderData.raytrace_structure */
-#define R_RAYSTRUCTURE_AUTO                            0
-#define R_RAYSTRUCTURE_OCTREE                  1
-#define R_RAYSTRUCTURE_BLIBVH                  2       /* removed */
-#define R_RAYSTRUCTURE_VBVH                            3
-#define R_RAYSTRUCTURE_SIMD_SVBVH              4       /* needs SIMD */
-#define R_RAYSTRUCTURE_SIMD_QBVH               5       /* needs SIMD */
-
-/* RenderData.raytrace_options */
-#define R_RAYTRACE_USE_LOCAL_COORDS            (1 << 0)
-#define R_RAYTRACE_USE_INSTANCES               (1 << 1)
+#define R_FILTER_FAST_GAUSS    7
 
 /* RenderData.scemode (int now) */
 #define R_DOSEQ             (1 << 0)
 #define R_BG_RENDER         (1 << 1)
                /* passepartout is camera option now, keep this for backward compatibility */
-#define R_PASSEPARTOUT      (1 << 2)
-#define R_BUTS_PREVIEW      (1 << 3)
-#define R_EXTENSION         (1 << 4)
-#define R_MATNODE_PREVIEW   (1 << 5)
-#define R_DOCOMP            (1 << 6)
-#define R_COMP_CROP         (1 << 7)
-#define R_FREE_IMAGE        (1 << 8)
-#define R_SINGLE_LAYER      (1 << 9)
-#define R_EXR_TILE_FILE     (1 << 10)
-/* #define R_COMP_FREE          (1 << 11) */
-#define R_NO_IMAGE_LOAD     (1 << 12)
-#define R_NO_TEX            (1 << 13)
-#define R_NO_FRAME_UPDATE   (1 << 14)
-#define R_FULL_SAMPLE       (1 << 15)
-/* #define R_DEPRECATED     (1 << 16) */
-/* #define R_RECURS_PROTECTION  (1 << 17) */
-#define R_TEXNODE_PREVIEW   (1 << 18)
-#define R_VIEWPORT_PREVIEW  (1 << 19)
-#define R_EXR_CACHE_FILE    (1 << 20)
-#define R_MULTIVIEW         (1 << 21)
+#define R_PASSEPARTOUT         (1 << 2)
+#define R_BUTS_PREVIEW         (1 << 3)
+#define R_EXTENSION                    (1 << 4)
+#define R_MATNODE_PREVIEW      (1 << 5)
+#define R_DOCOMP                       (1 << 6)
+#define R_COMP_CROP                    (1 << 7)
+/* #define R_FREE_IMAGE                (1 << 8) */
+#define R_SINGLE_LAYER         (1 << 9)
+#define R_EXR_TILE_FILE                (1 << 10)
+/* #define R_COMP_FREE                 (1 << 11) */
+#define R_NO_IMAGE_LOAD                (1 << 12)
+/* #define R_NO_TEX                    (1 << 13) */
+#define R_NO_FRAME_UPDATE      (1 << 14)
+#define R_FULL_SAMPLE          (1 << 15)
+/* #define R_DEPRECATED                (1 << 16) */
+/* #define R_RECURS_PROTECTION (1 << 17) */
+#define R_TEXNODE_PREVIEW      (1 << 18)
+/* #define R_VIEWPORT_PREVIEW  (1 << 19) */
+#define R_EXR_CACHE_FILE       (1 << 20)
+#define R_MULTIVIEW                    (1 << 21)
 
 /* RenderData.stamp */
-#define R_STAMP_TIME        (1 << 0)
-#define R_STAMP_FRAME       (1 << 1)
-#define R_STAMP_DATE        (1 << 2)
-#define R_STAMP_CAMERA      (1 << 3)
-#define R_STAMP_SCENE       (1 << 4)
-#define R_STAMP_NOTE        (1 << 5)
-#define R_STAMP_DRAW        (1 << 6) /* draw in the image */
-#define R_STAMP_MARKER      (1 << 7)
-#define R_STAMP_FILENAME    (1 << 8)
-#define R_STAMP_SEQSTRIP    (1 << 9)
-#define R_STAMP_RENDERTIME  (1 << 10)
-#define R_STAMP_CAMERALENS  (1 << 11)
-#define R_STAMP_STRIPMETA   (1 << 12)
-#define R_STAMP_MEMORY      (1 << 13)
-#define R_STAMP_HIDE_LABELS (1 << 14)
-#define R_STAMP_FRAME_RANGE (1 << 15)
+#define R_STAMP_TIME   (1 << 0)
+#define R_STAMP_FRAME  (1 << 1)
+#define R_STAMP_DATE   (1 << 2)
+#define R_STAMP_CAMERA (1 << 3)
+#define R_STAMP_SCENE  (1 << 4)
+#define R_STAMP_NOTE   (1 << 5)
+#define R_STAMP_DRAW   (1 << 6) /* draw in the image */
+#define R_STAMP_MARKER (1 << 7)
+#define R_STAMP_FILENAME       (1 << 8)
+#define R_STAMP_SEQSTRIP       (1 << 9)
+#define R_STAMP_RENDERTIME     (1 << 10)
+#define R_STAMP_CAMERALENS     (1 << 11)
+#define R_STAMP_STRIPMETA      (1 << 12)
+#define R_STAMP_MEMORY         (1 << 13)
+#define R_STAMP_HIDE_LABELS    (1 << 14)
+#define R_STAMP_FRAME_RANGE    (1 << 15)
+#define R_STAMP_HOSTNAME       (1 << 16)
 #define R_STAMP_ALL (R_STAMP_TIME|R_STAMP_FRAME|R_STAMP_DATE|R_STAMP_CAMERA|R_STAMP_SCENE| \
                      R_STAMP_NOTE|R_STAMP_MARKER|R_STAMP_FILENAME|R_STAMP_SEQSTRIP|        \
                      R_STAMP_RENDERTIME|R_STAMP_CAMERALENS|R_STAMP_MEMORY|                 \
-                     R_STAMP_HIDE_LABELS|R_STAMP_FRAME_RANGE)
+                     R_STAMP_HIDE_LABELS|R_STAMP_FRAME_RANGE|R_STAMP_HOSTNAME)
 
 /* RenderData.alphamode */
 #define R_ADDSKY               0
@@ -1888,12 +1764,12 @@ enum {
 /* bake_mode: same as RE_BAKE_xxx defines */
 /* RenderData.bake_flag */
 #define R_BAKE_CLEAR        (1 << 0)
-#define R_BAKE_OSA          (1 << 1)
+/* #define R_BAKE_OSA       (1 << 1) */ /* deprecated */
 #define R_BAKE_TO_ACTIVE    (1 << 2)
-#define R_BAKE_NORMALIZE    (1 << 3)
+/* #define R_BAKE_NORMALIZE (1 << 3) */ /* deprecated */
 #define R_BAKE_MULTIRES     (1 << 4)
 #define R_BAKE_LORES_MESH   (1 << 5)
-#define R_BAKE_VCOL         (1 << 6)
+/* #define R_BAKE_VCOL      (1 << 6) */ /* deprecated */
 #define R_BAKE_USERSCALE    (1 << 7)
 #define R_BAKE_CAGE         (1 << 8)
 #define R_BAKE_SPLIT_MAT    (1 << 9)
@@ -1905,9 +1781,6 @@ enum {
 #define R_BAKE_SPACE_OBJECT     2
 #define R_BAKE_SPACE_TANGENT 3
 
-/* RenderData.simplify_flag */
-#define R_SIMPLE_NO_TRIANGULATE                1
-
 /* RenderData.line_thickness_mode */
 #define R_LINE_THICKNESS_ABSOLUTE 1
 #define R_LINE_THICKNESS_RELATIVE 2
@@ -1915,8 +1788,8 @@ enum {
 /* sequencer seq_prev_type seq_rend_type */
 
 /* RenderData.engine (scene.c) */
-extern const char *RE_engine_id_BLENDER_RENDER;
-extern const char *RE_engine_id_BLENDER_GAME;
+extern const char *RE_engine_id_BLENDER_EEVEE;
+extern const char *RE_engine_id_BLENDER_WORKBENCH;
 extern const char *RE_engine_id_CYCLES;
 
 /* **************** SCENE ********************* */
@@ -1935,39 +1808,56 @@ extern const char *RE_engine_id_CYCLES;
 #define MINAFRAME      -1048574
 #define MINAFRAMEF     -1048574.0f
 
-/* depricate this! */
+/* deprecate this! */
 #define TESTBASE(v3d, base)  (                                                \
-       ((base)->flag & SELECT) &&                                                \
-       ((base)->lay & v3d->lay) &&                                               \
-       (((base)->object->restrictflag & OB_RESTRICT_VIEW) == 0))
+       (((v3d)->localvd == NULL) || ((v3d)->local_view_uuid & (base)->local_view_bits)) && \
+       (((1 << (base)->object->type) & (v3d)->object_type_exclude_viewport) == 0) && \
+       (((base)->flag & BASE_SELECTED) != 0) &&                                  \
+       (((base)->flag & BASE_VISIBLE) != 0))
 #define TESTBASELIB(v3d, base)  (                                             \
-       ((base)->flag & SELECT) &&                                                \
-       ((base)->lay & v3d->lay) &&                                               \
+       (((v3d)->localvd == NULL) || ((v3d)->local_view_uuid & (base)->local_view_bits)) && \
+       (((1 << (base)->object->type) & (v3d)->object_type_exclude_viewport) == 0) && \
+       (((base)->flag & BASE_SELECTED) != 0) &&                                  \
        ((base)->object->id.lib == NULL) &&                                       \
-       (((base)->object->restrictflag & OB_RESTRICT_VIEW) == 0))
-#define TESTBASELIB_BGMODE(v3d, scene, base)  (                               \
-       ((base)->flag & SELECT) &&                                                \
-       ((base)->lay & (v3d ? v3d->lay : scene->lay)) &&                          \
+       (((base)->flag & BASE_VISIBLE) != 0))
+#define TESTBASELIB_BGMODE(v3d, base)  (                                      \
+       ((v3d == NULL) || ((v3d)->localvd == NULL) || ((v3d)->local_view_uuid & (base)->local_view_bits)) && \
+       ((v3d == NULL) || (((1 << (base)->object->type) & (v3d)->object_type_exclude_viewport) == 0)) && \
+       (((base)->flag & BASE_SELECTED) != 0) &&                                  \
        ((base)->object->id.lib == NULL) &&                                       \
-       (((base)->object->restrictflag & OB_RESTRICT_VIEW) == 0))
-#define BASE_EDITABLE_BGMODE(v3d, scene, base)  (                             \
-       ((base)->lay & (v3d ? v3d->lay : scene->lay)) &&                          \
+       (((base)->flag & BASE_VISIBLE) != 0))
+#define BASE_EDITABLE_BGMODE(v3d, base)  (                                    \
+       ((v3d == NULL) || ((v3d)->localvd == NULL) || ((v3d)->local_view_uuid & (base)->local_view_bits)) && \
+       ((v3d == NULL) || (((1 << (base)->object->type) & (v3d)->object_type_exclude_viewport) == 0)) && \
        ((base)->object->id.lib == NULL) &&                                       \
-       (((base)->object->restrictflag & OB_RESTRICT_VIEW) == 0))
+       (((base)->flag & BASE_VISIBLE) != 0))
 #define BASE_SELECTABLE(v3d, base)  (                                         \
-       (base->lay & v3d->lay) &&                                                 \
-       (base->object->restrictflag & (OB_RESTRICT_SELECT | OB_RESTRICT_VIEW)) == 0)
+       (((v3d)->localvd == NULL) || ((v3d)->local_view_uuid & (base)->local_view_bits)) && \
+       (((1 << (base)->object->type) & (v3d)->object_type_exclude_viewport) == 0) && \
+       (((1 << (base)->object->type) & (v3d)->object_type_exclude_select) == 0) && \
+       (((base)->flag & BASE_SELECTABLE) != 0))
 #define BASE_VISIBLE(v3d, base)  (                                            \
-       (base->lay & v3d->lay) &&                                                 \
-       (base->object->restrictflag & OB_RESTRICT_VIEW) == 0)
-#define BASE_VISIBLE_BGMODE(v3d, scene, base)  (                              \
-       (base->lay & (v3d ? v3d->lay : scene->lay)) &&                            \
-       (base->object->restrictflag & OB_RESTRICT_VIEW) == 0)
-
-#define FIRSTBASE              scene->base.first
-#define LASTBASE               scene->base.last
-#define BASACT                 (scene->basact)
-#define OBACT                  (BASACT ? BASACT->object: NULL)
+       (((v3d)->localvd == NULL) || ((v3d)->local_view_uuid & (base)->local_view_bits)) && \
+       (((1 << (base)->object->type) & (v3d)->object_type_exclude_viewport) == 0) && \
+       (((base)->flag & BASE_VISIBLE) != 0))
+#define BASE_VISIBLE_BGMODE(v3d, base) ( \
+       ((v3d == NULL) || ((v3d)->localvd == NULL) || ((v3d)->local_view_uuid & (base)->local_view_bits)) && \
+       ((v3d == NULL) || (((1 << (base)->object->type) & (v3d)->object_type_exclude_viewport) == 0)) && \
+       (((base)->flag & BASE_VISIBLE) != 0))
+
+#define FIRSTBASE(_view_layer)  ((_view_layer)->object_bases.first)
+#define LASTBASE(_view_layer)   ((_view_layer)->object_bases.last)
+#define BASACT(_view_layer)     ((_view_layer)->basact)
+#define OBACT(_view_layer)      (BASACT(_view_layer) ? BASACT(_view_layer)->object: NULL)
+
+#define OBEDIT_FROM_WORKSPACE(workspace, _view_layer) \
+       (((workspace)->object_mode & OD_MODE_EDIT) ? OBACT(_view_layer) : NULL)
+#define OBEDIT_FROM_OBACT(ob) \
+       ((ob) ? (((ob)->mode & OB_MODE_EDIT) ? ob : NULL) : NULL)
+#define OBPOSE_FROM_OBACT(ob) \
+       ((ob) ? (((ob)->mode & OB_MODE_POSE) ? ob : NULL) : NULL)
+#define OBEDIT_FROM_VIEW_LAYER(view_layer) \
+       OBEDIT_FROM_OBACT(OBACT(view_layer))
 
 #define V3D_CAMERA_LOCAL(v3d) ((!(v3d)->scenelock && (v3d)->camera) ? (v3d)->camera : NULL)
 #define V3D_CAMERA_SCENE(scene, v3d) ((!(v3d)->scenelock && (v3d)->camera) ? (v3d)->camera : (scene)->camera)
@@ -1985,6 +1875,16 @@ extern const char *RE_engine_id_CYCLES;
 
 /* Base.flag is in DNA_object_types.h */
 
+/* ToolSettings.transform_flag */
+enum {
+       SCE_XFORM_AXIS_ALIGN = (1 << 0),
+};
+
+/* ToolSettings.object_flag */
+enum {
+       SCE_OBJECT_MODE_LOCK = (1 << 0),
+};
+
 /* ToolSettings.snap_flag */
 #define SCE_SNAP                               (1 << 0)
 #define SCE_SNAP_ROTATE                        (1 << 1)
@@ -1998,16 +1898,18 @@ extern const char *RE_engine_id_CYCLES;
 #define SCE_SNAP_TARGET_CENTER 1
 #define SCE_SNAP_TARGET_MEDIAN 2
 #define SCE_SNAP_TARGET_ACTIVE 3
+
 /* ToolSettings.snap_mode */
-#define SCE_SNAP_MODE_INCREMENT        0
-#define SCE_SNAP_MODE_VERTEX   1
-#define SCE_SNAP_MODE_EDGE             2
-#define SCE_SNAP_MODE_FACE             3
-#define SCE_SNAP_MODE_VOLUME   4
-#define SCE_SNAP_MODE_NODE_X   5
-#define SCE_SNAP_MODE_NODE_Y   6
-#define SCE_SNAP_MODE_NODE_XY  7
-#define SCE_SNAP_MODE_GRID             8
+#define SCE_SNAP_MODE_VERTEX    (1 << 0)
+#define SCE_SNAP_MODE_EDGE      (1 << 1)
+#define SCE_SNAP_MODE_FACE      (1 << 2)
+#define SCE_SNAP_MODE_VOLUME    (1 << 3)
+#define SCE_SNAP_MODE_INCREMENT (1 << 4)
+
+/* ToolSettings.snap_node_mode */
+#define SCE_SNAP_MODE_GRID      (1 << 5)
+#define SCE_SNAP_MODE_NODE_X    (1 << 6)
+#define SCE_SNAP_MODE_NODE_Y    (1 << 7)
 
 /* ToolSettings.selectmode */
 #define SCE_SELECT_VERTEX      (1 << 0) /* for mesh */
@@ -2050,6 +1952,13 @@ enum {
        OB_DRAW_GROUPUSER_ALL       = 2
 };
 
+/* toolsettings->face_strength */
+enum {
+       FACE_STRENGTH_WEAK = -16384,
+       FACE_STRENGTH_MEDIUM = 0,
+       FACE_STRENGTH_STRONG = 16384,
+};
+
 /* object_vgroup.c */
 /* ToolSettings.vgroupsubset */
 typedef enum eVGroupSelect {
@@ -2151,6 +2060,7 @@ typedef enum eSculptFlags {
        /* If set, dynamic-topology detail size will be constant in object space */
        SCULPT_DYNTOPO_DETAIL_CONSTANT = (1 << 13),
        SCULPT_DYNTOPO_DETAIL_BRUSH = (1 << 14),
+       SCULPT_DYNTOPO_DETAIL_MANUAL = (1 << 16),
 
        /* Don't display mask in viewport, but still use it for strokes. */
        SCULPT_HIDE_MASK = (1 << 15),
@@ -2206,21 +2116,42 @@ typedef enum eImagePaintMode {
 #define EDGE_MODE_TAG_BEVEL                            4
 #define EDGE_MODE_TAG_FREESTYLE                        5
 
+/* ToolSettings.gizmo_flag */
+enum {
+       SCE_GIZMO_SHOW_TRANSLATE = (1 << 0),
+       SCE_GIZMO_SHOW_ROTATE    = (1 << 1),
+       SCE_GIZMO_SHOW_SCALE     = (1 << 2),
+};
+
 /* ToolSettings.gpencil_flags */
 typedef enum eGPencil_Flags {
-       /* "Continuous Drawing" - The drawing operator enters a mode where multiple strokes can be drawn */
-       GP_TOOL_FLAG_PAINTSESSIONS_ON       = (1 << 0),
        /* When creating new frames, the last frame gets used as the basis for the new one */
        GP_TOOL_FLAG_RETAIN_LAST            = (1 << 1),
        /* Add the strokes below all strokes in the layer */
-       GP_TOOL_FLAG_PAINT_ONBACK = (1 << 2)
+       GP_TOOL_FLAG_PAINT_ONBACK           = (1 << 2),
+       /* Show compact list of colors */
+       GP_TOOL_FLAG_THUMBNAIL_LIST         = (1 << 3),
+       /* Generate wheight data for new strokes */
+       GP_TOOL_FLAG_CREATE_WEIGHTS         = (1 << 4),
 } eGPencil_Flags;
 
-/* ToolSettings.gpencil_src */
-typedef enum eGPencil_Source_3D {
-       GP_TOOL_SOURCE_SCENE    = 0,
-       GP_TOOL_SOURCE_OBJECT   = 1
-} eGPencil_Source_3d;
+/* scene->r.simplify_gpencil */
+typedef enum eGPencil_SimplifyFlags {
+       /* Simplify */
+       SIMPLIFY_GPENCIL_ENABLE           = (1 << 0),
+       /* Simplify on play */
+       SIMPLIFY_GPENCIL_ON_PLAY          = (1 << 1),
+       /* Simplify fill on viewport */
+       SIMPLIFY_GPENCIL_FILL             = (1 << 2),
+       /* Simplify modifier on viewport */
+       SIMPLIFY_GPENCIL_MODIFIER         = (1 << 3),
+       /* Remove fill external line */
+       SIMPLIFY_GPENCIL_REMOVE_FILL_LINE = (1 << 4),
+       /* Simplify Shader FX */
+       SIMPLIFY_GPENCIL_FX               = (1 << 5),
+       /* Simplify layer blending */
+       SIMPLIFY_GPENCIL_BLEND            = (1 << 6),
+} eGPencil_SimplifyFlags;
 
 /* ToolSettings.gpencil_*_align - Stroke Placement mode flags */
 typedef enum eGPencil_Placement_Flags {
@@ -2236,8 +2167,16 @@ typedef enum eGPencil_Placement_Flags {
 
        /* "Use Endpoints" */
        GP_PROJECT_DEPTH_STROKE_ENDPOINTS = (1 << 4),
+       GP_PROJECT_CURSOR = (1 << 5),
+       GP_PROJECT_DEPTH_STROKE_FIRST = (1 << 6),
 } eGPencil_Placement_Flags;
 
+/* ToolSettings.gpencil_selectmode */
+typedef enum eGPencil_Selectmode_types {
+       GP_SELECTMODE_POINT  = 0,
+       GP_SELECTMODE_STROKE = 1
+} eGPencil_Selectmode_types;
+
 /* ToolSettings.particle flag */
 #define PE_KEEP_LENGTHS         (1 << 0)
 #define PE_LOCK_FIRST           (1 << 1)
@@ -2266,57 +2205,12 @@ typedef enum eGPencil_Placement_Flags {
 #define PE_TYPE_SOFTBODY       1
 #define PE_TYPE_CLOTH          2
 
-/* ToolSettings.skgen_options */
-#define SKGEN_FILTER_INTERNAL  (1 << 0)
-#define SKGEN_FILTER_EXTERNAL  (1 << 1)
-#define        SKGEN_SYMMETRY                  (1 << 2)
-#define        SKGEN_CUT_LENGTH                (1 << 3)
-#define        SKGEN_CUT_ANGLE                 (1 << 4)
-#define        SKGEN_CUT_CORRELATION   (1 << 5)
-#define        SKGEN_HARMONIC                  (1 << 6)
-#define        SKGEN_STICK_TO_EMBEDDING        (1 << 7)
-#define        SKGEN_ADAPTIVE_DISTANCE         (1 << 8)
-#define SKGEN_FILTER_SMART             (1 << 9)
-#define SKGEN_DISP_LENGTH              (1 << 10)
-#define SKGEN_DISP_WEIGHT              (1 << 11)
-#define SKGEN_DISP_ORIG                        (1 << 12)
-#define SKGEN_DISP_EMBED               (1 << 13)
-#define SKGEN_DISP_INDEX               (1 << 14)
-
-#define        SKGEN_SUB_LENGTH                0
-#define        SKGEN_SUB_ANGLE                 1
-#define        SKGEN_SUB_CORRELATION   2
-#define        SKGEN_SUB_TOTAL                 3
-
-/* ToolSettings.skgen_postpro */
-#define SKGEN_SMOOTH                   0
-#define SKGEN_AVERAGE                  1
-#define SKGEN_SHARPEN                  2
-
-/* ToolSettings.bone_sketching */
-#define BONE_SKETCHING                 1
-#define BONE_SKETCHING_QUICK   2
-#define BONE_SKETCHING_ADJUST  4
-
-/* ToolSettings.bone_sketching_convert */
-#define        SK_CONVERT_CUT_FIXED                    0
-#define        SK_CONVERT_CUT_LENGTH                   1
-#define        SK_CONVERT_CUT_ADAPTATIVE               2
-#define        SK_CONVERT_RETARGET                             3
-
-/* ToolSettings.skgen_retarget_options */
-#define        SK_RETARGET_AUTONAME                    1
-
-/* ToolSettings.skgen_retarget_roll */
-#define        SK_RETARGET_ROLL_NONE                   0
-#define        SK_RETARGET_ROLL_VIEW                   1
-#define        SK_RETARGET_ROLL_JOINT                  2
-
 /* PhysicsSettings.flag */
 #define PHYS_GLOBAL_GRAVITY            1
 
 /* UnitSettings */
 
+#define USER_UNIT_ADAPTIVE 0xFF
 /* UnitSettings.system */
 #define        USER_UNIT_NONE                  0
 #define        USER_UNIT_METRIC                1
@@ -2325,6 +2219,39 @@ typedef enum eGPencil_Placement_Flags {
 #define        USER_UNIT_OPT_SPLIT             1
 #define USER_UNIT_ROT_RADIANS  2
 
+/* SceneEEVEE->flag */
+enum {
+       SCE_EEVEE_VOLUMETRIC_ENABLED    = (1 << 0),
+       SCE_EEVEE_VOLUMETRIC_LIGHTS             = (1 << 1),
+       SCE_EEVEE_VOLUMETRIC_SHADOWS    = (1 << 2),
+//     SCE_EEVEE_VOLUMETRIC_COLORED    = (1 << 3), /* Unused */
+       SCE_EEVEE_GTAO_ENABLED                  = (1 << 4),
+       SCE_EEVEE_GTAO_BENT_NORMALS             = (1 << 5),
+       SCE_EEVEE_GTAO_BOUNCE                   = (1 << 6),
+       SCE_EEVEE_DOF_ENABLED                   = (1 << 7),
+       SCE_EEVEE_BLOOM_ENABLED                 = (1 << 8),
+       SCE_EEVEE_MOTION_BLUR_ENABLED   = (1 << 9),
+       SCE_EEVEE_SHADOW_HIGH_BITDEPTH  = (1 << 10),
+       SCE_EEVEE_TAA_REPROJECTION              = (1 << 11),
+       SCE_EEVEE_SSS_ENABLED                   = (1 << 12),
+       SCE_EEVEE_SSS_SEPARATE_ALBEDO   = (1 << 13),
+       SCE_EEVEE_SSR_ENABLED                   = (1 << 14),
+       SCE_EEVEE_SSR_REFRACTION                = (1 << 15),
+       SCE_EEVEE_SSR_HALF_RESOLUTION   = (1 << 16),
+       SCE_EEVEE_SHOW_IRRADIANCE               = (1 << 17),
+       SCE_EEVEE_SHOW_CUBEMAPS                 = (1 << 18),
+       SCE_EEVEE_GI_AUTOBAKE                   = (1 << 19),
+       SCE_EEVEE_SHADOW_SOFT                   = (1 << 20),
+       SCE_EEVEE_OVERSCAN                              = (1 << 21),
+};
+
+/* SceneEEVEE->shadow_method */
+enum {
+       SHADOW_ESM = 1,
+       SHADOW_VSM = 2,
+       SHADOW_METHOD_MAX = 3,
+};
+
 #ifdef __cplusplus
 }
 #endif