39 #define DNA_DEPRECATED_ALLOW
73 Key *key_dst = (
Key *)id_dst;
74 const Key *key_src = (
const Key *)id_src;
79 kb_src = kb_src->
next, kb_dst = kb_dst->
next) {
83 if (kb_src == key_src->
refkey) {
112 if (key->
id.
us > 0 || is_undo) {
139 #define IPO_BEZTRIPLE 100
140 #define IPO_BPOINT 101
158 poin +=
sizeof(
float) * b;
207 .struct_size =
sizeof(
Key),
209 .name_plural =
"shape_keys",
218 .foreach_cache =
NULL,
226 .blend_read_undo_preserve =
NULL,
228 .lib_override_apply_post =
NULL,
231 #define KEY_MODE_DUMMY 0
232 #define KEY_MODE_BPOINT 1
233 #define KEY_MODE_BEZTRIPLE 2
363 data[0] = -fc * t3 + 2.0f * fc * t2 - fc *
t;
364 data[1] = (2.0f - fc) * t3 + (fc - 3.0f) * t2 + 1.0f;
365 data[2] = (fc - 2.0f) * t3 + (3.0f - 2.0f * fc) * t2 + fc *
t;
366 data[3] = fc * t3 - fc * t2;
372 data[0] = -0.16666666f * t3 + 0.5f * t2 - 0.5f *
t + 0.16666666f;
373 data[1] = 0.5f * t3 - t2 + 0.66666666f;
374 data[2] = -0.5f * t3 + 0.5f * t2 + 0.5f *
t + 0.16666666f;
375 data[3] = 0.16666666f * t3;
382 data[0] = -fc * t3 + 2.0f * fc * t2 - fc *
t;
383 data[1] = (2.0f - fc) * t3 + (fc - 3.0f) * t2 + 1.0f;
384 data[2] = (fc - 2.0f) * t3 + (3.0f - 2.0f * fc) * t2 + fc *
t;
385 data[3] = fc * t3 - fc * t2;
404 data[0] = -3.0f * fc * t2 + 4.0f * fc *
t - fc;
405 data[1] = 3.0f * (2.0f - fc) * t2 + 2.0f * (fc - 3.0f) *
t;
406 data[2] = 3.0f * (fc - 2.0f) * t2 + 2.0f * (3.0f - 2.0f * fc) *
t + fc;
407 data[3] = 3.0f * fc * t2 - 2.0f * fc *
t;
412 data[0] = -0.5f * t2 +
t - 0.5f;
413 data[1] = 1.5f * t2 -
t * 2.0f;
414 data[2] = -1.5f * t2 +
t + 0.5f;
421 data[0] = -3.0f * fc * t2 + 4.0f * fc *
t - fc;
422 data[1] = 3.0f * (2.0f - fc) * t2 + 2.0f * (fc - 3.0f) *
t;
423 data[2] = 3.0f * (fc - 2.0f) * t2 + 2.0f * (3.0f - 2.0f * fc) *
t + fc;
424 data[3] = 3.0f * fc * t2 - 2.0f * fc *
t;
442 data[0] = -6.0f * fc *
t + 4.0f * fc;
443 data[1] = 6.0f * (2.0f - fc) *
t + 2.0f * (fc - 3.0f);
444 data[2] = 6.0f * (fc - 2.0f) *
t + 2.0f * (3.0f - 2.0f * fc);
445 data[3] = 6.0f * fc *
t - 2.0f * fc;
448 data[0] = -1.0f *
t + 1.0f;
449 data[1] = 3.0f *
t - 2.0f;
450 data[2] = -3.0f *
t + 1.0f;
456 data[0] = -6.0f * fc *
t + 4.0f * fc;
457 data[1] = 6.0f * (2.0f - fc) *
t + 2.0f * (fc - 3.0f);
458 data[2] = 6.0f * (fc - 2.0f) *
t + 2.0f * (3.0f - 2.0f * fc);
459 data[3] = 6.0f * fc *
t - 2.0f * fc;
467 float d, dpos, ofs = 0, lastpos;
470 firstkey = lb->
first;
473 dpos = lastpos - firstkey->
pos;
475 if (fac < firstkey->
pos) {
478 else if (fac > k1->
pos) {
482 k1 = k[0] = k[1] = k[2] = k[3] = firstkey;
483 t[0] =
t[1] =
t[2] =
t[3] = k1->
pos;
506 t[2] = k[2]->
pos + dpos;
507 t[3] = k[3]->
pos + dpos;
536 else if (
t[2] ==
t[3]) {
550 t[3] = k1->
pos + ofs;
553 if (ofs > 2.1f + lastpos) {
564 if (bsplinetype == 0) {
574 else if (fac >
t[2]) {
583 if (bsplinetype == 0) {
588 d = (fac -
t[1]) / d;
613 for (
a = 0;
a < tot;
a++) {
614 in[
a] =
t[0] * f0[
a] +
t[1] * f1[
a] +
t[2] * f2[
a] +
t[3] * f3[
a];
618 static void rel_flerp(
int tot,
float *in,
const float *ref,
const float *out,
float fac)
622 for (
a = 0;
a < tot;
a++) {
623 in[
a] -= fac * (ref[
a] - out[
a]);
650 *freedata = (
char *)co;
707 float ktot = 0.0, kd = 0.0;
708 int elemsize, poinsize = 0,
a, step, *ofsp, ofs[32], flagflo = 0;
709 char *k1, *kref, *freek1, *freekref;
710 char *cp, elemstr[8];
740 poin += poinsize * start;
764 for (
a = start;
a < end;
a += step) {
778 if (*weights != 0.0f) {
814 while (ktot >= 1.0f) {
880 float **per_keyblock_weights,
884 int *ofsp, ofs[3], elemsize, b, step;
885 char *cp, *poin, *reffrom, *
from, elemstr[8];
886 int poinsize, keyblock_index;
912 for (kb = key->
block.
first, keyblock_index = 0; kb; kb = kb->
next, keyblock_index++) {
914 float icuval = kb->
curval;
920 *weights = per_keyblock_weights ? per_keyblock_weights[keyblock_index] :
NULL;
921 char *freefrom =
NULL;
934 reffrom = refb->
data;
936 poin += start * poinsize;
940 for (b = start; b < end; b += step) {
942 weight = weights ? (*weights * icuval) : icuval;
1016 float k1tot = 0.0, k2tot = 0.0, k3tot = 0.0, k4tot = 0.0;
1017 float k1d = 0.0, k2d = 0.0, k3d = 0.0, k4d = 0.0;
1018 int a, step, ofs[32], *ofsp;
1019 int flagdo = 15, flagflo = 0, elemsize, poinsize = 0;
1020 char *k1, *k2, *k3, *k4, *freek1, *freek2, *freek3, *freek4;
1021 char *cp, elemstr[8];
1040 if (tot != k[0]->totelem) {
1043 if (k[0]->totelem) {
1050 if (tot != k[1]->totelem) {
1053 if (k[0]->totelem) {
1060 if (tot != k[2]->totelem) {
1063 if (k[0]->totelem) {
1070 if (tot != k[3]->totelem) {
1073 if (k[0]->totelem) {
1084 poin += poinsize * start;
1088 k1tot += start * k1d;
1101 k2tot += start * k2d;
1114 k3tot += start * k3d;
1127 k4tot += start * k4d;
1148 for (
a = start;
a < end;
a += step) {
1212 while (k1tot >= 1.0f) {
1224 while (k2tot >= 1.0f) {
1236 while (k3tot >= 1.0f) {
1248 while (k4tot >= 1.0f) {
1279 int totvert = 0, defgrp_index = 0;
1282 if (vgroup[0] == 0) {
1302 if (dvert ==
NULL) {
1308 if (defgrp_index != -1) {
1315 "cached defgroup weights");
1324 weights =
MEM_mallocN(totvert *
sizeof(
float),
"weights");
1335 for (
int i = 0; i < totvert; i++, dvert++) {
1352 float **per_keyblock_weights;
1356 "per keyblock weights");
1358 for (keyblock = key->
block.
first, keyblock_index = 0; keyblock;
1359 keyblock = keyblock->
next, keyblock_index++) {
1363 return per_keyblock_weights;
1367 float **per_keyblock_weights,
1385 if (per_keyblock_weights[
a]) {
1402 float **per_keyblock_weights;
1405 0, tot, tot, (
char *)out, key, actkb, per_keyblock_weights,
KEY_MODE_DUMMY);
1409 const float ctime_scaled = key->
ctime / 100.0f;
1433 else if (nu->
bezt) {
1453 else if (nu->
bezt) {
1474 const float ctime_scaled = key->
ctime / 100.0f;
1482 cp_cu_key(cu, key, actkb, k[2], 0, tot, out, tot);
1495 float **per_keyblock_weights;
1498 0, tot, tot, (
char *)out, key, actkb, per_keyblock_weights,
KEY_MODE_DUMMY);
1502 const float ctime_scaled = key->
ctime / 100.0f;
1525 int tot = 0,
size = 0;
1552 if (tot == 0 ||
size == 0) {
1561 if (arr_size !=
size) {
1584 cp_key(0, tot, tot, out, key, actkb, kb, weights, 0);
1613 return (
float *)out;
1629 if (
ELEM(shape_index, -1, index)) {
1669 if (
ELEM(shape_index, -1, index)) {
1670 const int block_elem_len = kb->totelem * key->
elemsize;
1671 memcpy(elements, kb->data, block_elem_len);
1672 elements += block_elem_len;
1686 const int shape_index,
1687 const float (*coords)[3],
1688 const float mat[4][4])
1690 if (key->
elemsize !=
sizeof(
float[3])) {
1695 const float(*elements)[3] = coords;
1699 if (
ELEM(shape_index, -1, index)) {
1700 const int block_elem_len = kb->totelem;
1701 float(*block_data)[3] = (
float(*)[3])kb->data;
1702 for (
int data_offset = 0; data_offset < block_elem_len; ++data_offset) {
1703 const float *src_data = (
const float *)(elements + data_offset);
1704 float *dst_data = (
float *)(block_data + data_offset);
1707 elements += block_elem_len;
1717 Key *key,
const ListBase *nurb,
const int shape_index,
const void *
data,
const float mat[4][4])
1723 if (
ELEM(shape_index, -1, index)) {
1724 const int block_elem_size = kb->totelem * key->
elemsize;
1726 elements += block_elem_size;
1739 if (
ELEM(shape_index, -1, index)) {
1740 const int block_elem_size = kb->totelem * key->
elemsize;
1741 memcpy(kb->data, elements, block_elem_size);
1742 elements += block_elem_size;
1820 float curpos = -0.1;
1860 kb->
pos = curpos + 0.1f;
1876 const float cpos = key->
ctime / 100.0f;
1931 for (
int i = 1; i < key->
totkey; i++) {
1954 kb_dst->
pos = kb_src->
pos;
2003 for (
a = 0;
a < kb->
totelem;
a++, fp++, bp++) {
2028 const float(*fp)[3];
2037 for (
a = 0;
a < tot;
a++, fp++, bp++) {
2080 for (nu = nurb->
first; nu; nu = nu->
next) {
2083 for (
int i = 0; i < 3; i++) {
2103 const float mat[4][4],
2104 const void *src_data,
2107 const float *src = src_data;
2108 float *dst = dst_data;
2109 for (
Nurb *nu = nurb->
first; nu; nu = nu->next) {
2111 for (
int a = nu->pntsu;
a;
a--) {
2112 for (
int i = 0; i < 3; i++) {
2122 for (
int a = nu->pntsu * nu->pntsv;
a;
a--) {
2163 for (nu = nurb->
first; nu && tot > 0; nu = nu->
next) {
2167 for (
int i = 0; i < 3; i++) {
2203 for (
a = 0;
a < tot;
a++, fp++, mvert++) {
2227 const float(*fp)[3];
2235 for (
a = 0;
a < tot;
a++, fp++, mvert++) {
2251 float (*r_vertnors)[3],
2252 float (*r_polynors)[3],
2253 float (*r_loopnors)[3])
2257 bool free_polynors =
false;
2259 if (r_vertnors ==
NULL && r_polynors ==
NULL && r_loopnors ==
NULL) {
2273 if (r_polynors ==
NULL && r_loopnors !=
NULL) {
2275 free_polynors =
true;
2314 if (free_polynors) {
2322 const float(*co)[3] = vertCos;
2323 float *fp = kb->
data;
2351 for (
a = 0;
a < tot;
a++, fp += 3, co++) {
2361 for (nu = cu->
nurb.
first; nu; nu = nu->next) {
2363 for (
a = nu->pntsu, bezt = nu->bezt;
a;
a--, bezt++) {
2364 for (
int i = 0; i < 3; i++, co++) {
2371 for (
a = nu->pntsu * nu->pntsv, bp = nu->bp;
a;
a--, bp++, co++) {
2382 int tot = 0, elemsize;
2415 float(*vertCos)[3], (*co)[3];
2416 const float *fp = kb->
data;
2437 co = vertCos =
MEM_mallocN(tot *
sizeof(*vertCos), __func__);
2441 for (
a = 0;
a < tot;
a++, fp += 3, co++) {
2451 for (nu = cu->
nurb.
first; nu; nu = nu->next) {
2453 for (
a = nu->pntsu, bezt = nu->bezt;
a;
a--, bezt++) {
2454 for (
int i = 0; i < 3; i++, co++) {
2461 for (
a = nu->pntsu * nu->pntsv, bp = nu->bp;
a;
a--, bp++, co++) {
2476 float *fp = kb->
data;
2479 for (
a = 0;
a < kb->
totelem;
a++, fp += 3, ofs++) {
2489 for (nu = cu->
nurb.
first; nu; nu = nu->next) {
2491 for (
a = nu->pntsu, bezt = nu->bezt;
a;
a--, bezt++) {
2492 for (
int i = 0; i < 3; i++, ofs++) {
2499 for (
a = nu->pntsu * nu->pntsv, bp = nu->bp;
a;
a--, bp++, ofs++) {
2523 const int act_index = ob->
shapenr - 1;
2524 const int totkey = key->
totkey;
2526 bool rev, in_range =
false;
2528 if (org_index < 0) {
2529 org_index = act_index;
2535 if (new_index == org_index) {
2539 rev = ((new_index - org_index) < 0) ? true :
false;
2545 kb = (rev ? kb->
prev : kb->
next), rev ? i-- : i++) {
2546 if (i == org_index) {
2549 else if (i == new_index) {
2581 if (org_index == act_index) {
2584 else if (act_index < org_index && act_index >= new_index) {
2587 else if (act_index > org_index && act_index <= new_index) {
2607 if ((i != index) && (kb->
relative == index)) {
typedef float(TangentPoint)[2]
void BKE_animdata_blend_read_data(struct BlendDataReader *reader, struct AnimData *adt)
void BKE_animdata_blend_write(struct BlendWriter *writer, struct AnimData *adt)
int BKE_nurbList_verts_count(const struct ListBase *nurb)
CustomData interface, see also DNA_customdata_types.h.
void CustomData_free(struct CustomData *data, int totelem)
void * CustomData_get_layer(const struct CustomData *data, int type)
int CustomData_get_offset(const struct CustomData *data, int type)
void CustomData_reset(struct CustomData *data)
@ IDTYPE_FLAGS_NO_MAKELOCAL
@ IDTYPE_FLAGS_NO_LIBLINKING
void outside_lattice(struct Lattice *lt)
void BKE_id_blend_write(struct BlendWriter *writer, struct ID *id)
void * BKE_id_new(struct Main *bmain, const short type, const char *name)
#define BKE_LIB_FOREACHID_PROCESS_ID(_data, _id, _cb_flag)
void BKE_mesh_normals_loop_split(const struct MVert *mverts, const int numVerts, struct MEdge *medges, const int numEdges, struct MLoop *mloops, float(*r_loopnors)[3], const int numLoops, struct MPoly *mpolys, const float(*polynors)[3], const int numPolys, const bool use_split_normals, const float split_angle, MLoopNorSpaceArray *r_lnors_spacearr, short(*clnors_data)[2], int *r_loop_to_poly)
void BKE_mesh_calc_normals_poly(struct MVert *mverts, float(*r_vertnors)[3], int numVerts, const struct MLoop *mloop, const struct MPoly *mpolys, int numLoops, int numPolys, float(*r_polyNors)[3], const bool only_face_normals)
void BLI_endian_switch_float_array(float *val, const int size) ATTR_NONNULL(1)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
void * BLI_pophead(ListBase *listbase) ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
void void void void void BLI_duplicatelist(struct ListBase *dst, const struct ListBase *src) ATTR_NONNULL(1
void BLI_insertlinkafter(struct ListBase *listbase, void *vprevlink, void *vnewlink) ATTR_NONNULL(1)
void * BLI_findstring(const struct ListBase *listbase, const char *id, const int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
int BLI_listbase_count(const struct ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_listbase_swaplinks(struct ListBase *listbase, void *vlinka, void *vlinkb) ATTR_NONNULL(1
MINLINE int min_ii(int a, int b)
MINLINE int compare_ff(float a, float b, const float max_diff)
MINLINE int max_ii(int a, int b)
void mul_v3_m4v3(float r[3], const float M[4][4], const float v[3])
void interp_v4_v4v4(float r[4], const float a[4], const float b[4], const float t)
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE void add_v3_v3(float r[3], const float a[3])
size_t BLI_snprintf(char *__restrict dst, size_t maxncpy, const char *__restrict format,...) ATTR_NONNULL(1
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, const size_t maxncpy) ATTR_NONNULL()
bool BLI_uniquename(struct ListBase *list, void *vlink, const char *defname, char delim, int name_offset, size_t len)
#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)
bool BLO_write_is_undo(BlendWriter *writer)
#define BLO_write_struct_at_address(writer, struct_name, address, data_ptr)
#define BLT_I18NCONTEXT_ID_SHAPEKEY
ID and Library types, which are fundamental for sdna.
#define ID_IS_OVERRIDE_LIBRARY(_id)
#define KEYELEM_FLOAT_LEN_COORD
#define KEYELEM_ELEM_LEN_BPOINT
#define KEYELEM_FLOAT_LEN_BEZTRIPLE
#define KEYELEM_ELEM_SIZE_CURVE
#define KEYELEM_FLOAT_LEN_BPOINT
#define KEYELEM_ELEM_LEN_BEZTRIPLE
Object is a sort of wrapper for general info.
#define OB_TYPE_SUPPORT_VGROUP(_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 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 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 GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble t
Read Guarded memory(de)allocation.
static void init_data(ModifierData *md)
Group RGB to Bright Vector Camera CLAMP
#define BM_ELEM_CD_GET_VOID_P(ele, offset)
#define BM_ITER_MESH(ele, iter, bm, itype)
#define BM_ITER_MESH_INDEX(ele, iter, bm, itype, indexvar)
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
static void shapekey_blend_read_data(BlendDataReader *reader, ID *id)
float(* BKE_keyblock_convert_to_vertcos(Object *ob, KeyBlock *kb))[3]
void BKE_keyblock_data_set_with_mat4(Key *key, const int shape_index, const float(*coords)[3], const float mat[4][4])
void key_curve_normal_weights(float t, float data[4], int type)
void BKE_keyblock_convert_to_lattice(KeyBlock *kb, Lattice *lt)
KeyBlock * BKE_keyblock_from_object(Object *ob)
static void key_evaluate_relative(const int start, int end, const int tot, char *basispoin, Key *key, KeyBlock *actkb, float **per_keyblock_weights, const int mode)
void BKE_keyblock_convert_to_curve(KeyBlock *kb, Curve *UNUSED(cu), ListBase *nurb)
bool BKE_keyblock_is_basis(Key *key, const int index)
void BKE_keyblock_curve_data_transform(const ListBase *nurb, const float mat[4][4], const void *src_data, void *dst_data)
void BKE_keyblock_update_from_offset(Object *ob, KeyBlock *kb, const float(*ofs)[3])
static void flerp(int tot, float *in, const float *f0, const float *f1, const float *f2, const float *f3, const float *t)
static float ** keyblock_get_per_block_weights(Object *ob, Key *key, WeightsArrayCache *cache)
void BKE_keyblock_update_from_lattice(Lattice *lt, KeyBlock *kb)
void BKE_key_free(Key *key)
void BKE_keyblock_convert_to_mesh(KeyBlock *kb, Mesh *me)
char * BKE_keyblock_curval_rnapath_get(Key *key, KeyBlock *kb)
KeyBlock * BKE_keyblock_find_name(Key *key, const char name[])
void BKE_keyblock_curve_data_set_with_mat4(Key *key, const ListBase *nurb, const int shape_index, const void *data, const float mat[4][4])
size_t BKE_keyblock_element_calc_size_from_shape(const Key *key, const int shape_index)
void BKE_key_free_nolib(Key *key)
void BKE_keyblock_mesh_calc_normals(struct KeyBlock *kb, struct Mesh *mesh, float(*r_vertnors)[3], float(*r_polynors)[3], float(*r_loopnors)[3])
static float * get_weights_array(Object *ob, char *vgroup, WeightsArrayCache *cache)
KeyBlock * BKE_keyblock_from_object_reference(Object *ob)
KeyBlock * BKE_keyblock_add(Key *key, const char *name)
int BKE_keyblock_element_count_from_shape(const Key *key, const int shape_index)
KeyBlock * BKE_keyblock_from_key(Key *key, int index)
bool BKE_key_idtype_support(const short id_type)
static void keyblock_free_per_block_weights(Key *key, float **per_keyblock_weights, WeightsArrayCache *cache)
bool BKE_keyblock_move(Object *ob, int org_index, int new_index)
static void shapekey_foreach_id(ID *id, LibraryForeachIDData *data)
Key * BKE_key_add(Main *bmain, ID *id)
void BKE_keyblock_data_set(Key *key, const int shape_index, const void *data)
static void do_rel_cu_key(Curve *cu, Key *key, KeyBlock *actkb, char *out, const int tot)
void BKE_keyblock_convert_from_vertcos(Object *ob, KeyBlock *kb, const float(*vertCos)[3])
static void do_key(const int start, int end, const int tot, char *poin, Key *key, KeyBlock *actkb, KeyBlock **k, float *t, const int mode)
Key ** BKE_key_from_object_p(const Object *ob)
struct WeightsArrayCache WeightsArrayCache
static void shapekey_blend_read_expand(BlendExpander *expander, ID *id)
float * BKE_key_evaluate_object(Object *ob, int *r_totelem)
void BKE_keyblock_data_get(const Key *key, float(*arr)[3])
Key * BKE_key_from_object(const Object *ob)
static void switch_endian_keyblock(Key *key, KeyBlock *kb)
size_t BKE_keyblock_element_calc_size(const Key *key)
void BKE_keyblock_update_from_vertcos(Object *ob, KeyBlock *kb, const float(*vertCos)[3])
void BKE_keyblock_convert_from_mesh(Mesh *me, Key *key, KeyBlock *kb)
static void do_curve_key(Object *ob, Key *key, char *out, const int tot)
void BKE_keyblock_copy_settings(KeyBlock *kb_dst, const KeyBlock *kb_src)
copy shape-key attributes, but not key data.or name/uid
#define KEY_MODE_BEZTRIPLE
void BKE_keyblock_update_from_curve(Curve *UNUSED(cu), KeyBlock *kb, ListBase *nurb)
void key_curve_tangent_weights(float t, float data[4], int type)
static void do_mesh_key(Object *ob, Key *key, char *out, const int tot)
static void do_latt_key(Object *ob, Key *key, char *out, const int tot)
KeyBlock * BKE_keyblock_add_ctime(Key *key, const char *name, const bool do_force)
int BKE_keyblock_curve_element_count(ListBase *nurb)
static char * key_block_get_data(Key *key, KeyBlock *actkb, KeyBlock *kb, char **freedata)
static void cp_key(const int start, int end, const int tot, char *poin, Key *key, KeyBlock *actkb, KeyBlock *kb, float *weights, const int mode)
static void shapekey_blend_write(BlendWriter *writer, ID *id, const void *id_address)
void BKE_keyblock_convert_from_curve(Curve *cu, KeyBlock *kb, ListBase *nurb)
int BKE_keyblock_element_count(const Key *key)
static void rel_flerp(int tot, float *in, const float *ref, const float *out, float fac)
static void shapekey_copy_data(Main *UNUSED(bmain), ID *id_dst, const ID *id_src, const int UNUSED(flag))
float * BKE_key_evaluate_object_ex(Object *ob, int *r_totelem, float *arr, size_t arr_size)
static void do_cu_key(Curve *cu, Key *key, KeyBlock *actkb, KeyBlock **k, float *t, char *out, const int tot)
Key ** BKE_key_from_id_p(ID *id)
void BKE_keyblock_update_from_mesh(Mesh *me, KeyBlock *kb)
static bool key_pointer_size(const Key *key, const int mode, int *poinsize, int *ofs, int *step)
static int setkeys(float fac, ListBase *lb, KeyBlock *k[], float t[4], int cycl)
void BKE_key_sort(Key *key)
static void cp_cu_key(Curve *cu, Key *key, KeyBlock *actkb, KeyBlock *kb, const int start, int end, char *out, const int tot)
static void shapekey_free_data(ID *id)
void key_curve_position_weights(float t, float data[4], int type)
void BKE_keyblock_convert_from_lattice(Lattice *lt, KeyBlock *kb)
Key * BKE_key_from_id(ID *id)
void BKE_keyblock_data_get_from_shape(const Key *key, float(*arr)[3], const int shape_index)
static void shapekey_blend_read_lib(BlendLibReader *reader, ID *id)
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_callocN)(size_t len, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
void RNA_pointer_create(ID *id, StructRNA *type, void *data, PointerRNA *r_ptr)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
char * RNA_path_from_ID_to_property(PointerRNA *ptr, PropertyRNA *prop)
struct MDeformVert * dvert
struct BMEditMesh * edit_mesh
struct CustomData pdata ldata
struct MDeformVert * dvert
struct CustomData vdata edata fdata
float ** defgroup_weights
ccl_device_inline float2 floor(const float2 &a)