375 lines
9.8 KiB
C
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
|