11 #define DNA_DEPRECATED_ALLOW
96 const Mesh *mesh_src = (
const Mesh *)id_src;
119 const bool do_tessface = ((mesh_src->
totface != 0) && (mesh_src->
totpoly == 0));
227 mesh->
runtime = blender::dna::shallow_zero_initialize();
315 mesh->
runtime = blender::dna::shallow_zero_initialize();
324 TFace *tf =
mesh->tface;
340 for (
int i = 0; i < me->
totcol; i++) {
413 return "Vertex Weight Mismatch";
415 return "Vertex Group Mismatch";
417 return "Vertex Doesn't Belong To Same Number Of Groups";
419 return "Color Attribute Mismatch";
421 return "UV Mismatch";
423 return "Loop Mismatch";
425 return "Loop Vert Mismatch In Poly Test";
427 return "Loop Vert Mismatch";
429 return "Edge Mismatch";
431 return "Vertex Coordinate Mismatch";
433 return "CustomData Layer Count Mismatch";
435 return "Attribute Value Mismatch";
437 return "Mesh Comparison Code Unknown";
445 const float thresh_sq = thresh * thresh;
447 int layer_count1 = 0, layer_count2 = 0, j;
453 for (
int i = 0; i < c1->
totlayer; i++) {
460 for (
int i = 0; i < c2->
totlayer; i++) {
467 if (layer_count1 != layer_count2) {
476 for (
int i2 = 0; i2 < c2->
totlayer; i2++) {
491 for (j = 0; j < vtot; j++,
v1++,
v2++) {
492 for (
int k = 0; k < 3; k++) {
508 for (j = 0; j < etot; j++, e1++) {
512 for (j = 0; j < etot; j++, e2++) {
525 for (j = 0; j < ptot; j++, p1++, p2++) {
529 if (p1->
totloop != p2->totloop) {
534 lp2 = m2->
mloop + p2->loopstart;
536 for (k = 0; k < p1->
totloop; k++, lp1++, lp2++) {
537 if (lp1->
v != lp2->
v) {
549 for (j = 0; j < ltot; j++, lp1++, lp2++) {
550 if (lp1->
v != lp2->v) {
561 for (j = 0; j < ltot; j++, lp1++, lp2++) {
573 for (j = 0; j < ltot; j++, lp1++, lp2++) {
574 if (lp1->
r != lp2->r || lp1->
g != lp2->g || lp1->
b != lp2->b || lp1->
a != lp2->a) {
585 for (j = 0; j < dvtot; j++, dv1++, dv2++) {
593 for (k = 0; k < dv1->
totweight; k++, dw1++, dw2++) {
594 if (dw1->
def_nr != dw2->def_nr) {
605 const float *l1_data = (
float *)l1->
data;
606 const float *l2_data = (
float *)l2->
data;
608 for (
int i = 0; i < total_length; i++) {
617 const float(*l2_data)[2] = (
float(*)[2])l2->
data;
619 for (
int i = 0; i < total_length; i++) {
631 const float(*l2_data)[3] = (
float(*)[3])l2->
data;
633 for (
int i = 0; i < total_length; i++) {
647 const int *l1_data = (
int *)l1->
data;
648 const int *l2_data = (
int *)l2->
data;
650 for (
int i = 0; i < total_length; i++) {
651 if (l1_data[i] != l2_data[i]) {
661 for (
int i = 0; i < total_length; i++) {
662 if (l1_data[i] != l2_data[i]) {
669 const bool *l1_data = (
bool *)l1->
data;
670 const bool *l2_data = (
bool *)l2->
data;
672 for (
int i = 0; i < total_length; i++) {
673 if (l1_data[i] != l2_data[i]) {
683 for (
int i = 0; i < total_length; i++) {
684 for (j = 0; j < 4; j++) {
707 return "Requires two input meshes";
711 return "Number of verts don't match";
715 return "Number of edges don't match";
719 return "Number of faces don't match";
723 return "Number of loops don't match";
760 if (tottex_tessface != tottex_original || totcol_tessface != totcol_original) {
772 "%s: warning! Tessellation uvs or vcol data got out of sync, "
773 "had to reset!\n CD_MTFACE: %d != CD_MLOOPUV: %d || CD_MCOL: %d != "
774 "CD_PROP_BYTE_COLOR: "
822 bool changed =
false;
841 bool changed =
false;
867 if (do_ensure_tess_cd) {
950 if (free_customdata) {
992 int verts_len,
int edges_len,
int tessface_len,
int loops_len,
int polys_len)
1053 if (me_dst->
mat !=
nullptr) {
1069 const bool do_tessface = (tessface_len || ((me_src->
totface != 0) && (me_src->
totpoly == 0)));
1077 me_dst->
totface = tessface_len;
1114 me_src, verts_len, edges_len, tessface_len, loops_len, polys_len,
CD_MASK_EVERYTHING);
1152 const bool add_key_index,
1157 bmesh_from_mesh_params.calc_vert_normal =
false;
1158 bmesh_from_mesh_params.add_key_index = add_key_index;
1159 bmesh_from_mesh_params.use_shapekey =
true;
1160 bmesh_from_mesh_params.active_shapekey = ob->
shapenr;
1166 const Mesh *me_settings)
1177 const Mesh *me_settings)
1242 float loc[3],
size[3];
1249 for (
int a = 0;
a < 3;
a++) {
1250 if (
size[
a] == 0.0f) {
1253 else if (
size[
a] > 0.0f &&
size[
a] < 0.00001f) {
1256 else if (
size[
a] < 0.0f &&
size[
a] > -0.00001f) {
1257 size[
a] = -0.00001f;
1291 if (r_texflag !=
nullptr) {
1294 if (r_loc !=
nullptr) {
1297 if (r_size !=
nullptr) {
1304 float *texloc, *texsize;
1321 MVert *mvert = tme->mvert;
1324 for (
int a = 0;
a < totvert;
a++, mvert++) {
1333 float loc[3],
size[3];
1338 for (
int a = 0;
a < totvert;
a++) {
1339 float *co = orco[
a];
1344 for (
int a = 0;
a < totvert;
a++) {
1345 float *co = orco[
a];
1346 co[0] = (co[0] - loc[0]) /
size[0];
1347 co[1] = (co[1] - loc[1]) /
size[1];
1348 co[2] = (co[2] - loc[2]) /
size[2];
1367 if (ob ==
nullptr) {
1379 Mesh *old =
nullptr;
1381 if (ob ==
nullptr) {
1407 for (mp = me->
mpoly, i = 0; i < me->totpoly; i++, mp++) {
1413 for (mf = me->
mface, i = 0; i < me->totface; i++, mf++) {
1426 for (mp = me->
mpoly, i = 0; i < me->totpoly; i++, mp++) {
1427 if (mp->
mat_nr == index) {
1432 for (mf = me->
mface, i = 0; i < me->totface; i++, mf++) {
1433 if (mf->
mat_nr == index) {
1447 for (mp = me->
mpoly, i = 0; i < me->totpoly; i++, mp++) {
1451 for (mf = me->
mface, i = 0; i < me->totface; i++, mf++) {
1458 const short remap_len_short = (short)remap_len;
1460 #define MAT_NR_REMAP(n) \
1461 if (n < remap_len_short) { \
1462 BLI_assert(n >= 0 && remap[n] < remap_len_short); \
1478 for (i = 0; i < me->
totpoly; i++) {
1489 for (
int i = 0; i < me->
totpoly; i++) {
1494 for (
int i = 0; i < me->
totpoly; i++) {
1501 const bool use_auto_smooth,
1502 const float auto_smooth_angle)
1504 if (use_auto_smooth) {
1515 for (
int j = 0; j < poly->
totloop; j++, loopstart++) {
1516 if (loopstart->
v == vert) {
1551 for (
int i = 2, i_next = 0; i_next < 3; i = i_next++) {
1555 bool is_real = (l1->
v ==
e->v1 && l2->v ==
e->v2) || (l1->
v ==
e->v2 && l2->v ==
e->v1);
1557 r_edges[i] = is_real ? l1->
e : -1;
1576 Result{float3(FLT_MAX), float3(-FLT_MAX)},
1578 Result result = init;
1579 for (const int i : range) {
1580 math::min_max(float3(me->mvert[i].co), result.min, result.max);
1584 [](
const Result &
a,
const Result &
b) {
1604 for (i = 0; i < me->
totvert; i++, mvert++) {
1608 if (do_keys && me->
key) {
1610 float *fp = (
float *)kb->data;
1611 for (i = kb->totelem; i--; fp += 3) {
1625 for (i = 0; i < me->
totloop; i++, lnors++) {
1639 for (
MVert *mvert = me->
mvert; i--; mvert++) {
1643 if (do_keys && me->
key) {
1645 float *fp = (
float *)kb->data;
1646 for (i = kb->totelem; i--; fp += 3) {
1669 for (
mv =
mesh->
mvert, i = 0; i < mesh->totvert;
mv++, i++) {
1670 if (
mv->bweight != 0) {
1676 for (med =
mesh->
medge, i = 0; i < mesh->totedge; med++, i++) {
1703 MSelect *mselect_src, *mselect_dst;
1714 for (i_src = 0, i_dst = 0; i_src < me->
totselect; i_src++) {
1715 int index = mselect_src[i_src].
index;
1716 switch (mselect_src[i_src].
type) {
1719 mselect_dst[i_dst] = mselect_src[i_src];
1726 mselect_dst[i_dst] = mselect_src[i_src];
1733 mselect_dst[i_dst] = mselect_src[i_src];
1749 mselect_dst =
nullptr;
1763 for (
int i = 0; i < me->
totselect; i++) {
1788 if (msel_index == -1) {
1795 else if (msel_index != me->
totselect - 1) {
1806 r_count[0] = r_count[1] = r_count[2] = 0;
1847 const float (*vert_coords)[3],
1848 const float mat[4][4])
1862 float(*r_loopnors)[3];
1865 memset(r_loopnors, 0,
sizeof(
float[3]) *
mesh.
totloop);
1877 float (*r_corner_normals)[3])
1879 short(*clnors)[2] =
nullptr;
1884 const bool use_split_normals = (r_lnors_spacearr !=
nullptr) ||
1959 for (
int loop_idx = 0; loop_idx < loops_len; loop_idx++, ml++, lnor_space++) {
1961 const int vert_idx = ml->
v;
1964 const int new_vert_idx = vert_used ? verts_len++ : vert_idx;
1973 ml->
v = new_vert_idx;
1977 for (
LinkNode *lnode = (*lnor_space)->loops; lnode; lnode = lnode->
next) {
1981 mloop[ml_fan_idx].
v = new_vert_idx;
1993 copy_v3_v3(vert_normals[vert_idx], (*lnor_space)->vec_lnor);
2001 new_vert->
vnor = (*lnor_space)->vec_lnor;
2002 new_vert->
next = *new_verts;
2003 *new_verts = new_vert;
2029 const MPoly *mp = mpoly;
2030 for (
int poly_idx = 0; poly_idx < num_polys; poly_idx++, mp++) {
2033 for (
int loop_idx = 0; loop_idx < mp->
totloop; loop_idx++, ml++) {
2036 const int edge_idx = ml_prev->
e;
2041 const int new_edge_idx = num_edges++;
2043 ml_prev->
e = new_edge_idx;
2048 new_edge->new_index = new_edge_idx;
2056 medge[edge_idx].
v1 = ml_prev->
v;
2057 medge[edge_idx].
v2 = ml->
v;
2080 const int num_new_verts)
2082 const int verts_len =
mesh->
totvert - num_new_verts;
2092 for (
int i =
mesh->
totvert - 1; i >= verts_len; i--, new_mv--, new_verts = new_verts->
next) {
2096 if (new_verts->
vnor) {
2105 const int num_new_edges)
2107 const int num_edges =
mesh->
totedge - num_new_edges;
2112 for (
int i =
mesh->
totedge - 1; i >= num_edges; i--, new_med--, new_edges = new_edges->
next) {
2116 new_med->
v1 = new_edges->
v1;
2117 new_med->
v2 = new_edges->
v2;
2125 if (num_polys == 0) {
2149 mesh, &lnors_spacearr, &new_verts, memarena);
2151 if (num_new_verts > 0) {
2158 const bool do_edges = (num_new_edges > 0);
2184 if (free_loop_normals) {
2192 #ifdef VALIDATE_MESH
typedef float(TangentPoint)[2]
void BKE_animdata_free(struct ID *id, bool do_id_user)
void BKE_animdata_blend_read_data(struct BlendDataReader *reader, struct AnimData *adt)
void BKE_animdata_blend_write(struct BlendWriter *writer, struct AnimData *adt)
bool BKE_bpath_foreach_path_fixed_process(struct BPathForeachPathData *bpath_data, char *path)
const CustomData_MeshMasks CD_MASK_EVERYTHING
void CustomData_free(struct CustomData *data, int totelem)
void CustomData_blend_read(struct BlendDataReader *reader, struct CustomData *data, int count)
int CustomData_number_of_layers(const struct CustomData *data, int type)
void CustomData_copy(const struct CustomData *source, struct CustomData *dest, eCustomDataMask mask, eCDAllocType alloctype, int totelem)
void CustomData_free_layers(struct CustomData *data, int type, int totelem)
bool CustomData_has_layer(const struct CustomData *data, int type)
void CustomData_MeshMasks_update(CustomData_MeshMasks *mask_dst, const CustomData_MeshMasks *mask_src)
void CustomData_bmesh_update_active_layers(struct CustomData *fdata, struct CustomData *ldata)
void * CustomData_get_layer(const struct CustomData *data, int type)
void * CustomData_bmesh_get(const struct CustomData *data, void *block, int type)
void * CustomData_add_layer(struct CustomData *data, int type, eCDAllocType alloctype, void *layer, int totelem)
void CustomData_set_layer_flag(struct CustomData *data, int type, int flag)
const CustomData_MeshMasks CD_MASK_DERIVEDMESH
void CustomData_realloc(struct CustomData *data, int totelem)
void * CustomData_duplicate_referenced_layer(struct CustomData *data, int type, int totelem)
void CustomData_duplicate_referenced_layers(CustomData *data, int totelem)
#define CD_TYPE_AS_MASK(_type)
void CustomData_copy_data(const struct CustomData *source, struct CustomData *dest, int source_index, int dest_index, int count)
const CustomData_MeshMasks CD_MASK_MESH
void CustomData_reset(struct CustomData *data)
void BKE_editmesh_free_data(BMEditMesh *em)
const char * BKE_idtype_idcode_to_name(short idcode)
@ IDTYPE_FLAGS_APPEND_IS_REUSABLE
@ LIB_ID_COPY_CD_REFERENCE
void BKE_libblock_free_data(struct ID *id, bool do_id_user) ATTR_NONNULL()
struct ID * BKE_id_copy_ex(struct Main *bmain, const struct ID *id, struct ID **r_newid, int flag)
void id_us_min(struct ID *id)
void * BKE_libblock_alloc(struct Main *bmain, short type, const char *name, int flag) ATTR_WARN_UNUSED_RESULT
void * BKE_id_new_nomain(short type, const char *name)
void BKE_id_free(struct Main *bmain, void *idv)
void BKE_libblock_init_empty(struct ID *id) ATTR_NONNULL(1)
void id_us_plus(struct ID *id)
void BKE_id_blend_write(struct BlendWriter *writer, struct ID *id)
void * BKE_id_new(struct Main *bmain, short type, const char *name)
#define BKE_LIB_FOREACHID_PROCESS_IDSUPER(_data, _id_super, _cb_flag)
General operations, lookup, etc. for materials.
void BKE_object_materials_test(struct Main *bmain, struct Object *ob, struct ID *id)
float(* BKE_mesh_vertex_normals_for_write(struct Mesh *mesh))[3]
const float(* BKE_mesh_poly_normals_ensure(const struct Mesh *mesh))[3]
@ MLNOR_SPACEARR_LOOP_INDEX
const float(* BKE_mesh_vertex_normals_ensure(const struct Mesh *mesh))[3]
void BKE_mesh_assert_normals_dirty_or_calculated(const struct Mesh *mesh)
bool BKE_mesh_validate(struct Mesh *me, bool do_verbose, bool cddata_check_mask)
bool BKE_mesh_vertex_normals_are_dirty(const struct Mesh *mesh)
void BKE_mesh_normals_loop_split(const struct MVert *mverts, const float(*vert_normals)[3], int numVerts, struct MEdge *medges, int numEdges, struct MLoop *mloops, float(*r_loopnors)[3], int numLoops, struct MPoly *mpolys, const float(*polynors)[3], int numPolys, bool use_split_normals, float split_angle, MLoopNorSpaceArray *r_lnors_spacearr, short(*clnors_data)[2], int *r_loop_to_poly)
void BKE_lnor_spacearr_free(MLoopNorSpaceArray *lnors_spacearr)
void BKE_mesh_normals_tag_dirty(struct Mesh *mesh)
void BKE_mesh_tag_coords_changed_uniformly(struct Mesh *mesh)
void BKE_mesh_tag_coords_changed(struct Mesh *mesh)
void BKE_mesh_add_mface_layers(struct CustomData *fdata, struct CustomData *ldata, int total)
void BKE_mesh_runtime_free_data(struct Mesh *mesh)
Free all data (and mutexes) inside the runtime of the given mesh.
void BKE_mesh_runtime_clear_cache(struct Mesh *mesh)
This function clears runtime cache of the given mesh.
void BKE_mesh_runtime_init_data(struct Mesh *mesh)
Initialize the runtime of the given mesh.
void BKE_mesh_runtime_reset_on_copy(struct Mesh *mesh, int flag)
bool BKE_mesh_wrapper_minmax(const struct Mesh *me, float min[3], float max[3])
void BKE_modifiers_test_object(struct Object *ob)
void multires_force_sculpt_rebuild(struct Object *object)
General operations, lookup, etc. for blender objects.
void BKE_boundbox_init_from_minmax(struct BoundBox *bb, const float min[3], const float max[3])
bool BKE_object_obdata_texspace_get(struct Object *ob, char **r_texflag, float **r_loc, float **r_size)
#define BLI_assert_unreachable()
#define BLI_BITMAP_NEW(_num, _alloc_string)
#define BLI_BITMAP_TEST(_bitmap, _index)
#define BLI_BITMAP_ENABLE(_bitmap, _index)
#define BLI_BITMAP_TEST_BOOL(_bitmap, _index)
void BLI_edgehash_free(EdgeHash *eh, EdgeHashFreeFP free_value)
void BLI_edgehash_insert(EdgeHash *eh, unsigned int v0, unsigned int v1, void *val)
bool BLI_edgehash_ensure_p(EdgeHash *eh, unsigned int v0, unsigned int v1, void ***r_val) ATTR_WARN_UNUSED_RESULT
EdgeHash * BLI_edgehash_new_ex(const char *info, unsigned int nentries_reserve)
void * BLI_edgehash_lookup(const EdgeHash *eh, unsigned int v0, unsigned int v1) ATTR_WARN_UNUSED_RESULT
void BLI_endian_switch_uint32_array(unsigned int *val, int size) ATTR_NONNULL(1)
BLI_INLINE unsigned int BLI_hash_int(unsigned int k)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
#define LISTBASE_FOREACH(type, var, list)
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
MINLINE int min_ii(int a, int b)
MINLINE bool compare_threshold_relative(float value1, float value2, float thresh)
void mul_m3_v3(const float M[3][3], float r[3])
void copy_m3_m4(float m1[3][3], const float m2[4][4])
void normalize_m3(float R[3][3]) ATTR_NONNULL()
void mul_m4_v3(const float M[4][4], float r[3])
void mul_v3_m4v3(float r[3], const float M[4][4], const float v[3])
MINLINE void madd_v3_v3v3v3(float r[3], const float a[3], const float b[3], const float c[3])
MINLINE float len_squared_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void copy_v3_v3(float r[3], const float a[3])
void range_vn_i(int *array_tar, int size, int start)
void copy_vn_i(int *array_tar, int size, int val)
void mid_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void add_v3_v3(float r[3], const float a[3])
void * BLI_memarena_alloc(struct MemArena *ma, size_t size) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC ATTR_ALLOC_SIZE(2)
#define INIT_MINMAX(min, max)
#define POINTER_FROM_INT(i)
#define POINTER_AS_INT(i)
#define MEMCMP_STRUCT_AFTER_IS_ZERO(struct_var, member)
#define MEMCPY_STRUCT_AFTER(struct_dst, struct_src, member)
#define BLO_read_data_address(reader, ptr_p)
#define BLO_write_id_struct(writer, struct_name, id_address, id)
void BLO_read_list(BlendDataReader *reader, struct ListBase *list)
#define BLO_read_id_address(reader, lib, id_ptr_p)
#define BLO_expand(expander, id)
bool BLO_read_requires_endian_switch(BlendDataReader *reader)
void BLO_write_raw(BlendWriter *writer, size_t size_in_bytes, const void *data_ptr)
void BLO_read_pointer_array(BlendDataReader *reader, void **ptr_p)
bool BLO_write_is_undo(BlendWriter *writer)
void BLO_write_pointer_array(BlendWriter *writer, uint num, const void *data_ptr)
#define BLT_I18NCONTEXT_ID_MESH
struct Depsgraph Depsgraph
bool DEG_is_active(const struct Depsgraph *depsgraph)
void DEG_debug_print_eval(struct Depsgraph *depsgraph, const char *function_name, const char *object_name, const void *object_address)
struct ID * DEG_get_original_id(struct ID *id)
@ LIB_TAG_COPIED_ON_WRITE
#define ID_IS_OVERRIDE_LIBRARY(_id)
#define CD_MASK_PROP_BYTE_COLOR
#define CD_MASK_MDEFORMVERT
#define DNA_struct_default_get(struct_name)
#define ME_POLY_LOOP_PREV(mloop, mp, i)
#define ME_POLY_LOOP_NEXT(mloop, mp, i)
Object is a sort of wrapper for general info.
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint i1
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble v1
Read Guarded memory(de)allocation.
#define MEM_reallocN(vmemh, len)
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color Vector Map an input vectors to used to fine tune the interpolation of the input Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert a color
Platform independent time functions.
void BM_data_layer_free(BMesh *bm, CustomData *data, int type)
void BM_data_layer_add(BMesh *bm, CustomData *data, int type)
#define BM_ITER_MESH(ele, iter, bm, itype)
ATTR_WARN_UNUSED_RESULT BMesh * bm
BMesh * BM_mesh_create(const BMAllocTemplate *allocsize, const struct BMeshCreateParams *params)
#define BMALLOC_TEMPLATE_FROM_ME(...)
void BM_mesh_bm_to_me_for_eval(BMesh *bm, Mesh *me, const CustomData_MeshMasks *cd_mask_extra)
void BM_mesh_bm_from_me(BMesh *bm, const Mesh *me, const struct BMeshFromMeshParams *params)
void BM_mesh_bm_to_me(Main *bmain, BMesh *bm, Mesh *me, const struct BMeshToMeshParams *params)
ATTR_WARN_UNUSED_RESULT const BMVert * v2
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
void CustomData_blend_write(BlendWriter *writer, CustomData *data, Span< CustomDataLayer > layers_to_write, int count, eCustomDataMask cddata_mask, ID *id)
void CustomData_blend_write_prepare(CustomData &data, Vector< CustomDataLayer, 16 > &layers_to_write)
const Depsgraph * depsgraph
CCL_NAMESPACE_BEGIN ccl_device float invert(float color, float factor)
ccl_gpu_kernel_postfix ccl_global float int int int int float bool int offset
ccl_gpu_kernel_postfix int ccl_global int * indices
void *(* MEM_malloc_arrayN)(size_t len, size_t size, const char *str)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_dupallocN)(const void *vmemh)
void *(* MEM_calloc_arrayN)(size_t len, size_t size, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)
void BKE_mesh_material_remap(Mesh *me, const uint *remap, uint remap_len)
void BKE_mesh_smooth_flag_set(Mesh *me, const bool use_smooth)
void BKE_mesh_mselect_validate(Mesh *me)
void BKE_mesh_texspace_get_reference(Mesh *me, char **r_texflag, float **r_loc, float **r_size)
void BKE_mesh_texspace_calc(Mesh *me)
void BKE_mesh_update_customdata_pointers(Mesh *me, const bool do_ensure_tess_cd)
Mesh * BKE_mesh_from_bmesh_for_eval_nomain(BMesh *bm, const CustomData_MeshMasks *cd_mask_extra, const Mesh *me_settings)
static const char * cmpcode_to_str(int code)
void BKE_mesh_translate(Mesh *me, const float offset[3], const bool do_keys)
bool BKE_mesh_clear_facemap_customdata(struct Mesh *me)
static void mesh_read_expand(BlendExpander *expander, ID *id)
void BKE_mesh_copy_parameters_for_eval(Mesh *me_dst, const Mesh *me_src)
void BKE_mesh_vert_coords_apply(Mesh *mesh, const float(*vert_coords)[3])
void BKE_mesh_texspace_copy_from_object(Mesh *me, Object *ob)
bool BKE_mesh_material_index_used(Mesh *me, short index)
void BKE_mesh_tessface_clear(Mesh *mesh)
void BKE_mesh_free_editmesh(struct Mesh *mesh)
Mesh * BKE_mesh_new_nomain_from_template(const Mesh *me_src, int verts_len, int edges_len, int tessface_len, int loops_len, int polys_len)
const char * BKE_mesh_cmp(Mesh *me1, Mesh *me2, float thresh)
Mesh * BKE_mesh_from_bmesh_nomain(BMesh *bm, const struct BMeshToMeshParams *params, const Mesh *me_settings)
Mesh * BKE_mesh_add(Main *bmain, const char *name)
Mesh * BKE_mesh_new_nomain_from_template_ex(const Mesh *me_src, int verts_len, int edges_len, int tessface_len, int loops_len, int polys_len, CustomData_MeshMasks mask)
int poly_get_adj_loops_from_vert(const MPoly *poly, const MLoop *mloop, uint vert, uint r_adj[2])
static void mesh_clear_geometry(Mesh *mesh)
void BKE_mesh_ensure_skin_customdata(Mesh *me)
void BKE_mesh_transform(Mesh *me, const float mat[4][4], bool do_keys)
static void split_faces_split_new_verts(Mesh *mesh, SplitFaceNewVert *new_verts, const int num_new_verts)
static void mesh_ensure_cdlayers_primary(Mesh *mesh, bool do_tessface)
void BKE_mesh_looptri_get_real_edges(const Mesh *mesh, const MLoopTri *looptri, int r_edges[3])
bool BKE_mesh_ensure_facemap_customdata(struct Mesh *me)
static void mesh_blend_write(BlendWriter *writer, ID *id, const void *id_address)
float(* BKE_mesh_vert_coords_alloc(const Mesh *mesh, int *r_vert_len))[3]
void BKE_mesh_orco_ensure(Object *ob, Mesh *mesh)
static int split_faces_prepare_new_edges(const Mesh *mesh, SplitFaceNewEdge **new_edges, MemArena *memarena)
static void mesh_foreach_path(ID *id, BPathForeachPathData *bpath_data)
void BKE_mesh_eval_delete(struct Mesh *mesh_eval)
void BKE_mesh_count_selected_items(const Mesh *mesh, int r_count[3])
void BKE_mesh_split_faces(Mesh *mesh, bool free_loop_normals)
static void mesh_update_linked_customdata(Mesh *me, const bool do_ensure_tess_cd)
Mesh * BKE_mesh_from_object(Object *ob)
int poly_find_loop_from_vert(const MPoly *poly, const MLoop *loopstart, uint vert)
static void mesh_blend_read_lib(BlendLibReader *reader, ID *id)
BoundBox * BKE_mesh_boundbox_get(Object *ob)
void BKE_mesh_copy_parameters(Mesh *me_dst, const Mesh *me_src)
static void split_faces_split_new_edges(Mesh *mesh, SplitFaceNewEdge *new_edges, const int num_new_edges)
void BKE_mesh_calc_normals_split(Mesh *mesh)
Mesh * BKE_mesh_copy_for_eval(const Mesh *source, bool reference)
void BKE_mesh_vert_coords_apply_with_mat4(Mesh *mesh, const float(*vert_coords)[3], const float mat[4][4])
void BKE_mesh_mselect_active_set(Mesh *me, int index, int type)
static void mesh_free_data(ID *id)
void BKE_mesh_vert_coords_get(const Mesh *mesh, float(*vert_coords)[3])
void BKE_mesh_calc_normals_split_ex(Mesh *mesh, MLoopNorSpaceArray *r_lnors_spacearr, float(*r_corner_normals)[3])
BMesh * BKE_mesh_to_bmesh(Mesh *me, Object *ob, const bool add_key_index, const struct BMeshCreateParams *params)
static void ensure_orig_index_layer(CustomData &data, const int size)
static int split_faces_prepare_new_verts(Mesh *mesh, MLoopNorSpaceArray *lnors_spacearr, SplitFaceNewVert **new_verts, MemArena *memarena)
static void mesh_blend_read_data(BlendDataReader *reader, ID *id)
void BKE_mesh_mselect_clear(Mesh *me)
int BKE_mesh_edge_other_vert(const MEdge *e, int v)
static void mesh_init_data(ID *id)
static void mesh_foreach_id(ID *id, LibraryForeachIDData *data)
static float(* ensure_corner_normal_layer(Mesh &mesh))[3]
static void mesh_ensure_tessellation_customdata(Mesh *me)
Mesh * BKE_mesh_new_nomain(int verts_len, int edges_len, int tessface_len, int loops_len, int polys_len)
void BKE_mesh_texspace_get(Mesh *me, float r_loc[3], float r_size[3])
bool BKE_mesh_has_custom_loop_normals(Mesh *me)
void BKE_mesh_texspace_ensure(Mesh *me)
int BKE_mesh_mselect_active_get(Mesh *me, int type)
static void mesh_tessface_clear_intern(Mesh *mesh, int free_customdata)
void BKE_mesh_free_data_for_undo(Mesh *me)
static void mesh_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const int flag)
int BKE_mesh_mselect_find(Mesh *me, int index, int type)
bool BKE_mesh_minmax(const Mesh *me, float r_min[3], float r_max[3])
void BKE_mesh_eval_geometry(Depsgraph *depsgraph, Mesh *mesh)
void BKE_mesh_clear_geometry(Mesh *mesh)
float(* BKE_mesh_orco_verts_get(Object *ob))[3]
@ MESHCMP_DVERT_TOTGROUPMISMATCH
@ MESHCMP_CDLAYERS_MISMATCH
@ MESHCMP_DVERT_WEIGHTMISMATCH
@ MESHCMP_LOOPCOLMISMATCH
@ MESHCMP_DVERT_GROUPMISMATCH
@ MESHCMP_ATTRIBUTE_VALUE_MISMATCH
@ MESHCMP_POLYVERTMISMATCH
void BKE_mesh_auto_smooth_flag_set(Mesh *me, const bool use_auto_smooth, const float auto_smooth_angle)
void BKE_mesh_material_index_clear(Mesh *me)
void BKE_mesh_ensure_default_orig_index_customdata(Mesh *mesh)
void BKE_mesh_orco_verts_transform(Mesh *me, float(*orco)[3], int totvert, int invert)
void BKE_mesh_assign_object(Main *bmain, Object *ob, Mesh *me)
static int customdata_compare(CustomData *c1, CustomData *c2, const int total_length, Mesh *m1, Mesh *m2, const float thresh)
void BKE_mesh_do_versions_cd_flag_init(Mesh *mesh)
BMesh * BKE_mesh_to_bmesh_ex(const Mesh *me, const struct BMeshCreateParams *create_params, const struct BMeshFromMeshParams *convert_params)
void BKE_mesh_ensure_default_orig_index_customdata_no_check(Mesh *mesh)
void BKE_mesh_material_index_remove(Mesh *me, short index)
static MEdge new_edge(const int v1, const int v2)
Value parallel_reduce(IndexRange range, int64_t grain_size, const Value &identity, const Function &function, const Reduction &reduction)
vec_base< float, 3 > float3
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
unsigned __int64 uint64_t
const struct AnonymousAttributeID * anonymous_id
CustomDataExternal * external
MLoopNorSpace ** lspacearr
uint32_t * subsurf_face_dot_tags
struct BMEditMesh * edit_mesh
float remesh_voxel_adaptivity
struct MLoopCol * mloopcol
struct MDeformVert * dvert
ListBase vertex_group_names
int vertex_group_active_index
int face_sets_color_default
struct SplitFaceNewEdge * next
struct SplitFaceNewVert * next
long int PIL_check_seconds_timer_i(void)