Merge branch 'master' into blende2.8
[blender.git] / source / blender / makesdna / DNA_material_types.h
index f024a3a3e9c3a2688552ca04404385c15f8f20bf..2de63f5d59fdf68c122515f07de995a47fd44e51 100644 (file)
 #define MAX_MTEX       18
 #endif
 
-struct MTex;
 struct Image;
-struct ColorBand;
-struct Group;
 struct bNodeTree;
 struct AnimData;
 struct Ipo;
 
 /* WATCH IT: change type? also make changes in ipo.h  */
 
-typedef struct VolumeSettings {
-       float density;
-       float emission;
-       float scattering;
-       float reflection;
-
-       float emission_col[3];
-       float transmission_col[3];
-       float reflection_col[3];
-
-       float density_scale;
-       float depth_cutoff;
-       float asymmetry;
-
-       short stepsize_type;
-       short shadeflag;
-       short shade_type;
-       short precache_resolution;
-
-       float stepsize;
-       float ms_diff;
-       float ms_intensity;
-       float ms_spread;
-} VolumeSettings;
-
-/* Game Engine Options (old Texface mode, transp and flag) */
-typedef struct GameSettings {
-       int flag;
-       int alpha_blend;
-       int face_orientation;
-       int pad1;
-} GameSettings;
-
 typedef struct TexPaintSlot {
        struct Image *ima; /* image to be painted on */
        char *uvname;      /* customdata index for uv layer, MAX_NAME*/
-       int index;         /* index for mtex slot in material for blender internal */
+       int valid;         /* do we have a valid image and UV map */
        int pad;
 } TexPaintSlot;
 
