Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/intern/draw_armature.c
| Show First 20 Lines • Show All 1,290 Lines • ▼ Show 20 Lines | static void draw_bone_update_disp_matrix_custom(bPoseChannel *pchan) | ||||
| scale_m4_fl(s, length); | scale_m4_fl(s, length); | ||||
| mul_m4_m4m4(disp_mat, bone_mat, s); | mul_m4_m4m4(disp_mat, bone_mat, s); | ||||
| copy_m4_m4(disp_tail_mat, disp_mat); | copy_m4_m4(disp_tail_mat, disp_mat); | ||||
| translate_m4(disp_tail_mat, 0.0f, 1.0f, 0.0f); | translate_m4(disp_tail_mat, 0.0f, 1.0f, 0.0f); | ||||
| } | } | ||||
| static void draw_axes(EditBone *eBone, bPoseChannel *pchan, const eGPUShaderConfig sh_cfg) | static void draw_axes(EditBone *eBone, bPoseChannel *pchan, const eGPUShaderConfig sh_cfg) | ||||
| { | { | ||||
| float final_col[4]; | float final_col[4], (*bone_mat)[4], bone_mat_stack[4][4]; | ||||
| const float *col = (g_theme.const_color) ? | const float *col = (g_theme.const_color) ? | ||||
| g_theme.const_color : | g_theme.const_color : | ||||
| (BONE_FLAG(eBone, pchan) & BONE_SELECTED) ? g_theme.text_hi_color : | (BONE_FLAG(eBone, pchan) & BONE_SELECTED) ? g_theme.text_hi_color : | ||||
| g_theme.text_color; | g_theme.text_color; | ||||
| copy_v4_v4(final_col, col); | copy_v4_v4(final_col, col); | ||||
| /* Mix with axes color. */ | /* Mix with axes color. */ | ||||
| final_col[3] = (g_theme.const_color) ? 1.0 : | final_col[3] = (g_theme.const_color) ? 1.0 : | ||||
| (BONE_FLAG(eBone, pchan) & BONE_SELECTED) ? 0.3 : 0.8; | (BONE_FLAG(eBone, pchan) & BONE_SELECTED) ? 0.3 : 0.8; | ||||
| drw_shgroup_bone_axes(BONE_VAR(eBone, pchan, disp_mat), final_col, sh_cfg); | |||||
| if (eBone) { | |||||
| bone_mat = eBone->disp_mat; | |||||
| } | |||||
| else { | |||||
| /* `pchan->disp_mat` can vary size depending on: `custom_shape`, | |||||
| * `use_custom_bone_size` and `custom_shape_scale`. | |||||
| * So, calculate the matrix considering only pose_mat and length of the bone. */ | |||||
| float scale_mat[3][3]; | |||||
| scale_m3_fl(scale_mat, pchan->bone->length); | |||||
| bone_mat = pchan->custom_tx ? pchan->custom_tx->pose_mat : pchan->pose_mat; | |||||
| mul_m4_m4m3(bone_mat_stack, bone_mat, scale_mat); | |||||
| bone_mat = bone_mat_stack; | |||||
| } | |||||
| drw_shgroup_bone_axes(bone_mat, final_col, sh_cfg); | |||||
| } | } | ||||
| static void draw_points(const EditBone *eBone, | static void draw_points(const EditBone *eBone, | ||||
| const bPoseChannel *pchan, | const bPoseChannel *pchan, | ||||
| const bArmature *arm, | const bArmature *arm, | ||||
| const int boneflag, | const int boneflag, | ||||
| const short constflag, | const short constflag, | ||||
| const eGPUShaderConfig sh_cfg, | const eGPUShaderConfig sh_cfg, | ||||
| ▲ Show 20 Lines • Show All 828 Lines • Show Last 20 Lines | |||||