Blender  V3.3
Classes | Macros | Typedefs | Enumerations | Functions | Variables
material.c File Reference
#include <math.h>
#include <stddef.h>
#include <string.h>
#include "CLG_log.h"
#include "MEM_guardedalloc.h"
#include "DNA_ID.h"
#include "DNA_anim_types.h"
#include "DNA_collection_types.h"
#include "DNA_curve_types.h"
#include "DNA_curves_types.h"
#include "DNA_customdata_types.h"
#include "DNA_defaults.h"
#include "DNA_gpencil_types.h"
#include "DNA_material_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_meta_types.h"
#include "DNA_node_types.h"
#include "DNA_object_types.h"
#include "DNA_particle_types.h"
#include "DNA_pointcloud_types.h"
#include "DNA_scene_types.h"
#include "DNA_volume_types.h"
#include "BLI_array_utils.h"
#include "BLI_listbase.h"
#include "BLI_math.h"
#include "BLI_utildefines.h"
#include "BLT_translation.h"
#include "BKE_anim_data.h"
#include "BKE_attribute.h"
#include "BKE_brush.h"
#include "BKE_curve.h"
#include "BKE_displist.h"
#include "BKE_editmesh.h"
#include "BKE_gpencil.h"
#include "BKE_icons.h"
#include "BKE_idtype.h"
#include "BKE_image.h"
#include "BKE_lib_id.h"
#include "BKE_lib_query.h"
#include "BKE_main.h"
#include "BKE_material.h"
#include "BKE_mesh.h"
#include "BKE_node.h"
#include "BKE_object.h"
#include "BKE_scene.h"
#include "BKE_vfont.h"
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_build.h"
#include "DEG_depsgraph_query.h"
#include "GPU_material.h"
#include "NOD_shader.h"
#include "BLO_read_write.h"

Go to the source code of this file.

Classes

struct  FillTexPaintSlotsData
 
struct  FindTexPaintNodeData
 

Macros

#define DNA_DEPRECATED_ALLOW
 

Typedefs

typedef enum ePaintSlotFilter ePaintSlotFilter
 
typedef bool(* ForEachTexNodeCallback) (bNode *node, void *userdata)
 

Enumerations

enum  ePaintSlotFilter { PAINT_SLOT_IMAGE = 1 << 0 , PAINT_SLOT_COLOR_ATTRIBUTE = 1 << 1 }
 

Functions

static void material_init_data (ID *id)
 
static void material_copy_data (Main *bmain, ID *id_dst, const ID *id_src, const int flag)
 
static void material_free_data (ID *id)
 
static void material_foreach_id (ID *id, LibraryForeachIDData *data)
 
static void material_blend_write (BlendWriter *writer, ID *id, const void *id_address)
 
static void material_blend_read_data (BlendDataReader *reader, ID *id)
 
static void material_blend_read_lib (BlendLibReader *reader, ID *id)
 
static void material_blend_read_expand (BlendExpander *expander, ID *id)
 
void BKE_gpencil_material_attr_init (Material *ma)
 
MaterialBKE_material_add (Main *bmain, const char *name)
 
MaterialBKE_gpencil_material_add (Main *bmain, const char *name)
 
Material *** BKE_object_material_array_p (Object *ob)
 
short * BKE_object_material_len_p (Object *ob)
 
Material *** BKE_id_material_array_p (ID *id)
 
short * BKE_id_material_len_p (ID *id)
 
static void material_data_index_remove_id (ID *id, short index)
 
bool BKE_object_material_slot_used (Object *object, short actcol)
 
static void material_data_index_clear_id (ID *id)
 
void BKE_id_materials_copy (Main *bmain, ID *id_src, ID *id_dst)
 
void BKE_id_material_resize (Main *bmain, ID *id, short totcol, bool do_id_user)
 
void BKE_id_material_append (Main *bmain, ID *id, Material *ma)
 
MaterialBKE_id_material_pop (Main *bmain, ID *id, int index_i)
 