+typedef struct MaterialGPencilStyle {
+       struct Image *sima;      /* Texture image for strokes */
+       struct Image *ima;       /* Texture image for filling */
+       float stroke_rgba[4];    /* color for paint and strokes (alpha included) */
+       float fill_rgba[4];      /* color that should be used for drawing "fills" for strokes (alpha included) */
+       float mix_rgba[4];       /* secondary color used for gradients and other stuff */
+       short flag;              /* settings */
+       short index;             /* custom index for passes */
+       short stroke_style;      /* style for drawing strokes (used to select shader type) */
+       short fill_style;        /* style for filling areas (used to select shader type) */
+       float mix_factor;        /* factor used to define shader behavior (several uses) */
+       float gradient_angle;    /* angle used for gradients orientation */
+       float gradient_radius;   /* radius for radial gradients */
+       float pattern_gridsize;  /* cheesboard size */
+       float gradient_scale[2]; /* uv coordinates scale */
+       float gradient_shift[2]; /* factor to shift filling in 2d space */
+       float texture_angle;     /* angle used for texture orientation */
+       float texture_scale[2];  /* texture scale (separated of uv scale) */
+       float texture_offset[2]; /* factor to shift texture in 2d space */
+       float texture_opacity;   /* texture opacity */
+       float texture_pixsize;   /* pixel size for uv along the stroke */
+       int mode;                /* drawing mode (line or dots) */
+
+       int gradient_type;       /* type of gradient */
+       char pad[4];
+} MaterialGPencilStyle;
+
+/* MaterialGPencilStyle->flag */
+typedef enum eMaterialGPencilStyle_Flag {
+       /* Fill Texture is a pattern */
+       GP_STYLE_FILL_PATTERN = (1 << 0),
+       /* don't display color */
+       GP_STYLE_COLOR_HIDE = (1 << 1),
+       /* protected from further editing */
+       GP_STYLE_COLOR_LOCKED = (1 << 2),
+       /* do onion skinning */
+       GP_STYLE_COLOR_ONIONSKIN = (1 << 3),
+       /* clamp texture */
+       GP_STYLE_COLOR_TEX_CLAMP = (1 << 4),
+       /* mix texture */
+       GP_STYLE_COLOR_TEX_MIX = (1 << 5),
+       /* Flip fill colors */
+       GP_STYLE_COLOR_FLIP_FILL = (1 << 6),
+       /* Stroke Texture is a pattern */
+       GP_STYLE_STROKE_PATTERN = (1 << 7),
+       /* Stroke show main switch */
+       GP_STYLE_STROKE_SHOW = (1 << 8),
+       /* Fill  show main switch */
+       GP_STYLE_FILL_SHOW = (1 << 9)
+} eMaterialGPencilStyle_Flag;
+
+typedef enum eMaterialGPencilStyle_Mode {
+       GP_STYLE_MODE_LINE = 0, /* line */
+       GP_STYLE_MODE_DOTS = 1, /* dots */
+       GP_STYLE_MODE_BOX = 2, /* rectangles */
+} eMaterialGPencilStyle_Mode;
+
 typedef struct Material {
        ID id;
        struct AnimData *adt;   /* animation data (must be immediately after id for utilities to use it) */
 
-       short material_type, flag;
-       /* note, keep this below synced with render_types.h */
+       short flag, pad1[7];
+
+       /* Colors from Blender Internal that we are still using. */
        float r, g, b;
        float specr, specg, specb;
-       float mirr, mirg, mirb;
-       float ambr, ambb, ambg;
-       float amb, emit, ang, spectra, ray_mirror;
-       float alpha, ref, spec, zoffs, add;
-       float translucency;
-       /* end synced with render_types.h */
-
-       struct VolumeSettings vol;
-       struct GameSettings game;
-
-       float fresnel_mir, fresnel_mir_i;
-       float fresnel_tra, fresnel_tra_i;
-       float filter;           /* filter added, for raytrace transparency and transmissivity */
-       float tx_limit, tx_falloff;
-       short ray_depth, ray_depth_tra;
-       short har;
-       char seed1, seed2;
-
-       float gloss_mir, gloss_tra;
-       short samp_gloss_mir, samp_gloss_tra;
-       float adapt_thresh_mir, adapt_thresh_tra;
-       float aniso_gloss_mir;
-       float dist_mir;
-       short fadeto_mir;
-       short shade_flag;               /* like Cubic interpolation */
-
-       int mode, mode_l;               /* mode_l is the or-ed result of all layer modes */
-       int mode2, mode2_l;             /* additional mode flags */
-       short flarec, starc, linec, ringc;
-       float hasize, flaresize, subsize, flareboost;
-       float strand_sta, strand_end, strand_ease, strand_surfnor;
-       float strand_min, strand_widthfade;
-       char strand_uvname[64]; /* MAX_CUSTOMDATA_LAYER_NAME */
-
-       float sbias;                    /* shadow bias to prevent terminator prob */
-       float lbias;                    /* factor to multiply lampbias with (0.0 = no mult) */
-       float shad_alpha;               /* in use for irregular shadowbuffer */
-       int     septex;
-
-       /* for buttons and render*/
-       char rgbsel, texact, pr_type, use_nodes;
-       short pr_lamp, pr_texture, ml_flag;     /* ml_flag is for disable base material */
-
-       /* mapping */
-       char mapflag, pad;
-
-       /* shaders */
-       short diff_shader, spec_shader;
-       float roughness, refrac;
-       /* XXX param[4] needs review and improvement (shader system as whole anyway)
-        * This is nasty reused variable for different goals and not easy to RNAify nicely. -jesterKing */
-       float param[4];         /* size, smooth, size, smooth, for toonshader, 0 (fac) and 1 (fresnel) also for fresnel shader */
-       float rms;
-       float darkness;
-
-       /* runtime - OR'd from 'mtex' */
-       short texco, mapto;
-
-       /* ramp colors */
-       struct ColorBand *ramp_col;
-       struct ColorBand *ramp_spec;
-       char rampin_col, rampin_spec;
-       char rampblend_col, rampblend_spec;
-       short ramp_show, pad3;
-       float rampfac_col, rampfac_spec;
-
-       struct MTex *mtex[18];          /* MAX_MTEX */
-       struct bNodeTree *nodetree;
-       struct Ipo *ipo  DNA_DEPRECATED;  /* old animation system, deprecated for 2.5 */
-       struct Group *group;    /* light group */
-       struct PreviewImage *preview;
+       float alpha DNA_DEPRECATED;
+       float ray_mirror  DNA_DEPRECATED;
+       float spec;
+       float gloss_mir  DNA_DEPRECATED; /* renamed and inversed to roughness */
+       float roughness;
+       float metallic;
+       float pad4[2];
 
-       /* dynamic properties */
-       float friction, fh, reflect;
-       float fhdist, xyfrict;
-       short dynamode, pad2;
+       /* Ror buttons and render. */
+       char pr_type, use_nodes;
+       short pr_lamp, pr_texture;
 
-       /* subsurface scattering */
-       float sss_radius[3], sss_col[3];
-       float sss_error, sss_scale, sss_ior;
-       float sss_colfac, sss_texfac;
-       float sss_front, sss_back;
-       short sss_flag, sss_preset;
+       /* Index for render passes. */
+       short index;
 
-       int mapto_textured;     /* render-time cache to optimize texture lookups */
-       short shadowonly_flag;  /* "shadowsonly" type */
-       short index;            /* custom index for render passes */
+       struct bNodeTree *nodetree;
+       struct Ipo *ipo  DNA_DEPRECATED;  /* old animation system, deprecated for 2.5 */
+       struct PreviewImage *preview;
 
-       /* Freestyle line settings */
+       /* Freestyle line settings. */
        float line_col[4];
        short line_priority;
        short vcol_alpha;
 
-       /* texture painting */
+       /* Texture painting slots. */
        short paint_active_slot;
        short paint_clone_slot;
        short tot_slots;
-       short pad4[3];
+       short pad2[3];
 
-       /* multiple tangent (Normal Map node) */
-       char nmap_tangent_names[9][64]; /* [MAX_MTFACE+1][MAX_NAME]; +1 for empty name */
-       int nmap_tangent_names_count, pad5;
-
-       struct TexPaintSlot *texpaintslot; /* cached slot for painting. Make sure to recalculate before use
-                                           * with refresh_texpaint_image_cache */
-       ListBase gpumaterial;           /* runtime */
-} Material;
+       /* Transparency. */
+       float alpha_threshold;
+       float refract_depth;
+       char blend_method;
+       char blend_shadow;
+       char blend_flag;
+       char pad3[5];
 
