Saturday merger of bf-blender in orange branch.
[blender.git] / source / blender / makesdna / DNA_material_types.h
index 451b8ba692f96bea10b0daa13f50cad3bf427218..79d73ff2b996cfdbb3587e11f10f119a0c6975f6 100644 (file)
 #ifndef DNA_MATERIAL_TYPES_H
 #define DNA_MATERIAL_TYPES_H
 
-/*  #include "BLI_listBase.h" */
-
 #include "DNA_ID.h"
 #include "DNA_scriptlink_types.h"
+#include "DNA_listBase.h"
 
 #ifndef MAX_MTEX
 #define MAX_MTEX       10
@@ -47,6 +46,17 @@ struct MTex;
 struct Ipo;
 struct Material;
 struct ColorBand;
+struct Group;
+
+typedef struct MaterialLayer {
+       struct MaterialLayer *next, *prev;
+       
+       struct Material *mat;
+       float blendfac;
+       short flag, blendmethod, menunr, pad;
+       int pad2;
+       
+} MaterialLayer;
 
 /* WATCH IT: change type? also make changes in ipo.h  */
 
@@ -54,14 +64,16 @@ typedef struct Material {
        ID id;
        
        short colormodel, lay;          /* lay: for dynamics (old engine, until 2.04) */
+       /* note, keep this below synced with render_types.h */
        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 */
+       
        float fresnel_mir, fresnel_mir_i;
        float fresnel_tra, fresnel_tra_i;
        float filter;           /* filter added, for raytrace transparency */
@@ -69,16 +81,15 @@ typedef struct Material {
        short har;
        char seed1, seed2;
        
-       int mode; 
-       int mode2; /* even more material settings :) */
+       int mode, mode_l;               /* mode_l is the or-ed result of all layer modes */
        short flarec, starc, linec, ringc;
        float hasize, flaresize, subsize, flareboost;
        float strand_sta, strand_end, strand_ease;
+       float sbias;                    /* shadow bias */
        
        /* for buttons and render*/
        char rgbsel, texact, pr_type, pad;
-       short pr_back, pr_lamp, septex, pad4;
-       int pad5;
+       short pr_back, pr_lamp, septex, ml_flag;        /* ml_flag is for disable base material */
        
        /* shaders */
        short diff_shader, spec_shader;
@@ -97,7 +108,9 @@ typedef struct Material {
        float rampfac_col, rampfac_spec;
 
        struct MTex *mtex[10];
+       ListBase layers;
        struct Ipo *ipo;
+       struct Group *group;
        
        /* dynamic properties */
        float friction, fh, reflect;
@@ -107,7 +120,7 @@ typedef struct Material {
        /* yafray: absorption color, dispersion parameters and material preset menu */
        float YF_ar, YF_ag, YF_ab, YF_dscale, YF_dpwr;
        int YF_dsmp, YF_preset, YF_djit;
-
+       
        ScriptLink scriptlink;
 } Material;
 
@@ -156,6 +169,8 @@ typedef struct Material {
 #define MA_FULL_OSA            0x800000
 #define MA_TANGENT_STR 0x1000000
 #define MA_SHADBUF             0x2000000
+               /* note; we drop MA_TANGENT_STR later to become tangent_u */
+#define MA_TANGENT_V   0x4000000
 
 #define        MA_MODE_MASK    0x3ffffff       /* all valid mode bits */
 
@@ -163,7 +178,8 @@ typedef struct Material {
 #define MA_DIFF_LAMBERT                0
 #define MA_DIFF_ORENNAYAR      1
 #define MA_DIFF_TOON           2
-#define MA_DIFF_MINNAERT        3
+#define MA_DIFF_MINNAERT    3
+#define MA_DIFF_FRESNEL     4
 
 /* spec_shader */
 #define MA_SPEC_COOKTORR       0
@@ -205,10 +221,10 @@ typedef struct Material {
 #define TEXCO_OSA              512
 #define TEXCO_WINDOW   1024
 #define NEED_UV                        2048
-       /* optim = use simpler AA */
-#define TEXCO_OPTIM            4096
-       /* stored in vertex->accum, 1 D */
+#define TEXCO_TANGENT  4096
+       /* still stored in vertex->accum, 1 D */
 #define TEXCO_STRAND   8192
+#define TEXCO_STRESS   16384
 
 /* mapto */
 #define MAP_COL                        1
@@ -226,6 +242,7 @@ typedef struct Material {
 #define MAP_AMB                        2048
 #define MAP_DISPLACE   4096
 #define MAP_WARP               8192
+#define MAP_LAYER              16384
 
 /* pr_type */
 #define MA_FLAT                        0
@@ -235,5 +252,13 @@ typedef struct Material {
 /* pr_back */
 #define MA_DARK                        1
 
+/* MaterialLayer flag */
+#define ML_ACTIVE              1
+#define ML_RENDER              2
+#define ML_NEG_NORMAL  4
+#define ML_DIFFUSE             8
+#define ML_SPECULAR            16
+#define ML_ALPHA               32
+
 #endif