void BKE_id_material_clear (Main *bmain, ID *id)
 
Material ** BKE_object_material_get_p (Object *ob, short act)
 
MaterialBKE_object_material_get (Object *ob, short act)
 
static IDget_evaluated_object_data_with_materials (Object *ob)
 
MaterialBKE_object_material_get_eval (Object *ob, short act)
 
int BKE_object_material_count_eval (Object *ob)
 
void BKE_id_material_eval_assign (ID *id, int slot, Material *material)
 
void BKE_id_material_eval_ensure_default_slot (ID *id)
 
MaterialBKE_gpencil_material (Object *ob, short act)
 
MaterialGPencilStyleBKE_gpencil_material_settings (Object *ob, short act)
 
void BKE_object_material_resize (Main *bmain, Object *ob, const short totcol, bool do_id_user)
 
void BKE_object_materials_test (Main *bmain, Object *ob, ID *id)
 
void BKE_objects_materials_test_all (Main *bmain, ID *id)
 
void BKE_id_material_assign (Main *bmain, ID *id, Material *ma, short act)
 
static void object_material_assign (Main *bmain, Object *ob, Material *ma, short act, int assign_type, bool do_test_all)
 
void BKE_object_material_assign (Main *bmain, Object *ob, Material *ma, short act, int assign_type)
 
void BKE_object_material_assign_single_obdata (struct Main *bmain, struct Object *ob, struct Material *ma, short act)
 
void BKE_object_material_remap (Object *ob, const unsigned int *remap)
 
void BKE_object_material_remap_calc (Object *ob_dst, Object *ob_src, short *remap_src_to_dst)
 
void BKE_object_material_from_eval_data (Main *bmain, Object *ob_orig, const ID *data_eval)
 
void BKE_object_material_array_assign (Main *bmain, struct Object *ob, struct Material ***matar, int totcol, const bool to_object_only)
 
short BKE_object_material_slot_find_index (Object *ob, Material *ma)
 
bool BKE_object_material_slot_add (Main *bmain, Object *ob)
 
bool BKE_object_material_slot_remove (Main *bmain, Object *ob)
 
static bNodenodetree_uv_node_recursive (bNode *node)
 
static bool ntree_foreach_texnode_recursive (bNodeTree *nodetree, ForEachTexNodeCallback callback, void *userdata, ePaintSlotFilter slot_filter)
 
static bool count_texture_nodes_cb (bNode *UNUSED(node), void *userdata)
 
static int count_texture_nodes_recursive (bNodeTree *nodetree, ePaintSlotFilter slot_filter)
 
static bool fill_texpaint_slots_cb (bNode *node, void *userdata)
 
static void fill_texpaint_slots_recursive (bNodeTree *nodetree, bNode *active_node, const Object *ob, Material *ma, int slot_len, ePaintSlotFilter slot_filter)
 
static ePaintSlotFilter material_paint_slot_filter (const struct Object *ob)
 
void BKE_texpaint_slot_refresh_cache (Scene *scene, Material *ma, const struct Object *ob)
 
void BKE_texpaint_slots_refresh_object (Scene *scene, struct Object *ob)
 
static bool texpaint_slot_node_find_cb (bNode *node, void *userdata)
 
bNodeBKE_texpaint_slot_material_find_node (Material *ma, short texpaint_slot)
 
void ramp_blend (int type, float r_col[3], const float fac, const float col[3])
 
void BKE_material_copybuf_clear (void)
 
void BKE_material_copybuf_free (void)
 
void BKE_material_copybuf_copy (Main *bmain, Material *ma)
 
void BKE_material_copybuf_paste (Main *bmain, Material *ma)
 
void BKE_material_eval (struct Depsgraph *depsgraph, Material *material)
 
static void material_default_gpencil_init (Material *ma)
 
static void material_default_surface_init (Material *ma)
 
static void material_default_volume_init (Material *ma)
 
static void material_default_holdout_init (Material *ma)
 
