62 const Bone *bone_src_act,
63 Bone **r_bone_dst_act,
97 Bone *bone_src, *bone_dst;
109 for (bone_src = armature_src->
bonebase.
first; bone_src; bone_src = bone_src->
next) {
112 bone_dst = bone_dst->
next;
115 armature_dst->
act_bone = bone_dst_act;
120 for (bone_dst = armature_dst->
bonebase.
first; bone_dst; bone_dst = bone_dst->
next) {
137 if (armature->
edbo) {
304 .name_plural =
"armatures",
307 .asset_type_info =
NULL,
314 .foreach_cache =
NULL,
315 .foreach_path =
NULL,
323 .blend_read_undo_preserve =
NULL,
325 .lib_override_apply_post =
NULL,
364 for (bone = lb->
first; bone; bone = bone->
next) {
377 if (edit_bone->prop) {
386 const Bone *bone_src,
387 const Bone *bone_src_act,
388 Bone **r_bone_dst_act,
391 Bone *bone_src_child, *bone_dst_child;
393 if (bone_src == bone_src_act) {
394 *r_bone_dst_act = bone_dst;
397 if (bone_src->
prop) {
407 bone_src_child = bone_src_child->
next, bone_dst_child = bone_dst_child->
next) {
408 bone_dst_child->
parent = bone_dst;
409 copy_bonechildren(bone_dst_child, bone_src_child, bone_src_act, r_bone_dst_act, flag);
415 Bone *bone_dst_child;
425 bone_dst_child = bone_dst_child->
next) {
457 while (bone_dst !=
NULL) {
460 bone_dst = bone_dst->
next;
461 bone_src = bone_src->
next;
475 const float mat[4][4],
478 const float mat3[3][3],
481 const Bone *bone_parent,
482 const float arm_mat_parent_inv[4][4])
491 float roll_mat3_pre[3][3];
496 if (bone->parent ==
NULL) {
521 float roll_mat3_post[3][3], delta_mat3[3][3];
526 mul_m3_m3m3(delta_mat3, roll_mat3_post, roll_mat3_pre);
527 bone->roll =
atan2f(delta_mat3[2][0], delta_mat3[2][2]);
533 float arm_mat3[3][3];
539 bone->rad_head *= scale;
540 bone->rad_tail *= scale;
544 bone->xwidth *= scale;
545 bone->zwidth *= scale;
549 float arm_mat_inv[4][4];
578 Bone *curBone, *rbone;
580 for (curBone = lb->
first; curBone; curBone = curBone->
next) {
652 if (bone->
flag & flag) {
699 char name[
MAXBONENAME],
int UNUSED(strip_number),
short axis,
float head,
float tail)
703 char extension[5] =
"";
723 strcpy(extension,
"Bot");
726 strcpy(extension,
"Top");
731 strcpy(extension,
"Bot");
734 strcpy(extension,
"Top");
738 else if (axis == 1) {
742 strcpy(extension,
"Fr");
745 strcpy(extension,
"Bk");
750 strcpy(extension,
"Fr");
753 strcpy(extension,
"Bk");
761 strcpy(extension,
"R");
764 strcpy(extension,
"L");
769 strcpy(extension,
"R");
773 strcpy(extension,
"L");
817 const int basename_maxlen = (
MAXBONENAME - 1) - (1 + strlen(extension));
835 const float *segment_scales,
842 for (
int i = 0; i < 3; i++) {
855 for (
int i = 0; i < temp_segments; i++) {
856 pdist[i + 1] = pdist[i] +
len_v3v3(coords[i], coords[i + 1]);
860 float dist_step = pdist[temp_segments];
861 float dist = 0,
sum = 0;
863 for (
int i = 0; i < final_segments; i++) {
864 sum += segment_scales[i];
869 r_t_points[0] = 0.0f;
871 for (
int i = 1, nr = 1; i <= final_segments; i++) {
872 dist += segment_scales[i - 1] * dist_step;
875 while ((nr < temp_segments) && (dist >= pdist[nr])) {
879 float fac = (pdist[nr] - dist) / (pdist[nr] - pdist[nr - 1]);
881 r_t_points[i] = (nr - fac) / temp_segments;
884 r_t_points[final_segments] = 1.0f;
925 *r_next = pchan->
child;
939 float imat[4][4], posemat[4][4], tmpmat[4][4];
942 memset(param, 0,
sizeof(*param));
953 if (
fabsf(scale[0] - scale[1]) > 1e-6f ||
fabsf(scale[1] - scale[2]) > 1e-6f) {
976 float prev_scale[3], next_scale[3];
1147 param->
scale_in[0] *= prev_scale[0];
1150 param->
scale_in[1] *= prev_scale[1];
1153 param->
scale_in[2] *= prev_scale[2];
1156 param->
ease1 *= prev_scale[1];
1171 param->
ease2 *= next_scale[1];
1180 const bool for_deform,
1206 *r_roll1 = *r_roll2 = 0.0f;
1262 const float hlength1 = param->
ease1 * circle_factor;
1263 const float hlength2 = param->
ease2 * circle_factor;
1286 *r_roll1 += param->
roll1;
1287 *r_roll2 += param->
roll2;
1295 const float xscale_correction = (param->
do_scale) ? param->
scale[0] : 1.0f;
1296 const float zscale_correction = (param->
do_scale) ? param->
scale[2] : 1.0f;
1298 h1[0] += param->
curve_in_x * xscale_correction;
1299 h1[2] += param->
curve_in_z * zscale_correction;
1307 const float scalemats[2][4][4],
1309 const float axis[3],
1335 const float gap = 0.1f;
1344 const float ratio = len1 / len2;
1345 if (ratio < gap * gap) {
1351 const bool for_deform,
1354 float scalemats[2][4][4];
1355 float bezt_controls[4][3];
1356 float h1[3], roll1, h2[3], roll2,
prev[3], cur[3], axis[3];
1372 add_v3_v3v3(bezt_controls[2], bezt_controls[3], h2);
1382 const float log_scale_in_len =
logf(param->
scale_in[1]);
1385 for (
int i = 0; i < param->
segments; i++) {
1387 segment_scales[i] =
expf(
interpf(log_scale_out_len, log_scale_in_len, fac));
1399 float bezt_deriv1[3][3], bezt_deriv2[2][3];
1401 for (
int i = 0; i < 3; i++) {
1402 sub_v3_v3v3(bezt_deriv1[i], bezt_controls[i + 1], bezt_controls[i]);
1404 for (
int i = 0; i < 2; i++) {
1405 sub_v3_v3v3(bezt_deriv2[i], bezt_deriv1[i + 1], bezt_deriv1[i]);
1417 result_array[0].
mat);
1423 float roll =
interpf(roll2, roll1, fac);
1428 param, scalemats, cur, axis, roll, scalex, scalez, result_array[
a].mat);
1451 float fac = (
a + 0.5f) / param->
segments;
1452 float roll =
interpf(roll2, roll1, fac);
1457 param, scalemats,
prev, axis, roll, scalex, scalez, result_array[
a].mat);
1474 1 + (
uint)segments,
sizeof(
Mat4),
"bPoseChannel_Runtime::bbone_rest_mats");
1476 1 + (
uint)segments,
sizeof(
Mat4),
"bPoseChannel_Runtime::bbone_pose_mats");
1478 2 + (
uint)segments,
sizeof(
Mat4),
"bPoseChannel_Runtime::bbone_deform_mats");
1480 1 + (
uint)segments,
sizeof(
DualQuat),
"bPoseChannel_Runtime::bbone_dual_quats");
1525 b_bone_mats[0].
mat);
1541 if (segments <= 1) {
1551 sizeof(
Mat4) * (2 + segments));
1554 sizeof(
DualQuat) * (1 + segments));
1561 float *r_blend_next)
1571 float pre_blend =
pos * (
float)segments;
1573 int index = (int)
floorf(pre_blend);
1574 CLAMP(index, 0, segments - 1);
1576 float blend = pre_blend - index;
1580 *r_blend_next =
blend;
1607 float xLocMat[4][4];
1608 float nLocMat[4][4];
1642 const Bone *bone, *parbone;
1651 float offs_bone[4][4];
1669 int inherit_scale_mode,
1670 const float offs_bone[4][4],
1671 const float parent_arm_mat[4][4],
1672 const float parent_pose_mat[4][4],
1677 if (parent_pose_mat) {
1678 const bool use_rotation = (bone_flag &
BONE_HINGE) == 0;
1682 if (full_transform) {
1687 float tmat[4][4], tscale[3];
1694 switch (inherit_scale_mode) {
1726 switch (inherit_scale_mode) {
1773 float bone_loc[4][4], bone_rotscale[3][3], tmat4[4][4], tmat3[3][3];
1778 mul_v3_m4v3(bone_loc[3], parent_pose_mat, offs_bone[3]);
1788 else if (!full_transform) {
1837 const float inmat[4][4],
1850 const float inmat[4][4],
1861 const float inmat[4][4],
1872 float xLocMat[4][4];
1873 float nLocMat[4][4];
1895 const float inmat[4][4],
1966 float pose_mat[4][4],
1967 float arm_mat[4][4])
1984 float quat[4],
float eul[3],
float axis[3],
float *
angle,
short oldMode,
short newMode)
2004 else if (oldMode > 0) {
2023 if (
IS_EQF(axis[0], axis[1]) &&
IS_EQF(axis[1], axis[2])) {
2069 float vecmat[3][3], vecmatinv[3][3], rollmat[3][3], q[4];
2157 const float SAFE_THRESHOLD = 6.1e-3f;
2158 const float CRITICAL_THRESHOLD = 2.5e-4f;
2159 const float THRESHOLD_SQUARED = CRITICAL_THRESHOLD * CRITICAL_THRESHOLD;
2161 const float x =
nor[0];
2162 const float y =
nor[1];
2163 const float z =
nor[2];
2165 float theta = 1.0f +
y;
2166 const float theta_alt =
x *
x +
z *
z;
2167 float rMatrix[3][3], bMatrix[3][3];
2179 if (theta > SAFE_THRESHOLD || theta_alt > THRESHOLD_SQUARED) {
2188 if (theta <= SAFE_THRESHOLD) {
2191 theta = theta_alt * 0.5f + theta_alt * theta_alt * 0.125f;
2194 bMatrix[0][0] = 1 -
x *
x / theta;
2195 bMatrix[2][2] = 1 -
z *
z / theta;
2196 bMatrix[2][0] = bMatrix[0][2] = -
x *
z / theta;
2201 bMatrix[0][0] = bMatrix[1][1] = -1.0;
2235 if (bone->
xwidth == 0.0f) {
2242 float offs_bone[4][4];
2255 if (use_recursion) {
2300 const Bone *last_visited_bone = *r_last_visited_bone_p;
2301 if ((pchan_prev ==
NULL && last_visited_bone !=
NULL) ||
2302 (pchan_prev !=
NULL && pchan_prev->
bone != last_visited_bone)) {
2303 pchan_prev = last_visited_bone !=
NULL ?
2310 *r_last_visited_bone_p = pchan->
bone;
2328 pchan->child =
NULL;
2354 if (pchan->bone ==
NULL) {
2414 if (bmain !=
NULL) {
2666 const bool use_empty_drawtype,
2678 if (use_empty_drawtype && (ob_custom->
type ==
OB_EMPTY) &&
2680 memset(&bb_custom_buf, 0x0,
sizeof(bb_custom_buf));
2682 bb_custom = &bb_custom_buf;
2690 float mat[4][4], smat[4][4], rmat[4][4], tmp[4][4];
2713 bool changed =
false;
2745 rootchan = rootchan->
parent;
2747 if (rootchan !=
NULL) {
2749 while (rootchan->
parent) {
2752 if (segcount ==
data->rootbone) {
2755 rootchan = rootchan->
parent;
2767 while (rootchan->
parent) {
2770 if (segcount ==
data->chainlen) {
2773 rootchan = rootchan->
parent;
typedef float(TangentPoint)[2]
void BIK_init_tree(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, float ctime)
void BIK_release_tree(struct Scene *scene, struct Object *ob, float ctime)
void BIK_execute_tree(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, struct bPoseChannel *pchan, float ctime)
Blender kernel action and pose functionality.
void BKE_pose_channels_hash_free(struct bPose *pose)
struct bPoseChannel * BKE_pose_channel_find_name(const struct bPose *pose, const char *name)
struct bPoseChannel * BKE_pose_channel_ensure(struct bPose *pose, const char *name)
void BKE_pose_channel_free_ex(struct bPoseChannel *pchan, bool do_id_user)
void BKE_pose_channels_hash_ensure(struct bPose *pose)
void BKE_pose_update_constraint_flags(struct bPose *pose)
void BKE_pose_channel_free_bbone_cache(struct bPoseChannel_Runtime *runtime)
void BKE_animdata_blend_read_data(struct BlendDataReader *reader, struct AnimData *adt)
void BKE_animdata_blend_write(struct BlendWriter *writer, struct AnimData *adt)
void animviz_settings_init(struct bAnimVizSettings *avs)
void BKE_pose_splineik_init_tree(struct Scene *scene, struct Object *ob, float ctime)
void BKE_splineik_execute_tree(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, struct bPoseChannel *pchan_root, float ctime)
#define PBONE_VISIBLE(arm, bone)
void BKE_constraints_solve(struct Depsgraph *depsgraph, struct ListBase *conlist, struct bConstraintOb *cob, float ctime)
struct bConstraintOb * BKE_constraints_make_evalob(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, void *subdata, short datatype)
void BKE_constraints_clear_evalob(struct bConstraintOb *cob)
void BKE_curve_forward_diff_bezier(float q0, float q1, float q2, float q3, float *p, int it, int stride)
void IDP_BlendReadExpand(struct BlendExpander *expander, struct IDProperty *prop)
struct IDProperty * IDP_CopyProperty_ex(const struct IDProperty *prop, int flag) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void IDP_BlendWrite(struct BlendWriter *writer, const struct IDProperty *prop)
void IDP_foreach_property(struct IDProperty *id_property_root, int type_filter, IDPForeachPropertyCallback callback, void *user_data)
#define IDP_BlendDataRead(reader, prop)
void IDP_FreeProperty_ex(struct IDProperty *prop, bool do_id_user)
void IDP_BlendReadLib(struct BlendLibReader *reader, struct Library *lib, struct IDProperty *prop)
@ IDTYPE_FLAGS_APPEND_IS_REUSABLE
@ LIB_ID_CREATE_NO_USER_REFCOUNT
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_FUNCTION_CALL(_data, _func_call)
void BKE_lib_query_idpropertiesForeachIDLink_callback(struct IDProperty *id_prop, void *user_data)
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_minmax_empty_drawtype(const struct Object *ob, float r_min[3], float r_max[3])
const struct BoundBox * BKE_object_boundbox_get(struct Object *ob)
void BKE_boundbox_minmax(const struct BoundBox *bb, const float obmat[4][4], float r_min[3], float r_max[3])
float BKE_scene_ctime_get(const struct Scene *scene)
#define BLI_array_alloca(arr, realsize)
#define BLI_assert_unreachable()
GHash * BLI_ghash_str_new_ex(const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void * BLI_ghash_lookup(const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
void BLI_ghash_insert(GHash *gh, void *key, void *val)
void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
#define LISTBASE_FOREACH(type, var, list)
void BLI_freelinkN(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void void void void void BLI_duplicatelist(struct ListBase *dst, const struct ListBase *src) ATTR_NONNULL(1
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void BLI_insertlinkafter(struct ListBase *listbase, void *vprevlink, void *vnewlink) ATTR_NONNULL(1)
bool BLI_remlink_safe(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define BLI_ASSERT_UNIT_M3(m)
MINLINE float interpf(float a, float b, float t)
#define BLI_ASSERT_UNIT_V3(v)
float cubic_tangent_factor_circle_v3(const float tan_l[3], const float tan_r[3])
void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
void mul_mat3_m4_fl(float R[4][4], float f)
void size_to_mat3(float R[3][3], const float size[3])
bool invert_m4(float R[4][4])
void copy_m3_m3(float m1[3][3], const float m2[3][3])
void unit_m3(float m[3][3])
void copy_m3_m4(float m1[3][3], const float m2[4][4])
void unit_m4(float m[4][4])
void copy_m4_m3(float m1[4][4], const float m2[3][3])
void mul_mat3_m4_v3(const float M[4][4], float r[3])
void translate_m4(float mat[4][4], float tx, float ty, float tz)
void mat4_to_size_fix_shear(float size[3], const float M[4][4])
bool invert_m4_m4(float R[4][4], const float A[4][4])
void mat4_to_loc_rot_size(float loc[3], float rot[3][3], float size[3], const float wmat[4][4])
void normalize_m3(float R[3][3]) ATTR_NONNULL()
void rescale_m4(float mat[4][4], const float scale[3])
void size_to_mat4(float R[4][4], const float size[3])
void mul_m4_v3(const float M[4][4], float r[3])
void orthogonalize_m4_stable(float R[4][4], int axis, bool normalize)
#define mul_m4_series(...)
void scale_m4_fl(float R[4][4], float scale)
void normalize_m4_ex(float R[4][4], float r_scale[3]) ATTR_NONNULL()
bool invert_m3_m3(float R[3][3], const float A[3][3])
void copy_m4_m4(float m1[4][4], const float m2[4][4])
float mat4_to_scale(const float M[4][4])
void mul_v3_m4v3(float r[3], const float M[4][4], const float v[3])
bool invert_m3(float R[3][3])
void mat4_to_size(float size[3], const float M[4][4])
float mat4_to_volume_scale(const float M[4][4])
void mul_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3])
void normalize_m4(float R[4][4]) ATTR_NONNULL()
void mat3_normalized_to_compatible_eulO(float eul[3], const float old[3], short order, const float mat[3][3])
void eulO_to_mat3(float mat[3][3], const float eul[3], short order)
void axis_angle_to_quat(float r[4], const float axis[3], float angle)
void axis_angle_normalized_to_mat3(float R[3][3], const float axis[3], float angle)
void mat3_to_quat(float q[4], const float mat[3][3])
float normalize_qt(float q[4])
void eulO_to_axis_angle(float axis[3], float *angle, const float eul[3], short order)
float normalize_qt_qt(float r[4], const float q[4])
void quat_to_eulO(float eul[3], short order, const float quat[4])
void mat3_normalized_to_axis_angle(float axis[3], float *angle, const float M[3][3])
void quat_to_axis_angle(float axis[3], float *angle, const float q[4])
void eulO_to_quat(float quat[4], const float eul[3], short order)
void mat4_to_dquat(DualQuat *dq, const float basemat[4][4], const float mat[4][4])
void axis_angle_to_eulO(float eul[3], short order, const float axis[3], float angle)
void eulO_to_mat4(float mat[4][4], const float eul[3], short order)
void quat_to_mat3(float mat[3][3], const float q[4])
void axis_angle_to_mat3(float R[3][3], const float axis[3], float angle)
float quat_split_swing_and_twist(const float q[4], int axis, float r_swing[4], float r_twist[4])
void mat3_normalized_to_quat(float q[4], const float mat[3][3])
void mat3_normalized_to_eulO(float eul[3], short order, const float mat[3][3])
MINLINE float len_squared_v3(const float v[3]) ATTR_WARN_UNUSED_RESULT
MINLINE float len_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
void minmax_v3v3_v3(float min[3], float max[3], const float vec[3])
MINLINE void madd_v3_v3fl(float r[3], const float a[3], float f)
MINLINE void mul_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE float normalize_v3(float r[3])
MINLINE void mul_v3_v3(float r[3], const float a[3])
MINLINE void sub_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void mul_v3_fl(float r[3], float f)
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE void copy_v3_fl3(float v[3], float x, float y, float z)
MINLINE void invert_v3_safe(float r[3])
void interp_v3_v3v3(float r[3], const float a[3], const float b[3], float t)
MINLINE void add_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void negate_v3(float r[3])
MINLINE float normalize_v3_v3(float r[3], const float a[3])
MINLINE void copy_v3_fl(float r[3], float f)
MINLINE void madd_v3_v3v3fl(float r[3], const float a[3], const float b[3], float f)
MINLINE void zero_v3(float r[3])
MINLINE void add_v3_v3(float r[3], const float a[3])
MINLINE float len_v3(const float a[3]) ATTR_WARN_UNUSED_RESULT
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
#define INIT_MINMAX(min, max)
#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)
#define BLO_write_struct(writer, struct_name, data_ptr)
void BLO_read_list(BlendDataReader *reader, struct ListBase *list)
#define BLT_I18NCONTEXT_ID_ARMATURE
struct Depsgraph Depsgraph
bool DEG_is_active(const struct Depsgraph *depsgraph)
void DEG_relations_tag_update(struct Main *bmain)
struct ID * DEG_get_original_id(struct ID *id)
#define PCHAN_CUSTOM_BONE_LENGTH(pchan)
@ BONE_DRAW_LOCKED_WEIGHT
struct bArmature bArmature
@ BBONE_ADD_PARENT_END_ROLL
@ BBONE_HANDLE_SCALE_EASE
@ BONE_INHERIT_SCALE_FULL
@ BONE_INHERIT_SCALE_NONE
@ BONE_INHERIT_SCALE_FIX_SHEAR
@ BONE_INHERIT_SCALE_NONE_LEGACY
@ BONE_INHERIT_SCALE_ALIGNED
@ BONE_INHERIT_SCALE_AVERAGE
#define DNA_struct_default_get(struct_name)
These structs are the foundation for all linked lists in the library system.
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 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 z
_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 y
_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
static void armature_copy_data(Main *UNUSED(bmain), ID *id_dst, const ID *id_src, const int flag)
void BKE_pchan_rot_to_mat3(const bPoseChannel *pchan, float r_mat[3][3])
void BKE_armature_bone_hash_make(bArmature *arm)
void BKE_pose_where_is(struct Depsgraph *depsgraph, Scene *scene, Object *ob)
static void lib_link_bones(BlendLibReader *reader, Library *lib, Bone *bone)
static void copy_bone_transform(Bone *bone_dst, const Bone *bone_src)
void vec_roll_to_mat3(const float vec[3], const float roll, float r_mat[3][3])
bArmature * BKE_armature_from_object(Object *ob)
static void ease_handle_axis(const float deriv1[3], const float deriv2[3], float r_axis[3])
static void allocate_bbone_cache(bPoseChannel *pchan, int segments)
void BKE_pchan_bbone_deform_segment_index(const bPoseChannel *pchan, float pos, int *r_index, float *r_blend_next)
bool bone_autoside_name(char name[MAXBONENAME], int UNUSED(strip_number), short axis, float head, float tail)
static int minmax_armature(Object *ob, float r_min[3], float r_max[3])
static bPoseChannel * pose_channel_find_bone(bPose *pose, Bone *bone)
int BKE_armature_bonelist_count(const ListBase *lb)
void BKE_armature_refresh_layer_used(struct Depsgraph *depsgraph, struct bArmature *arm)
void BKE_armature_loc_pose_to_bone(bPoseChannel *pchan, const float inloc[3], float outloc[3])
void BKE_armature_bonelist_free(ListBase *lb, const bool do_id_user)
void BKE_pose_channels_clear_with_null_bone(bPose *pose, const bool do_id_user)
void BKE_pose_ensure(Main *bmain, Object *ob, bArmature *arm, const bool do_id_user)
void BKE_armature_where_is_bone(Bone *bone, const Bone *bone_parent, const bool use_recursion)
void BKE_pose_rebuild(Main *bmain, Object *ob, bArmature *arm, const bool do_id_user)
void mat3_vec_to_roll(const float mat[3][3], const float vec[3], float *r_roll)
static void write_bone(BlendWriter *writer, Bone *bone)
static void armature_transform_recurse(ListBase *bonebase, const float mat[4][4], const bool do_props, const float mat3[3][3], const float scale, const Bone *bone_parent, const float arm_mat_parent_inv[4][4])
void BKE_armature_mat_bone_to_pose(bPoseChannel *pchan, const float inmat[4][4], float outmat[4][4])
bArmature * BKE_armature_add(Main *bmain, const char *name)
void BKE_pchan_calc_mat(bPoseChannel *pchan)
void BKE_pose_where_is_bone_tail(bPoseChannel *pchan)
static void expand_bones(BlendExpander *expander, Bone *bone)
void BKE_pchan_apply_mat4(bPoseChannel *pchan, const float mat[4][4], bool use_compat)
void BKE_pchan_minmax(const Object *ob, const bPoseChannel *pchan, const bool use_empty_drawtype, float r_min[3], float r_max[3])
void BKE_armature_mat_pose_to_bone_ex(struct Depsgraph *depsgraph, Object *ob, bPoseChannel *pchan, const float inmat[4][4], float outmat[4][4])
void BKE_armature_mat_pose_to_bone(bPoseChannel *pchan, const float inmat[4][4], float outmat[4][4])
void BKE_bone_parent_transform_combine(const struct BoneParentTransform *in1, const struct BoneParentTransform *in2, struct BoneParentTransform *result)
static void armature_foreach_id_bone(Bone *bone, LibraryForeachIDData *data)
static void equalize_cubic_bezier(const float control[4][3], int temp_segments, int final_segments, const float *segment_scales, float *r_t_points)
Bone * BKE_armature_find_bone_name(bArmature *arm, const char *name)
void BKE_pchan_rebuild_bbone_handles(bPose *pose, bPoseChannel *pchan)
static void boundbox_armature(Object *ob)
void BKE_bone_parent_transform_invert(struct BoneParentTransform *bpt)
void BKE_pose_clear_pointers(bPose *pose)
bool BKE_armature_bone_flag_test_recursive(const Bone *bone, int flag)
void BKE_pchan_to_mat4(const bPoseChannel *pchan, float r_chanmat[4][4])
bool BKE_pose_minmax(Object *ob, float r_min[3], float r_max[3], bool use_hidden, bool use_select)
static void copy_bonechildren(Bone *bone_dst, const Bone *bone_src, const Bone *bone_src_act, Bone **r_bone_dst_act, const int flag)
void BKE_armature_copy_bone_transforms(bArmature *armature_dst, const bArmature *armature_src)
static void make_bbone_spline_matrix(BBoneSplineParameters *param, const float scalemats[2][4][4], const float pos[3], const float axis[3], float roll, float scalex, float scalez, float result[4][4])
static void armature_blend_write(BlendWriter *writer, ID *id, const void *id_address)
bPoseChannel * BKE_armature_splineik_solver_find_root(bPoseChannel *pchan, bSplineIKConstraint *data)
static void armature_foreach_id_editbone(EditBone *edit_bone, LibraryForeachIDData *data)
static int rebuild_pose_bone(bPose *pose, Bone *bone, bPoseChannel *parchan, int counter, Bone **r_last_visited_bone_p)
void BKE_rotMode_change_values(float quat[4], float eul[3], float axis[3], float *angle, short oldMode, short newMode)
static void copy_bonechildren_custom_handles(Bone *bone_dst, bArmature *arm_dst)
void BKE_bone_parent_transform_clear(struct BoneParentTransform *bpt)
void BKE_pchan_bbone_segments_cache_copy(bPoseChannel *pchan, bPoseChannel *pchan_from)
void BKE_armature_mat_pose_to_delta(float delta_mat[4][4], float pose_mat[4][4], float arm_mat[4][4])
BoundBox * BKE_armature_boundbox_get(Object *ob)
void BKE_bone_parent_transform_calc_from_pchan(const bPoseChannel *pchan, BoneParentTransform *r_bpt)
static void armature_refresh_layer_used_recursive(bArmature *arm, ListBase *bones)
int BKE_pchan_bbone_spline_compute(BBoneSplineParameters *param, const bool for_deform, Mat4 *result_array)
void BKE_pchan_mat3_to_rot(bPoseChannel *pchan, const float mat[3][3], bool use_compat)
void mat3_to_vec_roll(const float mat[3][3], float r_vec[3], float *r_roll)
static void armature_blend_read_lib(BlendLibReader *reader, ID *id)
static void armature_bone_from_name_insert_recursive(GHash *bone_hash, ListBase *lb)
static void armature_free_data(struct ID *id)
void BKE_armature_transform(bArmature *arm, const float mat[4][4], const bool do_props)
void BKE_pchan_bbone_segments_cache_compute(bPoseChannel *pchan)
void BKE_armature_editbonelist_free(ListBase *lb, const bool do_id_user)
void BKE_bone_parent_transform_calc_from_matrices(int bone_flag, int inherit_scale_mode, const float offs_bone[4][4], const float parent_arm_mat[4][4], const float parent_pose_mat[4][4], BoneParentTransform *r_bpt)
void BKE_pchan_bbone_handles_get(bPoseChannel *pchan, bPoseChannel **r_prev, bPoseChannel **r_next)
static void armature_foreach_id(ID *id, LibraryForeachIDData *data)
void BKE_bone_offset_matrix_get(const Bone *bone, float offs_bone[4][4])
static void armature_init_data(ID *id)
void BKE_armature_bone_hash_free(bArmature *arm)
void BKE_armature_where_is(bArmature *arm)
static void direct_link_bones(BlendDataReader *reader, Bone *bone)
static Bone * get_named_bone_bonechildren(ListBase *lb, const char *name)
void BKE_armature_mat_world_to_pose(Object *ob, const float inmat[4][4], float outmat[4][4])
void BKE_pchan_bbone_spline_setup(bPoseChannel *pchan, const bool rest, const bool for_deform, Mat4 *result_array)
void BKE_bone_parent_transform_apply(const struct BoneParentTransform *bpt, const float inmat[4][4], float outmat[4][4])
static GHash * armature_bone_from_name_map(bArmature *arm)
static void armature_blend_read_data(BlendDataReader *reader, ID *id)
bPoseChannel * BKE_armature_ik_solver_find_root(bPoseChannel *pchan, bKinematicConstraint *data)
static void evaluate_cubic_bezier(const float control[4][3], float t, float r_pos[3], float r_tangent[3])
void BKE_pose_remap_bone_pointers(bArmature *armature, bPose *pose)
void BKE_armature_loc_world_to_pose(Object *ob, const float inloc[3], float outloc[3])
static void armature_blend_read_expand(BlendExpander *expander, ID *id)
void BKE_pose_where_is_bone(struct Depsgraph *depsgraph, Scene *scene, Object *ob, bPoseChannel *pchan, float ctime, bool do_extra)
void BKE_pchan_bbone_handles_compute(const BBoneSplineParameters *param, float h1[3], float *r_roll1, float h2[3], float *r_roll2, bool ease, bool offsets)
void BKE_pchan_bbone_spline_params_get(struct bPoseChannel *pchan, const bool rest, struct BBoneSplineParameters *param)
void vec_roll_to_mat3_normalized(const float nor[3], const float roll, float r_mat[3][3])
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
static T sum(const btAlignedObjectArray< T > &items)
SIMD_FORCE_INLINE btScalar angle(const btVector3 &v) const
Return the angle between this and another vector.
static char * basename(char *string)
const Depsgraph * depsgraph
ccl_gpu_kernel_postfix ccl_global int * counter
void *(* MEM_malloc_arrayN)(size_t len, size_t size, const char *str)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
T length(const vec_base< T, Size > &a)
SymEdge< T > * prev(const SymEdge< T > *se)
struct EditBone * act_edbone
struct Mat4 * bbone_deform_mats
struct DualQuat * bbone_dual_quats
struct Mat4 * bbone_pose_mats
struct Mat4 * bbone_rest_mats
float custom_scale_xyz[3]
float custom_rotation_euler[3]
struct bPoseChannel * parent
struct bPoseChannel * custom_tx
struct bPoseChannel * bbone_next
struct bPoseChannel * prev
struct bPoseChannel * next
float custom_translation[3]
struct bPoseChannel_Runtime runtime
struct bPoseChannel * bbone_prev
struct bPoseChannel * child
static int blend(const Tex *tex, const float texvec[3], TexResult *texres)