+       /* Cached slots for texture painting, must be refreshed in
+        * refresh_texpaint_image_cache before using. */
+       struct TexPaintSlot *texpaintslot;
 
-/* **************** GAME PROPERTIES ********************* */
-// Blend Transparency Options - alpha_blend /* match GPU_material::GPUBlendMode */
-#define GEMAT_SOLID             0 /* GPU_BLEND_SOLID */
-#define GEMAT_ADD               (1 << 0) /* GPU_BLEND_ADD */
-#define GEMAT_ALPHA             (1 << 1) /* GPU_BLEND_ALPHA */
-#define GEMAT_CLIP              (1 << 2) /* GPU_BLEND_CLIP */
-#define GEMAT_ALPHA_SORT        (1 << 3) /* GPU_BLEND_ALPHA_SORT */
-#define GEMAT_ALPHA_TO_COVERAGE (1 << 4) /* GPU_BLEND_ALPHA_TO_COVERAGE */
-
-// Game Options - flag
-#define GEMAT_BACKCULL      (1 << 4) /* KX_BACKCULL */
-#define GEMAT_SHADED        (1 << 5) /* KX_LIGHT */
-#define GEMAT_TEXT          (1 << 6) /* RAS_RENDER_3DPOLYGON_TEXT */
-#define GEMAT_NOPHYSICS     (1 << 7)
-#define GEMAT_INVISIBLE     (1 << 8)
-
-// Face Orientation Options - face_orientation
-#define GEMAT_NORMAL        0
-#define GEMAT_HALO          (1 << 9)  /* BILLBOARD_SCREENALIGNED  */
-#define GEMAT_BILLBOARD     (1 << 10) /* BILLBOARD_AXISALIGNED */
-#define GEMAT_SHADOW        (1 << 11) /* SHADOW */
-
-// Use Textures - not defined directly in the UI
-#define GEMAT_TEX              4096 /* KX_TEX */
+       /* Runtime cache for GLSL materials. */
+       ListBase gpumaterial;
 
+       /* grease pencil color */
+       struct MaterialGPencilStyle *gp_style;
+} Material;
 
 /* **************** MATERIAL ********************* */
 