MaterialBKE_material_default_empty (void)
 
MaterialBKE_material_default_holdout (void)
 
MaterialBKE_material_default_surface (void)
 
MaterialBKE_material_default_volume (void)
 
MaterialBKE_material_default_gpencil (void)
 
void BKE_material_defaults_free_gpu (void)
 
void BKE_materials_init (void)
 
void BKE_materials_exit (void)
 

Variables

static CLG_LogRef LOG = {"bke.material"}
 
IDTypeInfo IDType_ID_MA
 
static Material matcopybuf
 copy/paste buffer, if we had a proper py api that would be better More...
 
static short matcopied = 0
 
static Material default_material_empty
 
static Material default_material_holdout
 
static Material default_material_surface
 
static Material default_material_volume
 
static Material default_material_gpencil
 
static Materialdefault_materials []
 

Macro Definition Documentation

◆ DNA_DEPRECATED_ALLOW

#define DNA_DEPRECATED_ALLOW

Definition at line 17 of file material.c.

Typedef Documentation

◆ ePaintSlotFilter

Bitwise filter for updating paint slots.

◆ ForEachTexNodeCallback

typedef bool(* ForEachTexNodeCallback) (bNode *node, void *userdata)

Definition at line 1369 of file material.c.

Enumeration Type Documentation

◆ ePaintSlotFilter

Bitwise filter for updating paint slots.

Enumerator
PAINT_SLOT_IMAGE 
PAINT_SLOT_COLOR_ATTRIBUTE 

Definition at line 1364 of file material.c.

Function Documentation

◆ BKE_gpencil_material()

Material* BKE_gpencil_material ( Object ob,
short  act 
)

◆ BKE_gpencil_material_add()

Material* BKE_gpencil_material_add ( Main bmain,
const char *  name 
)

◆ BKE_gpencil_material_attr_init()

void BKE_gpencil_material_attr_init ( Material ma)

◆ BKE_gpencil_material_settings()

MaterialGPencilStyle* BKE_gpencil_material_settings ( Object ob,
short  act 
)

◆ BKE_id_material_append()

void BKE_id_material_append ( Main bmain,
ID id,
Material ma 
)

◆ BKE_id_material_array_p()

Material*** BKE_id_material_array_p ( struct ID id)

◆ BKE_id_material_assign()

void BKE_id_material_assign ( Main bmain,
ID id,
Material ma,
short  act 
)

◆ BKE_id_material_clear()

void BKE_id_material_clear ( Main bmain,
ID id 
)

◆ BKE_id_material_eval_assign()

void BKE_id_material_eval_assign ( ID id,
int  slot,
Material material 
)

◆ BKE_id_material_eval_ensure_default_slot()

void BKE_id_material_eval_ensure_default_slot ( struct ID id)

◆ BKE_id_material_len_p()

short* BKE_id_material_len_p ( ID id)

◆ BKE_id_material_pop()

Material* BKE_id_material_pop ( Main bmain,
ID id,
int  index_i 
)

◆ BKE_id_material_resize()

void BKE_id_material_resize ( Main bmain,
ID id,
short  totcol,
bool  do_id_user 
)

◆ BKE_id_materials_copy()

void BKE_id_materials_copy ( Main bmain,
ID id_src,
ID id_dst 
)

◆ BKE_material_add()

Material* BKE_material_add ( Main bmain,
const char *  name 
)

◆ BKE_material_copybuf_clear()

void BKE_material_copybuf_clear ( void  )

Definition at line 1871 of file material.c.

References matcopied, and matcopybuf.

Referenced by WM_init().

◆ BKE_material_copybuf_copy()

void BKE_material_copybuf_copy ( Main bmain,
Material ma 
)

◆ BKE_material_copybuf_free()

void BKE_material_copybuf_free ( void  )

◆ BKE_material_copybuf_paste()

void BKE_material_copybuf_paste ( Main bmain,
Material ma 
)

◆ BKE_material_default_empty()

