tornavis/source/blender/makesdna/DNA_material_types.h

375 lines
9.8 KiB
C

/*
* 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.
*/
/** \file
* \ingroup DNA
*/
#pragma once
#include "DNA_ID.h"
#include "DNA_defs.h"
#include "DNA_listBase.h"
#ifdef __cplusplus
extern "C" {
#endif
#ifndef MAX_MTEX
# define MAX_MTEX 18
#endif
struct AnimData;
struct Image;
struct Ipo;
struct bNodeTree;
/* WATCH IT: change type? also make changes in ipo.h */
typedef struct TexPaintSlot {
/** Image to be painted on. */
struct Image *ima;
/** Custom-data index for uv layer, #MAX_NAME. */
char *uvname;
/** Do we have a valid image and UV map. */
int valid;
/** Copy of node interpolation setting. */
int interp;
} TexPaintSlot;
typedef struct MaterialGPencilStyle {
/** Texture image for strokes. */
struct Image *sima;
/** Texture image for filling. */
struct Image *ima;
/** Color for paint and strokes (alpha included). */
float stroke_rgba[4];
/** Color that should be used for drawing "fills" for strokes (alpha included). */
float fill_rgba[4];
/** Secondary color used for gradients and other stuff. */
float mix_rgba[4];
/** Settings. */
short flag;
/** Custom index for passes. */
short index;
/** Style for drawing strokes (used to select shader type). */
short stroke_style;
/** Style for filling areas (used to select shader type). */
short fill_style;
/** Factor used to define shader behavior (several uses). */
float mix_factor;
/** Angle used for gradients orientation. */
float gradient_angle DNA_DEPRECATED;
/** Radius for radial gradients. */
float gradient_radius DNA_DEPRECATED;
char _pad2[4];
/** Uv coordinates scale. */
float gradient_scale[2] DNA_DEPRECATED;
/** Factor to shift filling in 2d space. */
float gradient_shift[2] DNA_DEPRECATED;
/** Angle used for texture orientation. */
float texture_angle;
/** Texture scale (separated of uv scale). */
float texture_scale[2];
/** Factor to shift texture in 2d space. */
float texture_offset[2];
/** Texture opacity. */
float texture_opacity DNA_DEPRECATED;
/** Pixel size for uv along the stroke. */
float texture_pixsize;
/** Drawing mode (line or dots). */
int mode;
/** Type of gradient. */
int gradient_type;
/** Factor used to mix texture and stroke color. */
float mix_stroke_factor;
/** Mode used to align Dots and Boxes with stroke drawing path and object rotation */
int alignment_mode;
/** Rotation for texture for Dots and Squares. */
float alignment_rotation;
} MaterialGPencilStyle;
/* MaterialGPencilStyle->flag */
typedef enum eMaterialGPencilStyle_Flag {
/* Fill Texture is a pattern */
GP_MATERIAL_FILL_PATTERN = (1 << 0),
/* don't display color */
GP_MATERIAL_HIDE = (1 << 1),
/* protected from further editing */
GP_MATERIAL_LOCKED = (1 << 2),
/* do onion skinning */
GP_MATERIAL_HIDE_ONIONSKIN = (1 << 3),
/* clamp texture */
GP_MATERIAL_TEX_CLAMP = (1 << 4),
/* mix fill texture */
GP_MATERIAL_FILL_TEX_MIX = (1 << 5),
/* Flip fill colors */
GP_MATERIAL_FLIP_FILL = (1 << 6),
/* Stroke Texture is a pattern */
GP_MATERIAL_STROKE_PATTERN = (1 << 7),
/* Stroke show main switch */
GP_MATERIAL_STROKE_SHOW = (1 << 8),
/* Fill show main switch */
GP_MATERIAL_FILL_SHOW = (1 << 9),
/* mix stroke texture */
GP_MATERIAL_STROKE_TEX_MIX = (1 << 11),
/* disable stencil clipping (overlap) */
GP_MATERIAL_DISABLE_STENCIL = (1 << 12),
/* Material used as stroke masking. */
GP_MATERIAL_IS_STROKE_HOLDOUT = (1 << 13),
/* Material used as fill masking. */
GP_MATERIAL_IS_FILL_HOLDOUT = (1 << 14),
} eMaterialGPencilStyle_Flag;
typedef enum eMaterialGPencilStyle_Mode {
GP_MATERIAL_MODE_LINE = 0,
GP_MATERIAL_MODE_DOT = 1,
GP_MATERIAL_MODE_SQUARE = 2,
} eMaterialGPencilStyle_Mode;
typedef struct MaterialLineArt {
/* eMaterialLineArtFlags */
int flags;
/* Used to filter line art occlusion edges */
unsigned char material_mask_bits;
/** Maximum 255 levels of equivalent occlusion. */
unsigned char mat_occlusion;
unsigned char _pad[2];
} MaterialLineArt;
typedef enum eMaterialLineArtFlags {
LRT_MATERIAL_MASK_ENABLED = (1 << 0),
/* Deprecated, kept for versioning code. */
LRT_MATERIAL_CUSTOM_OCCLUSION_EFFECTIVENESS = (1 << 1),
} eMaterialLineArtFlags;
typedef struct Material {
ID id;
/** Animation data (must be immediately after id for utilities to use it). */
struct AnimData *adt;
short flag;
char _pad1[2];
/* Colors from Blender Internal that we are still using. */
float r, g, b, a;
float specr, specg, specb;
float alpha DNA_DEPRECATED;
float ray_mirror DNA_DEPRECATED;
float spec;
/** Renamed and inversed to roughness. */
float gloss_mir DNA_DEPRECATED;
float roughness;
float metallic;
/** Nodes */
char use_nodes;
/** Preview render. */
char pr_type;
short pr_texture;
short pr_flag;
/** Index for render passes. */
short index;
struct bNodeTree *nodetree;
/** Old animation system, deprecated for 2.5. */
struct Ipo *ipo DNA_DEPRECATED;
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;
char _pad2[2];
/* Transparency. */
float alpha_threshold;
float refract_depth;
char blend_method;
char blend_shadow;
char blend_flag;
char _pad3[1];
/**
* 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;
struct MaterialLineArt lineart;
} Material;
/* **************** MATERIAL ********************* */
/* maximum number of materials per material array.
* (on object, mesh, light, 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) */ /* UNUSED */
/* 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) */ /* deprecated */
/* #define TEXCO_NORM (1 << 2) */ /* deprecated */
#define TEXCO_GLOB (1 << 3)
#define TEXCO_UV (1 << 4)
#define TEXCO_OBJECT (1 << 5)
/* #define TEXCO_LAVECTOR (1 << 6) */ /* deprecated */
/* #define TEXCO_VIEW (1 << 7) */ /* deprecated */
/* #define TEXCO_STICKY (1 << 8) */ /* deprecated */
/* #define TEXCO_OSA (1 << 9) */ /* deprecated */
#define TEXCO_WINDOW (1 << 10)
/* #define NEED_UV (1 << 11) */ /* deprecated */
/* #define TEXCO_TANGENT (1 << 12) */ /* deprecated */
/* still stored in vertex->accum, 1 D */
#define TEXCO_STRAND (1 << 13)
/** strand is used for normal materials, particle for halo materials */
#define TEXCO_PARTICLE (1 << 13)
/* #define TEXCO_STRESS (1 << 14) */ /* deprecated */
/* #define TEXCO_SPEED (1 << 15) */ /* deprecated */
/** #MTex.mapto */
#define MAP_COL (1 << 0)
#define MAP_ALPHA (1 << 7)
/* pr_type */
typedef enum ePreviewType {
MA_FLAT = 0,
MA_SPHERE = 1,
MA_CUBE = 2,
MA_SHADERBALL = 3,
MA_SPHERE_A = 4, /* Used for icon renders only. */
MA_TEXTURE = 5,
MA_LAMP = 6,
MA_SKY = 7,
MA_HAIR = 10,
MA_ATMOS = 11,
MA_CLOTH = 12,
MA_FLUID = 13,
} ePreviewType;
/* pr_flag */
#define MA_PREVIEW_WORLD (1 << 0)
/* blend_method */
enum {
MA_BM_SOLID = 0,
// MA_BM_ADD = 1, /* deprecated */
// MA_BM_MULTIPLY = 2, /* deprecated */
MA_BM_CLIP = 3,
MA_BM_HASHED = 4,
MA_BM_BLEND = 5,
};
/* blend_flag */
enum {
MA_BL_HIDE_BACKFACE = (1 << 0),
MA_BL_SS_REFRACTION = (1 << 1),
MA_BL_CULL_BACKFACE = (1 << 2),
MA_BL_TRANSLUCENCY = (1 << 3),
};
/* blend_shadow */
enum {
MA_BS_NONE = 0,
MA_BS_SOLID = 1,
MA_BS_CLIP = 2,
MA_BS_HASHED = 3,
};
/* Grease Pencil Stroke styles */
enum {
GP_MATERIAL_STROKE_STYLE_SOLID = 0,
GP_MATERIAL_STROKE_STYLE_TEXTURE = 1,
};
/* Grease Pencil Fill styles */
enum {
GP_MATERIAL_FILL_STYLE_SOLID = 0,
GP_MATERIAL_FILL_STYLE_GRADIENT = 1,
GP_MATERIAL_FILL_STYLE_CHECKER = 2, /* DEPRECATED (only for convert old files) */
GP_MATERIAL_FILL_STYLE_TEXTURE = 3,
};
/* Grease Pencil Gradient Types */
enum {
GP_MATERIAL_GRADIENT_LINEAR = 0,
GP_MATERIAL_GRADIENT_RADIAL = 1,
};
/* Grease Pencil Follow Drawing Modes */
enum {
GP_MATERIAL_FOLLOW_PATH = 0,
GP_MATERIAL_FOLLOW_OBJ = 1,
GP_MATERIAL_FOLLOW_FIXED = 2,
};
#ifdef __cplusplus
}
#endif