@@ -241,12 +177,6 @@ typedef struct Material {
  * -1 because for active material we store the index + 1 */
 #define MAXMAT                 (32767-1)
 
-/* material_type */
-#define MA_TYPE_SURFACE        0
-#define MA_TYPE_HALO   1
-#define MA_TYPE_VOLUME 2
-#define MA_TYPE_WIRE   3
-
 /* flag */
                /* for render */
 #define MA_IS_USED      (1 << 0)
@@ -258,101 +188,7 @@ typedef struct Material {
                 */
 #define MA_DS_SHOW_TEXS (1 << 2)
 
-/* mode (is int) */
-#define MA_TRACEBLE     (1 << 0)
-#define MA_SHADOW       (1 << 1)
-#define MA_SHLESS       (1 << 2)
-#define MA_WIRE         (1 << 3)            /* deprecated */
-#define MA_VERTEXCOL    (1 << 4)
-#define MA_HALO_SOFT    (1 << 4)
-#define MA_HALO         (1 << 5)            /* deprecated */
-#define MA_ZTRANSP      (1 << 6)
-#define MA_VERTEXCOLP   (1 << 7)
-#define MA_ZINV         (1 << 8)
-#define MA_HALO_RINGS   (1 << 8)
-#define MA_ENV          (1 << 9)
-#define MA_HALO_LINES   (1 << 9)
-#define MA_ONLYSHADOW   (1 << 10)
-#define MA_HALO_XALPHA  (1 << 10)
-#define MA_STAR         (1 << 11)
-#define MA_FACETEXTURE  (1 << 11)
-#define MA_HALOTEX      (1 << 12)
-#define MA_HALOPUNO     (1 << 13)
-#define MA_ONLYCAST     (1 << 13)
-#define MA_NOMIST       (1 << 14)
-#define MA_HALO_SHADE   (1 << 14)
-#define MA_HALO_FLARE   (1 << 15)
-#define MA_TRANSP       (1 << 16)
-#define MA_RAYTRANSP    (1 << 17)
-#define MA_RAYMIRROR    (1 << 18)
-#define MA_SHADOW_TRA   (1 << 19)
-#define MA_RAMP_COL     (1 << 20)
-#define MA_RAMP_SPEC    (1 << 21)
-#define MA_RAYBIAS      (1 << 22)
-#define MA_FULL_OSA     (1 << 23)
-#define MA_TANGENT_STR  (1 << 24)
-#define MA_SHADBUF      (1 << 25)
-               /* note; we drop MA_TANGENT_STR later to become tangent_u */
-#define MA_TANGENT_V    (1 << 26)
-/* qdn: a bit clumsy this, tangents needed for normal maps separated from shading */
-#define MA_NORMAP_TANG  (1 << 27)
-#define MA_GROUP_NOLAY  (1 << 28)
-#define MA_FACETEXTURE_ALPHA    (1 << 29)
-#define MA_STR_B_UNITS  (1 << 30)
-#define MA_STR_SURFDIFF (1 << 31u)
-
-#define MA_MODE_MASK    (((1 << 31u) - 1) & ~(1 << 28u)) /* all valid mode bits */
-#define MA_MODE_PIPELINE       (MA_TRANSP | MA_ZTRANSP | MA_RAYTRANSP \
-                                | MA_TRACEBLE | MA_FULL_OSA | MA_ENV | MA_ZINV \
-                                | MA_ONLYCAST | MA_SHADBUF)
-
-/* mode2 (is int) */
-#define MA_CASTSHADOW          (1 << 0)
-#define MA_MODE2_PIPELINE      (MA_CASTSHADOW)
-#define MA_TANGENT_CONCRETE    (1 << 1)
-
-/* mapflag */
-#define MA_MAPFLAG_UVPROJECT (1 << 0)
-
-/* ray mirror fadeout */
-#define MA_RAYMIR_FADETOSKY    0
-#define MA_RAYMIR_FADETOMAT    1
-
-/* shadowonly_flag */
-#define MA_SO_OLD                      0
-#define MA_SO_SHADOW           1
-#define MA_SO_SHADED           2
-
-/* shade_flag */
-#define MA_CUBIC                       1
-#define MA_OBCOLOR                     2
-#define MA_APPROX_OCCLUSION    4
-#define MA_GROUP_LOCAL      8
-
-/* diff_shader */
-#define MA_DIFF_LAMBERT                0
-#define MA_DIFF_ORENNAYAR      1
-#define MA_DIFF_TOON           2
-#define MA_DIFF_MINNAERT    3
-#define MA_DIFF_FRESNEL     4
-
-/* spec_shader */
-#define MA_SPEC_COOKTORR       0
-#define MA_SPEC_PHONG          1
-#define MA_SPEC_BLINN          2
-#define MA_SPEC_TOON           3
-#define MA_SPEC_WARDISO                4
-
-/* dynamode */
-// #define MA_DRAW_DYNABUTS    1               /* deprecated */
-#define MA_FH_NOR              2
-
 /* ramps */
-#define MA_RAMP_IN_SHADER      0
-#define MA_RAMP_IN_ENERGY      1
-#define MA_RAMP_IN_NOR         2
-#define MA_RAMP_IN_RESULT      3
-
 #define MA_RAMP_BLEND          0
 #define MA_RAMP_ADD                    1
 #define MA_RAMP_MULT           2
@@ -393,39 +229,8 @@ typedef struct Material {
 #define TEXCO_SPEED     (1 << 15)
 
 /* mapto */
-#define MAP_COL         (1 << 0)
-#define MAP_NORM        (1 << 1)
-#define MAP_COLSPEC     (1 << 2)
-#define MAP_COLMIR      (1 << 3)
-#define MAP_VARS        (((1 << 16) - 1) & ~((1 << 4) - 1))
-#define MAP_REF         (1 << 4)
-#define MAP_SPEC        (1 << 5)
-#define MAP_EMIT        (1 << 6)
-#define MAP_ALPHA       (1 << 7)
-#define MAP_HAR         (1 << 8)
-#define MAP_RAYMIRR     (1 << 9)
-#define MAP_TRANSLU     (1 << 10)
-#define MAP_AMB         (1 << 11)
-#define MAP_DISPLACE    (1 << 12)
-#define MAP_WARP        (1 << 13)
-// #define MAP_LAYER    (1 << 14)       /* unused */
-
-/* volume mapto - reuse definitions for now - a bit naughty! */
-#define MAP_DENSITY             (1 << 7)
-#define MAP_EMISSION            (1 << 6)
-#define MAP_EMISSION_COL        (1 << 0)
-#define MAP_SCATTERING          (1 << 4)
-#define MAP_TRANSMISSION_COL    (1 << 3)
-#define MAP_REFLECTION_COL      (1 << 2)
-#define MAP_REFLECTION          (1 << 5)
-
-
-/* mapto for halo */
-//#define MAP_HA_COL        (1 << 0)
-//#define MAP_HA_ALPHA      (1 << 7)
-//#define MAP_HA_HAR        (1 << 8)
-//#define MAP_HA_SIZE       (1 << 1)
-//#define MAP_HA_ADD        (1 << 6)
+#define MAP_COL                        (1 << 0)
+#define MAP_ALPHA              (1 << 7)
 
 /* pmapto */
 /* init */
@@ -457,23 +262,50 @@ typedef struct Material {
 #define MA_HAIR                        10
 #define MA_ATMOS               11
 
-/* sss_flag */
-#define MA_DIFF_SSS            1
-
-/* vol_stepsize_type */
-#define MA_VOL_STEP_RANDOMIZED 0
-#define MA_VOL_STEP_CONSTANT   1
-#define MA_VOL_STEP_ADAPTIVE   2
-
-/* vol_shadeflag */
-#define MA_VOL_RECV_EXT_SHADOW 1
-#define MA_VOL_PRECACHESHADING 8
-
-/* vol_shading_type */
-#define MA_VOL_SHADE_SHADELESS                                 0
-#define MA_VOL_SHADE_SHADOWED                                  2
-#define MA_VOL_SHADE_SHADED                                            1
-#define MA_VOL_SHADE_MULTIPLE                                  3
-#define MA_VOL_SHADE_SHADEDPLUSMULTIPLE                        4
+/* blend_method */
+enum {
+       MA_BM_SOLID,
+       MA_BM_ADD,
+       MA_BM_MULTIPLY,
+       MA_BM_CLIP,
+       MA_BM_HASHED,
+       MA_BM_BLEND,
+};
+
+/* blend_flag */
+enum {
+       MA_BL_HIDE_BACKSIDE =        (1 << 0),
+       MA_BL_SS_REFRACTION =        (1 << 1),
+       MA_BL_SS_SUBSURFACE =        (1 << 2), /* DEPRECATED */
+       MA_BL_TRANSLUCENCY =         (1 << 3),
+};
+
+/* blend_shadow */
+enum {
+       MA_BS_NONE = 0,
+       MA_BS_SOLID,
+       MA_BS_CLIP,
+       MA_BS_HASHED,
+};
+
+/* Grease Pencil Stroke styles */
+enum {
+       GP_STYLE_STROKE_STYLE_SOLID = 0,
+       GP_STYLE_STROKE_STYLE_TEXTURE
+};
+
+/* Grease Pencil Fill styles */
+enum {
+       GP_STYLE_FILL_STYLE_SOLID = 0,
+       GP_STYLE_FILL_STYLE_GRADIENT,
+       GP_STYLE_FILL_STYLE_CHESSBOARD,
+       GP_STYLE_FILL_STYLE_TEXTURE
+};
+
+/* Grease Pencil Gradient Types */
+enum {
+       GP_STYLE_GRADIENT_LINEAR = 0,
+       GP_STYLE_GRADIENT_RADIAL
+};
 
 #endif