Material* BKE_material_default_empty ( void  )

Definition at line 2041 of file material.c.

References default_material_empty.

Referenced by workbench_object_material_get().

◆ BKE_material_default_gpencil()

Material* BKE_material_default_gpencil ( void  )

◆ BKE_material_default_holdout()

Material* BKE_material_default_holdout ( void  )

Definition at line 2046 of file material.c.

References default_material_holdout.

Referenced by eevee_object_material_get().

◆ BKE_material_default_surface()

Material* BKE_material_default_surface ( void  )

◆ BKE_material_default_volume()

Material* BKE_material_default_volume ( void  )

◆ BKE_material_defaults_free_gpu()

void BKE_material_defaults_free_gpu ( void  )

Definition at line 2066 of file material.c.

◆ BKE_material_eval()

void BKE_material_eval ( struct Depsgraph depsgraph,
Material material 
)

◆ BKE_materials_exit()

void BKE_materials_exit ( void  )

Definition at line 2090 of file material.c.

References default_materials, and material_free_data().

Referenced by WM_exit_ex().

◆ BKE_materials_init()

void BKE_materials_init ( void  )

◆ BKE_object_material_array_assign()

void BKE_object_material_array_assign ( struct Main bmain,
struct Object ob,
struct Material ***  matar,
int  totcol,
bool  to_object_only 
)
Warning
this calls many more update calls per object then are needed, could be optimized.

Definition at line 1173 of file material.c.

References Object::actcol, BKE_MAT_ASSIGN_OBJECT, BKE_MAT_ASSIGN_USERPREF, BKE_object_material_assign(), BKE_object_material_slot_remove(), Object::matbits, and Object::totcol.

Referenced by material_slot_copy_exec(), mesh_separate_arrays(), and mesh_separate_tagged().

◆ BKE_object_material_array_p()

Material*** BKE_object_material_array_p ( Object ob)

◆ BKE_object_material_assign()

void BKE_object_material_assign ( Main bmain,
Object ob,
Material ma,
short  act,
int  assign_type 
)

◆ BKE_object_material_assign_single_obdata()

void BKE_object_material_assign_single_obdata ( struct Main bmain,
struct Object ob,
struct Material ma,
short  act 
)

Similar to BKE_object_material_assign with BKE_MAT_ASSIGN_OBDATA type, but does not scan whole Main for other usages of the same obdata. Only use in cases where you know that the object's obdata is only used by this one object.

Definition at line 1052 of file material.c.

References BKE_MAT_ASSIGN_OBDATA, and object_material_assign().

Referenced by utils::assign_materials(), and blender::io::alembic::utils::assign_materials().

◆ BKE_object_material_count_eval()

int BKE_object_material_count_eval ( Object ob)

◆ BKE_object_material_from_eval_data()

void BKE_object_material_from_eval_data ( Main bmain,
Object ob_orig,
const ID data_eval 
)

◆ BKE_object_material_get()

Material* BKE_object_material_get ( Object ob,
short  act 
)

Definition at line 687 of file material.c.

References BKE_object_material_get_p(), and NULL.

