/* * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. * All rights reserved. * * The Original Code is: all of this file. * * Contributor(s): none yet. * * ***** END GPL LICENSE BLOCK ***** */ /** \file DNA_material_types.h * \ingroup DNA */ #ifndef __DNA_MATERIAL_TYPES_H__ #define __DNA_MATERIAL_TYPES_H__ #include "DNA_defs.h" #include "DNA_ID.h" #include "DNA_listBase.h" #ifndef MAX_MTEX #define MAX_MTEX 18 #endif struct Image; struct bNodeTree; struct AnimData; struct Ipo; /* WATCH IT: change type? also make changes in ipo.h */ typedef struct TexPaintSlot { struct Image *ima; /* image to be painted on */ char *uvname; /* customdata index for uv layer, MAX_NAME*/ 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 flag, pad1[7]; /* Colors from Blender Internal that we are still using. */ float r, g, b; float specr, specg, specb; 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]; /* Ror buttons and render. */ char pr_type, use_nodes; short pr_lamp, pr_texture; /* Index for render passes. */ short index; struct bNodeTree *nodetree; struct Ipo *ipo DNA_DEPRECATED; /* old animation system, deprecated for 2.5 */ struct PreviewImage *preview; /* Freestyle line settings. */ float line_col[4]; short line_priority; short vcol_alpha; /* Texture painting slots. */ short paint_active_slot; short paint_clone_slot; short tot_slots; short pad2[3]; /* 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; /* Runtime cache for GLSL materials. */ ListBase gpumaterial; /* grease pencil color */ struct MaterialGPencilStyle *gp_style; } Material; /* **************** MATERIAL ********************* */ /* maximum number of materials per material array. * (on object, mesh, lamp, etc.). limited by * short mat_nr in verts, faces. * -1 because for active material we store the index + 1 */ #define MAXMAT (32767-1) /* flag */ /* for render */ #define MA_IS_USED (1 << 0) /* for dopesheet */ #define MA_DS_EXPAND (1 << 1) /* for dopesheet (texture stack expander) * NOTE: this must have the same value as other texture stacks, * otherwise anim-editors will not read correctly */ #define MA_DS_SHOW_TEXS (1 << 2) /* ramps */ #define MA_RAMP_BLEND 0 #define MA_RAMP_ADD 1 #define MA_RAMP_MULT 2 #define MA_RAMP_SUB 3 #define MA_RAMP_SCREEN 4 #define MA_RAMP_DIV 5 #define MA_RAMP_DIFF 6 #define MA_RAMP_DARK 7 #define MA_RAMP_LIGHT 8 #define MA_RAMP_OVERLAY 9 #define MA_RAMP_DODGE 10 #define MA_RAMP_BURN 11 #define MA_RAMP_HUE 12 #define MA_RAMP_SAT 13 #define MA_RAMP_VAL 14 #define MA_RAMP_COLOR 15 #define MA_RAMP_SOFT 16 #define MA_RAMP_LINEAR 17 /* texco */ #define TEXCO_ORCO (1 << 0) #define TEXCO_REFL (1 << 1) #define TEXCO_NORM (1 << 2) #define TEXCO_GLOB (1 << 3) #define TEXCO_UV (1 << 4) #define TEXCO_OBJECT (1 << 5) #define TEXCO_LAVECTOR (1 << 6) #define TEXCO_VIEW (1 << 7) #define TEXCO_STICKY_ (1 << 8) // DEPRECATED #define TEXCO_OSA (1 << 9) #define TEXCO_WINDOW (1 << 10) #define NEED_UV (1 << 11) #define TEXCO_TANGENT (1 << 12) /* still stored in vertex->accum, 1 D */ #define TEXCO_STRAND (1 << 13) #define TEXCO_PARTICLE (1 << 13) /* strand is used for normal materials, particle for halo materials */ #define TEXCO_STRESS (1 << 14) #define TEXCO_SPEED (1 << 15) /* mapto */ #define MAP_COL (1 << 0) #define MAP_ALPHA (1 << 7) /* pmapto */ /* init */ #define MAP_PA_INIT ((1 << 5) - 1) #define MAP_PA_TIME (1 << 0) #define MAP_PA_LIFE (1 << 1) #define MAP_PA_DENS (1 << 2) #define MAP_PA_SIZE (1 << 3) #define MAP_PA_LENGTH (1 << 4) /* reset */ #define MAP_PA_IVEL (1 << 5) /* physics */ #define MAP_PA_PVEL (1 << 6) /* path cache */ #define MAP_PA_CLUMP (1 << 7) #define MAP_PA_KINK (1 << 8) #define MAP_PA_ROUGH (1 << 9) #define MAP_PA_FREQ (1 << 10) /* pr_type */ #define MA_FLAT 0 #define MA_SPHERE 1 #define MA_CUBE 2 #define MA_MONKEY 3 #define MA_SPHERE_A 4 #define MA_TEXTURE 5 #define MA_LAMP 6 #define MA_SKY 7 #define MA_HAIR 10 #define MA_ATMOS 11 /* 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_BACKFACE = (1 << 0), MA_BL_SS_REFRACTION = (1 << 1), MA_BL_FLAG_DEPRECATED_2 = (1 << 2), /* cleared */ 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