312 lines
8.5 KiB
C
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
|