Referenced by InstanceWriter::add_material_bindings(), animdata_filter_ds_materials(), bake_object_check(), bc_has_animations(), BKE_gpencil_convert_mesh(), BKE_gpencil_material(), BKE_gpencil_material_find_index_by_name_prefix(), BKE_gpencil_material_settings(), BKE_gpencil_object_material_ensure_by_name(), BKE_gpencil_object_material_ensure_from_active_input_material(), BKE_gpencil_object_material_ensure_from_brush(), BKE_gpencil_object_material_from_brush_get(), BKE_gpencil_object_material_index_get(), BKE_gpencil_object_material_index_get_by_name(), BKE_object_material_remap_calc(), BKE_texpaint_slots_refresh_object(), buttons_context_path_material(), GeometryExporter::create_mesh_primitive_list(), ED_gpencil_material_enum_itemf(), ED_mesh_join_objects_exec(), ED_object_assign_active_image(), ED_object_get_active_image(), ED_object_ot_drop_named_material_tooltip(), ED_object_texture_paint_mode_enter_ex(), ED_paint_proj_mesh_data_check(), AnimationExporter::export_curve_animation(), eyedropper_add_material(), blender::bke::paint::canvas::get_active_slot(), blender::ed::sculpt_paint::canvas::get_active_slot(), BCAnimationCurve::get_animation_name(), get_automasking_strokes_list(), blender::ed::space_node::get_context_path_node_shader(), get_default_texture_layer_name_for_object(), get_or_create_current_material(), gpencil_bake_grease_pencil_animation_exec(), gpencil_check_same_material_color(), gpencil_fill_invoke(), gpencil_layer_duplicate_object_exec(), gpencil_material_find_index_by_name(), gpencil_material_lock_unsused_exec(), gpencil_materials_copy_to_object_exec(), gpencil_modifier_masking_panel_draw(), gpencil_strokes_copy_exec(), imapaint_pick_uv(), Freestyle::BlenderFileLoader::insertShapeNode(), join_mesh_single(), make_links_data_exec(), material_slot_assign_exec(), material_slot_de_select(), mesh_new_from_mball_object(), object_frame_has_keyframe(), object_select_all_by_material(), object_select_linked_exec(), ForEachMaterialFunctor< Functor >::operator()(), paint_sample_color(), proj_paint_state_mesh_eval_init(), psys_get_particle_on_path(), psys_thread_context_init(), shader_get_from_context(), single_mat_users(), texture_paint_add_texture_paint_slot_invoke(), and AnimationImporter::translate_Animations().

◆ BKE_object_material_get_eval()

Material* BKE_object_material_get_eval ( struct Object ob,
short  act 
)

◆ BKE_object_material_get_p()

Material** BKE_object_material_get_p ( Object ob,
short  act 
)

◆ BKE_object_material_len_p()

short* BKE_object_material_len_p ( Object ob)

◆ BKE_object_material_remap()

void BKE_object_material_remap ( Object ob,
const unsigned int *  remap 
)

◆ BKE_object_material_remap_calc()

void BKE_object_material_remap_calc ( struct Object ob_dst,
struct Object ob_src,
short *  remap_src_to_dst 
)

Calculate a material remapping from ob_src to ob_dst.

Parameters
remap_src_to_dstAn array the size of ob_src->totcol where index values are filled in which map to ob_dst materials.

Definition at line 1090 of file material.c.

References BKE_object_material_get(), BLI_ghash_free(), BLI_ghash_lookup_p(), BLI_ghash_ptr_new_ex(), BLI_ghash_reinsert(), NULL, POINTER_AS_INT, POINTER_FROM_INT, and Object::totcol.

Referenced by BMD_mesh_intersection().

◆ BKE_object_material_resize()

void BKE_object_material_resize ( Main bmain,
Object ob,
const short  totcol,
bool  do_id_user 
)

◆ BKE_object_material_slot_add()

bool BKE_object_material_slot_add ( Main bmain,
Object ob 
)

◆ BKE_object_material_slot_find_index()

short BKE_object_material_slot_find_index ( Object ob,
Material ma 
)

◆ BKE_object_material_slot_remove()

bool BKE_object_material_slot_remove ( Main bmain,
Object ob 
)

◆ BKE_object_material_slot_used()

bool BKE_object_material_slot_used ( Object object,
short  actcol 
)

◆ BKE_object_materials_test()

void BKE_object_materials_test ( Main bmain,
Object ob,
ID id 
)

◆ BKE_objects_materials_test_all()

void BKE_objects_materials_test_all ( Main bmain,
ID id 
)

◆ BKE_texpaint_slot_material_find_node()

bNode* BKE_texpaint_slot_material_find_node ( Material ma,
short  texpaint_slot 
)

◆ BKE_texpaint_slot_refresh_cache()

