23 #define DNA_DEPRECATED_ALLOW
50 #include "RNA_prototypes.h"
59 Key *key_dst = (
Key *)id_dst;
60 const Key *key_src = (
const Key *)id_src;
65 kb_src = kb_src->
next, kb_dst = kb_dst->
next) {
69 if (kb_src == key_src->
refkey) {
96 return ((
Key *)
id)->from;
129 #define IPO_BEZTRIPLE 100
130 #define IPO_BPOINT 101
148 poin +=
sizeof(
float) *
b;
197 .struct_size =
sizeof(
Key),
199 .name_plural =
"shape_keys",
202 .asset_type_info =
NULL,
209 .foreach_cache =
NULL,
210 .foreach_path =
NULL,
220 .blend_read_undo_preserve =
NULL,
222 .lib_override_apply_post =
NULL,
225 #define KEY_MODE_DUMMY 0
226 #define KEY_MODE_BPOINT 1
227 #define KEY_MODE_BEZTRIPLE 2
351 data[0] = -fc * t3 + 2.0f * fc * t2 - fc *
t;
352 data[1] = (2.0f - fc) * t3 + (fc - 3.0f) * t2 + 1.0f;
353 data[2] = (fc - 2.0f) * t3 + (3.0f - 2.0f * fc) * t2 + fc *
t;
354 data[3] = fc * t3 - fc * t2;
360 data[0] = -0.16666666f * t3 + 0.5f * t2 - 0.5f *
t + 0.16666666f;
361 data[1] = 0.5f * t3 - t2 + 0.66666666f;
362 data[2] = -0.5f * t3 + 0.5f * t2 + 0.5f *
t + 0.16666666f;
363 data[3] = 0.16666666f * t3;
370 data[0] = -fc * t3 + 2.0f * fc * t2 - fc *
t;
371 data[1] = (2.0f - fc) * t3 + (fc - 3.0f) * t2 + 1.0f;
372 data[2] = (fc - 2.0f) * t3 + (3.0f - 2.0f * fc) * t2 + fc *
t;
373 data[3] = fc * t3 - fc * t2;
391 data[0] = -3.0f * fc * t2 + 4.0f * fc *
t - fc;
392 data[1] = 3.0f * (2.0f - fc) * t2 + 2.0f * (fc - 3.0f) *
t;
393 data[2] = 3.0f * (fc - 2.0f) * t2 + 2.0f * (3.0f - 2.0f * fc) *
t + fc;
394 data[3] = 3.0f * fc * t2 - 2.0f * fc *
t;
399 data[0] = -0.5f * t2 +
t - 0.5f;
400 data[1] = 1.5f * t2 -
t * 2.0f;
401 data[2] = -1.5f * t2 +
t + 0.5f;
408 data[0] = -3.0f * fc * t2 + 4.0f * fc *
t - fc;
409 data[1] = 3.0f * (2.0f - fc) * t2 + 2.0f * (fc - 3.0f) *
t;
410 data[2] = 3.0f * (fc - 2.0f) * t2 + 2.0f * (3.0f - 2.0f * fc) *
t + fc;
411 data[3] = 3.0f * fc * t2 - 2.0f * fc *
t;
428 data[0] = -6.0f * fc *
t + 4.0f * fc;
429 data[1] = 6.0f * (2.0f - fc) *
t + 2.0f * (fc - 3.0f);
430 data[2] = 6.0f * (fc - 2.0f) *
t + 2.0f * (3.0f - 2.0f * fc);
431 data[3] = 6.0f * fc *
t - 2.0f * fc;
434 data[0] = -1.0f *
t + 1.0f;
435 data[1] = 3.0f *
t - 2.0f;
436 data[2] = -3.0f *
t + 1.0f;
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;
453 float d, dpos, ofs = 0, lastpos;
456 firstkey = lb->
first;
459 dpos = lastpos - firstkey->
pos;
461 if (fac < firstkey->
pos) {
464 else if (fac > k1->
pos) {
468 k1 = k[0] = k[1] = k[2] = k[3] = firstkey;
469 t[0] =
t[1] =
t[2] =
t[3] = k1->
pos;
492 t[2] = k[2]->
pos + dpos;
493 t[3] = k[3]->
pos + dpos;
522 else if (
t[2] ==
t[3]) {
536 t[3] = k1->
pos + ofs;
539 if (ofs > 2.1f + lastpos) {
550 if (bsplinetype == 0) {
560 else if (fac >
t[2]) {
569 if (bsplinetype == 0) {
574 d = (fac -
t[1]) / d;
599 for (
a = 0;
a < tot;
a++) {
600 in[
a] =
t[0] * f0[
a] +
t[1] * f1[
a] +
t[2] * f2[
a] +
t[3] * f3[
a];
604 static void rel_flerp(
int tot,
float *in,
const float *ref,
const float *
out,
float fac)
608 for (
a = 0;
a < tot;
a++) {
609 in[
a] -= fac * (ref[
a] -
out[
a]);
636 *freedata = (
char *)co;
693 float ktot = 0.0, kd = 0.0;
694 int elemsize, poinsize = 0,
a, step, *ofsp, ofs[32], flagflo = 0;
695 char *k1, *kref, *freek1, *freekref;
696 char *cp, elemstr[8];
726 poin += poinsize * start;
750 for (
a = start;
a < end;
a += step) {
764 if (*weights != 0.0f) {
800 while (ktot >= 1.0f) {
866 float **per_keyblock_weights,
870 int *ofsp, ofs[3], elemsize,
b, step;
871 char *cp, *poin, *reffrom, *
from, elemstr[8];
872 int poinsize, keyblock_index;
898 for (kb = key->
block.
first, keyblock_index = 0; kb; kb = kb->
next, keyblock_index++) {
900 float icuval = kb->
curval;
906 *weights = per_keyblock_weights ? per_keyblock_weights[keyblock_index] :
NULL;
907 char *freefrom =
NULL;
920 reffrom = refb->
data;
922 poin += start * poinsize;
926 for (
b = start;
b < end;
b += step) {
928 weight = weights ? (*weights * icuval) : icuval;
1002 float k1tot = 0.0, k2tot = 0.0, k3tot = 0.0, k4tot = 0.0;
1003 float k1d = 0.0, k2d = 0.0, k3d = 0.0, k4d = 0.0;
1004 int a, step, ofs[32], *ofsp;
1005 int flagdo = 15, flagflo = 0, elemsize, poinsize = 0;
1006 char *k1, *k2, *k3, *k4, *freek1, *freek2, *freek3, *freek4;
1007 char *cp, elemstr[8];
1026 if (tot != k[0]->totelem) {
1029 if (k[0]->totelem) {
1036 if (tot != k[1]->totelem) {
1039 if (k[0]->totelem) {
1046 if (tot != k[2]->totelem) {
1049 if (k[0]->totelem) {
1056 if (tot != k[3]->totelem) {
1059 if (k[0]->totelem) {
1070 poin += poinsize * start;
1074 k1tot += start * k1d;
1087 k2tot += start * k2d;
1100 k3tot += start * k3d;
1113 k4tot += start * k4d;
1134 for (
a = start;
a < end;
a += step) {
1198 while (k1tot >= 1.0f) {
1210 while (k2tot >= 1.0f) {
1222 while (k3tot >= 1.0f) {
1234 while (k4tot >= 1.0f) {
1265 int totvert = 0, defgrp_index = 0;
1268 if (vgroup[0] == 0) {
1288 if (dvert ==
NULL) {
1294 if (defgrp_index != -1) {
1301 "cached defgroup weights");
1310 weights =
MEM_mallocN(totvert *
sizeof(
float),
"weights");
1321 for (
int i = 0; i < totvert; i++, dvert++) {
1338 float **per_keyblock_weights;
1342 "per keyblock weights");
1344 for (keyblock = key->
block.
first, keyblock_index = 0; keyblock;
1345 keyblock = keyblock->
next, keyblock_index++) {
1349 return per_keyblock_weights;
1353 float **per_keyblock_weights,
1371 if (per_keyblock_weights[
a]) {
1388 float **per_keyblock_weights;
1395 const float ctime_scaled = key->
ctime / 100.0f;
1419 else if (nu->
bezt) {
1439 else if (nu->
bezt) {
1460 const float ctime_scaled = key->
ctime / 100.0f;
1481 float **per_keyblock_weights;
1488 const float ctime_scaled = key->
ctime / 100.0f;
1508 const int totpoint);
1512 Object *ob,
int *r_totelem,
float *arr,
size_t arr_size,
ID *obdata)
1517 int tot = 0,
size = 0;
1544 if (tot == 0 ||
size == 0) {
1553 if (arr_size !=
size) {
1576 cp_key(0, tot, tot,
out, key, actkb, kb, weights, 0);
1601 if (obdata !=
NULL) {
1602 switch (
GS(obdata->
name)) {
1629 return (
float *)
out;
1642 if (
ELEM(shape_index, -1, index)) {
1676 if (
ELEM(shape_index, -1, index)) {
1677 const int block_elem_len = kb->totelem * key->
elemsize;
1678 memcpy(elements, kb->data, block_elem_len);
1679 elements += block_elem_len;
1690 const int shape_index,
1691 const float (*coords)[3],
1692 const float mat[4][4])
1694 if (key->
elemsize !=
sizeof(
float[3])) {
1699 const float(*elements)[3] = coords;
1703 if (
ELEM(shape_index, -1, index)) {
1704 const int block_elem_len = kb->totelem;
1705 float(*block_data)[3] = (
float(*)[3])kb->data;
1706 for (
int data_offset = 0; data_offset < block_elem_len; ++data_offset) {
1707 const float *src_data = (
const float *)(elements + data_offset);
1708 float *dst_data = (
float *)(block_data + data_offset);
1711 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;
1736 if (
ELEM(shape_index, -1, index)) {
1737 const int block_elem_size = kb->totelem * key->
elemsize;
1738 memcpy(kb->data, elements, block_elem_size);
1739 elements += block_elem_size;
1817 float curpos = -0.1;
1857 kb->
pos = curpos + 0.1f;
1865 const float cpos = key->
ctime / 100.0f;
1918 for (
int i = 1; i < key->
totkey; i++) {
1937 kb_dst->
pos = kb_src->
pos;
1984 for (
a = 0;
a < kb->
totelem;
a++, fp++, bp++) {
2010 for (
int i = 0; i < totpoint; i++, fp++, bpoint++) {
2062 for (nu = nurb->
first; nu; nu = nu->
next) {
2065 for (
int i = 0; i < 3; i++) {
2085 const float mat[4][4],
2086 const void *src_data,
2089 const float *
src = src_data;
2090 float *dst = dst_data;
2091 for (
Nurb *nu = nurb->
first; nu; nu = nu->next) {
2093 for (
int a = nu->pntsu;
a;
a--) {
2094 for (
int i = 0; i < 3; i++) {
2104 for (
int a = nu->pntsu * nu->pntsv;
a;
a--) {
2135 for (
Nurb *nu = nurb->
first; nu && totpoint > 0; nu = nu->next) {
2136 if (nu->bezt !=
NULL) {
2140 for (
int j = 0; j < 3; j++) {
2161 const float *fp = kb->
data;
2184 for (
a = 0;
a < tot;
a++, fp++, mvert++) {
2207 for (
int i = 0; i < totvert; i++, fp++, mvert++) {
2222 float (*r_vertnors)[3],
2223 float (*r_polynors)[3],
2224 float (*r_loopnors)[3])
2226 if (r_vertnors ==
NULL && r_polynors ==
NULL && r_loopnors ==
NULL) {
2233 const bool loop_normals_needed = r_loopnors !=
NULL;
2234 const bool vert_normals_needed = r_vertnors !=
NULL || loop_normals_needed;
2235 const bool poly_normals_needed = r_polynors !=
NULL || vert_normals_needed ||
2236 loop_normals_needed;
2238 float(*vert_normals)[3] = r_vertnors;
2239 float(*poly_normals)[3] = r_polynors;
2240 bool free_vert_normals =
false;
2241 bool free_poly_normals =
false;
2242 if (vert_normals_needed && r_vertnors ==
NULL) {
2244 free_vert_normals =
true;
2246 if (poly_normals_needed && r_polynors ==
NULL) {
2248 free_poly_normals =
true;
2251 if (poly_normals_needed) {
2260 if (vert_normals_needed) {
2270 if (loop_normals_needed) {
2290 if (free_vert_normals) {
2293 if (free_poly_normals) {
2303 const float(*co)[3] = vertCos;
2304 float *fp = kb->
data;
2332 for (
a = 0;
a < tot;
a++, fp += 3, co++) {
2342 for (nu = cu->
nurb.
first; nu; nu = nu->next) {
2344 for (
a = nu->pntsu, bezt = nu->bezt;
a;
a--, bezt++) {
2345 for (
int i = 0; i < 3; i++, co++) {
2352 for (
a = nu->pntsu * nu->pntsv, bp = nu->bp;
a;
a--, bp++, co++) {
2363 int tot = 0, elemsize;
2396 float(*vertCos)[3], (*co)[3];
2397 const float *fp = kb->
data;
2418 co = vertCos =
MEM_mallocN(tot *
sizeof(*vertCos), __func__);
2422 for (
a = 0;
a < tot;
a++, fp += 3, co++) {
2432 for (nu = cu->
nurb.
first; nu; nu = nu->next) {
2434 for (
a = nu->pntsu, bezt = nu->bezt;
a;
a--, bezt++) {
2435 for (
int i = 0; i < 3; i++, co++) {
2442 for (
a = nu->pntsu * nu->pntsv, bp = nu->bp;
a;
a--, bp++, co++) {
2458 float *fp = kb->
data;
2461 for (
a = 0;
a < kb->
totelem;
a++, fp += 3, ofs++) {
2471 for (nu = cu->
nurb.
first; nu; nu = nu->next) {
2473 for (
a = nu->pntsu, bezt = nu->bezt;
a;
a--, bezt++) {
2474 for (
int i = 0; i < 3; i++, ofs++) {
2481 for (
a = nu->pntsu * nu->pntsv, bp = nu->bp;
a;
a--, bp++, ofs++) {
2496 const int act_index = ob->
shapenr - 1;
2497 const int totkey = key->
totkey;
2499 bool rev, in_range =
false;
2501 if (org_index < 0) {
2502 org_index = act_index;
2508 if (new_index == org_index) {
2512 rev = ((new_index - org_index) < 0) ? true :
false;
2518 kb = (rev ? kb->
prev : kb->
next), rev ? i-- : i++) {
2519 if (i == org_index) {
2522 else if (i == new_index) {
2554 if (org_index == act_index) {
2557 else if (act_index < org_index && act_index >= new_index) {
2560 else if (act_index > org_index && act_index <= new_index) {
2577 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_get_layer(const struct CustomData *data, int type)
int CustomData_get_offset(const struct CustomData *data, int type)
@ 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, short type, const char *name)
#define BKE_LIB_FOREACHID_PROCESS_ID(_data, _id, _cb_flag)
void BKE_mesh_calc_normals_poly_and_vertex(const struct MVert *mvert, int mvert_len, const struct MLoop *mloop, int mloop_len, const struct MPoly *mpoly, int mpoly_len, float(*r_poly_normals)[3], float(*r_vert_normals)[3])
void BKE_mesh_calc_normals_poly(const struct MVert *mvert, int mvert_len, const struct MLoop *mloop, int mloop_len, const struct MPoly *mpoly, int mpoly_len, float(*r_poly_normals)[3])
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)
#define BLI_assert_unreachable()
#define BLI_assert_msg(a, msg)
void BLI_endian_switch_float_array(float *val, 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_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)
void * BLI_findstring(const struct ListBase *listbase, const char *id, int offset) 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 max_ii(int a, int b)
MINLINE int compare_ff(float a, float b, float max_diff)
void mul_v3_m4v3(float r[3], const float M[4][4], const float v[3])
MINLINE void copy_v3_v3(float r[3], const float a[3])
void interp_v4_v4v4(float r[4], const float a[4], const float b[4], float t)
MINLINE void add_v3_v3(float r[3], const float a[3])
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
size_t BLI_snprintf(char *__restrict dst, size_t maxncpy, const char *__restrict format,...) ATTR_NONNULL(1
bool BLI_uniquename(struct ListBase *list, void *vlink, const char *defname, char delim, int name_offset, size_t name_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 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
#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)
SyclQueue void void * src
static void shapekey_blend_read_data(BlendDataReader *reader, ID *id)
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)
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)
void BKE_keyblock_curve_data_transform(const ListBase *nurb, const float mat[4][4], const void *src_data, void *dst_data)
Key * BKE_key_from_object(Object *ob)
static void flerp(int tot, float *in, const float *f0, const float *f1, const float *f2, const float *f3, const float *t)
void BKE_keyblock_convert_to_lattice(const KeyBlock *kb, Lattice *lt)
static float ** keyblock_get_per_block_weights(Object *ob, Key *key, WeightsArrayCache *cache)
KeyBlock * BKE_keyblock_find_name(Key *key, const char name[])
float * BKE_key_evaluate_object_ex(Object *ob, int *r_totelem, float *arr, size_t arr_size, ID *obdata)
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_convert_from_mesh(const Mesh *me, const Key *key, KeyBlock *kb)
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)
void BKE_keyblock_convert_to_mesh(const KeyBlock *kb, MVert *mvert, const int totvert)
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)
char * BKE_keyblock_curval_rnapath_get(const Key *key, const KeyBlock *kb)
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_update_from_curve(const Curve *UNUSED(cu), KeyBlock *kb, const ListBase *nurb)
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_key_free_data(Key *key)
void BKE_keyblock_update_from_offset(const Object *ob, KeyBlock *kb, const float(*ofs)[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)
struct WeightsArrayCache WeightsArrayCache
int BKE_keyblock_curve_element_count(const ListBase *nurb)
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])
static void switch_endian_keyblock(Key *key, KeyBlock *kb)
size_t BKE_keyblock_element_calc_size(const Key *key)
static ID * shapekey_owner_get(Main *UNUSED(bmain), ID *id, ID *UNUSED(owner_id_hint))
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)
void BKE_keyblock_convert_from_curve(const Curve *cu, KeyBlock *kb, const ListBase *nurb)
#define KEY_MODE_BEZTRIPLE
void key_curve_tangent_weights(float t, float data[4], int type)
void BKE_keyblock_convert_from_lattice(const Lattice *lt, KeyBlock *kb)
static void keyblock_data_convert_to_curve(const float *fp, ListBase *nurb, const int totpoint)
static void do_mesh_key(Object *ob, Key *key, char *out, const int tot)
static void keyblock_data_convert_to_lattice(const float(*fp)[3], BPoint *bpoint, const int totpoint)
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)
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_update_from_lattice(const Lattice *lt, KeyBlock *kb)
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))
void BKE_keyblock_convert_from_vertcos(const Object *ob, KeyBlock *kb, const float(*vertCos)[3])
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_mesh_calc_normals(const KeyBlock *kb, const Mesh *mesh, float(*r_vertnors)[3], float(*r_polynors)[3], float(*r_loopnors)[3])
void BKE_keyblock_update_from_mesh(const Mesh *me, KeyBlock *kb)
static void keyblock_data_convert_to_mesh(const float(*fp)[3], MVert *mvert, const int totvert)
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)
bool BKE_keyblock_is_basis(const Key *key, const int index)
void BKE_keyblock_update_from_vertcos(const Object *ob, KeyBlock *kb, const float(*vertCos)[3])
static void cp_cu_key(Curve *cu, Key *key, KeyBlock *actkb, KeyBlock *kb, const int start, int end, char *out, const int tot)
float(* BKE_keyblock_convert_to_vertcos(const Object *ob, const KeyBlock *kb))[3]
static void shapekey_free_data(ID *id)
void key_curve_position_weights(float t, float data[4], int type)
Key ** BKE_key_from_object_p(Object *ob)
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)
static const pxr::TfToken out("out", pxr::TfToken::Immortal)
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
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(const PointerRNA *ptr, PropertyRNA *prop)
struct MDeformVert * dvert
struct BMEditMesh * edit_mesh
struct MDeformVert * dvert
float ** defgroup_weights