tornavis/source/blender/makesdna/DNA_material_types.h

312 lines
8.5 KiB
C

/*
* ***** 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