void BKE_texpaint_slot_refresh_cache ( Scene scene,
Material ma,
const struct Object ob 
)

◆ BKE_texpaint_slots_refresh_object()

void BKE_texpaint_slots_refresh_object ( Scene scene,
struct Object ob 
)

◆ count_texture_nodes_cb()

static bool count_texture_nodes_cb ( bNode UNUSEDnode,
void userdata 
)
static

Definition at line 1400 of file material.c.

Referenced by count_texture_nodes_recursive().

◆ count_texture_nodes_recursive()

static int count_texture_nodes_recursive ( bNodeTree nodetree,
ePaintSlotFilter  slot_filter 
)
static

◆ fill_texpaint_slots_cb()

static bool fill_texpaint_slots_cb ( bNode node,
void userdata 
)
static

◆ fill_texpaint_slots_recursive()

static void fill_texpaint_slots_recursive ( bNodeTree nodetree,
bNode active_node,
const Object ob,
Material ma,
int  slot_len,
ePaintSlotFilter  slot_filter 
)
static

◆ get_evaluated_object_data_with_materials()

static ID* get_evaluated_object_data_with_materials ( Object ob)
static

◆ material_blend_read_data()

static void material_blend_read_data ( BlendDataReader reader,
ID id 
)
static

◆ material_blend_read_expand()

static void material_blend_read_expand ( BlendExpander expander,
ID id 
)
static

◆ material_blend_read_lib()

static void material_blend_read_lib ( BlendLibReader reader,
ID id 
)
static

◆ material_blend_write()

static void material_blend_write ( BlendWriter writer,
ID id,
const void id_address 
)
static

◆ material_copy_data()

static void material_copy_data ( Main bmain,
ID id_dst,
const ID id_src,
const int  flag 
)
static

◆ material_data_index_clear_id()

static void material_data_index_clear_id ( ID id)
static

◆ material_data_index_remove_id()

static void material_data_index_remove_id ( ID id,
short  index 
)
static

◆ material_default_gpencil_init()

static void material_default_gpencil_init ( Material ma)
static

◆ material_default_holdout_init()

static void material_default_holdout_init ( Material ma)
static

◆ material_default_surface_init()

static void material_default_surface_init ( Material ma)
static

◆ material_default_volume_init()

static void material_default_volume_init ( Material ma)
static

◆ material_foreach_id()

static void material_foreach_id ( ID id,
LibraryForeachIDData data 
)
static

◆ material_free_data()

static void material_free_data ( ID id)
static

◆ material_init_data()

static void material_init_data ( ID id)
static

◆ material_paint_slot_filter()

static ePaintSlotFilter material_paint_slot_filter ( const struct Object ob)
static

Check which type of paint slots should be filled for the given object.

Definition at line 1492 of file material.c.

References Object::mode, FillTexPaintSlotsData::ob, OB_MODE_SCULPT, PAINT_SLOT_COLOR_ATTRIBUTE, and PAINT_SLOT_IMAGE.

Referenced by BKE_texpaint_slot_refresh_cache().

◆ nodetree_uv_node_recursive()

static bNode* nodetree_uv_node_recursive ( bNode node)
static

◆ ntree_foreach_texnode_recursive()

static bool ntree_foreach_texnode_recursive ( bNodeTree nodetree,
ForEachTexNodeCallback  callback,
void userdata,
ePaintSlotFilter  slot_filter 
)
static

◆ object_material_assign()

static void object_material_assign ( Main bmain,
Object ob,
Material ma,
short  act,
int  assign_type,
bool  do_test_all 
)
static

◆ ramp_blend()

void ramp_blend ( int  type,
float  r_col[3],
float  fac,
const float  col[3] 
)

◆ texpaint_slot_node_find_cb()

static bool texpaint_slot_node_find_cb ( bNode node,
void userdata 
)
static

Variable Documentation

◆ default_material_empty

Material default_material_empty
static

Definition at line 1943 of file material.c.

