@ -1599,13 +1599,19 @@ void ImGui::ShadeVertsLinearColorGradientKeepAlpha(ImDrawList* draw_list, int ve
float gradient_inv_length2 = 1.0f / ImLengthSqr ( gradient_extent ) ;
ImDrawVert * vert_start = draw_list - > VtxBuffer . Data + vert_start_idx ;
ImDrawVert * vert_end = draw_list - > VtxBuffer . Data + vert_end_idx ;
const int col0_r = ( int ) ( col0 > > IM_COL32_R_SHIFT ) & 0xFF ;
const int col0_g = ( int ) ( col0 > > IM_COL32_G_SHIFT ) & 0xFF ;
const int col0_b = ( int ) ( col0 > > IM_COL32_B_SHIFT ) & 0xFF ;
const int col_delta_r = ( ( int ) ( col1 > > IM_COL32_R_SHIFT ) & 0xFF ) - col0_r ;
const int col_delta_g = ( ( int ) ( col1 > > IM_COL32_G_SHIFT ) & 0xFF ) - col0_g ;
const int col_delta_b = ( ( int ) ( col1 > > IM_COL32_B_SHIFT ) & 0xFF ) - col0_b ;
for ( ImDrawVert * vert = vert_start ; vert < vert_end ; vert + + )
{
float d = ImDot ( vert - > pos - gradient_p0 , gradient_extent ) ;
float t = ImClamp ( d * gradient_inv_length2 , 0.0f , 1.0f ) ;
int r = ImLerp ( ( int ) ( col0 > > IM_COL32_R_SHIFT ) & 0xFF , ( int ) ( col1 > > IM_COL32_R_SHIFT ) & 0xFF , t ) ;
int g = ImLerp ( ( int ) ( col0 > > IM_COL32_G_SHIFT ) & 0xFF , ( int ) ( col1 > > IM_COL32_G_SHIFT ) & 0xFF , t ) ;
int b = ImLerp ( ( int ) ( col0 > > IM_COL32_B_SHIFT ) & 0xFF , ( int ) ( col1 > > IM_COL32_B_SHIFT ) & 0xFF , t ) ;
int r = ( int ) ( col0_r + col_delta_r * t ) ;
int g = ( int ) ( col0_g + col_delta_g * t ) ;
int b = ( int ) ( col0_b + col_delta_b * t ) ;
vert - > col = ( r < < IM_COL32_R_SHIFT ) | ( g < < IM_COL32_G_SHIFT ) | ( b < < IM_COL32_B_SHIFT ) | ( vert - > col & IM_COL32_A_MASK ) ;
}
}