Referenced by BKE_material_default_empty().

◆ default_material_gpencil

Material default_material_gpencil
static

Definition at line 1947 of file material.c.

Referenced by BKE_material_default_gpencil(), and BKE_materials_init().

◆ default_material_holdout

Material default_material_holdout
static

Definition at line 1944 of file material.c.

Referenced by BKE_material_default_holdout(), and BKE_materials_init().

◆ default_material_surface

Material default_material_surface
static

Definition at line 1945 of file material.c.

Referenced by BKE_material_default_surface(), and BKE_materials_init().

◆ default_material_volume

Material default_material_volume
static

Definition at line 1946 of file material.c.

Referenced by BKE_material_default_volume(), and BKE_materials_init().

◆ default_materials

Material* default_materials[]
static
Initial value:
static Material default_material_gpencil
Definition: material.c:1947
static Material default_material_surface
Definition: material.c:1945
static Material default_material_empty
Definition: material.c:1943
static Material default_material_holdout
Definition: material.c:1944
static Material default_material_volume
Definition: material.c:1946

Definition at line 1949 of file material.c.

Referenced by BKE_material_defaults_free_gpu(), BKE_materials_exit(), and BKE_materials_init().

◆ IDType_ID_MA

IDTypeInfo IDType_ID_MA
Initial value:
= {
.id_code = ID_MA,
.id_filter = FILTER_ID_MA,
.main_listbase_index = INDEX_ID_MA,
.struct_size = sizeof(Material),
.name = "Material",
.name_plural = "materials",
.translation_context = BLT_I18NCONTEXT_ID_MATERIAL,
.asset_type_info = NULL,
.copy_data = material_copy_data,
.free_data = material_free_data,
.make_local = NULL,
.foreach_id = material_foreach_id,
.foreach_cache = NULL,
.foreach_path = NULL,
.owner_get = NULL,
.blend_write = material_blend_write,
.blend_read_data = material_blend_read_data,
.blend_read_lib = material_blend_read_lib,
.blend_read_expand = material_blend_read_expand,
.blend_read_undo_preserve = NULL,
.lib_override_apply_post = NULL,
}
@ IDTYPE_FLAGS_APPEND_IS_REUSABLE
Definition: BKE_idtype.h:39
#define BLT_I18NCONTEXT_ID_MATERIAL
#define FILTER_ID_MA
Definition: DNA_ID.h:910
@ INDEX_ID_MA
Definition: DNA_ID.h:1012
@ ID_MA
Definition: DNA_ID_enums.h:51
struct Material Material
static void init_data(ModifierData *md)
static void material_blend_read_lib(BlendLibReader *reader, ID *id)
Definition: material.c:211
static void material_foreach_id(ID *id, LibraryForeachIDData *data)
Definition: material.c:150
static void material_blend_write(BlendWriter *writer, ID *id, const void *id_address)
Definition: material.c:165
static void material_free_data(ID *id)
Definition: material.c:128
static void material_blend_read_expand(BlendExpander *expander, ID *id)
Definition: material.c:228
static void material_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const int flag)
Definition: material.c:86
static void material_blend_read_data(BlendDataReader *reader, ID *id)
Definition: material.c:195
static void material_init_data(ID *id)
Definition: material.c:77

Definition at line 240 of file material.c.

◆ LOG

CLG_LogRef LOG = {"bke.material"}
static

Definition at line 75 of file material.c.

Referenced by BKE_object_material_slot_remove().

◆ matcopied

short matcopied = 0
static

◆ matcopybuf

Material matcopybuf
static

copy/paste buffer, if we had a proper py api that would be better

Note
matcopybuf.nodetree does NOT use ID's
Todo:
matcopybuf.nodetree's node->id's are NOT validated, this will crash!

Definition at line 1868 of file material.c.

Referenced by BKE_material_copybuf_clear(), BKE_material_copybuf_copy(), BKE_material_copybuf_free(), and BKE_material_copybuf_paste().