Generic linear color gradient, write to RGB fields, leave A untouched.
| 2373 | |
| 2374 | // Generic linear color gradient, write to RGB fields, leave A untouched. |
| 2375 | void ImGui::ShadeVertsLinearColorGradientKeepAlpha(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, ImVec2 gradient_p0, ImVec2 gradient_p1, ImU32 col0, ImU32 col1) |
| 2376 | { |
| 2377 | ImVec2 gradient_extent = gradient_p1 - gradient_p0; |
| 2378 | float gradient_inv_length2 = 1.0f / ImLengthSqr(gradient_extent); |
| 2379 | ImDrawVert* vert_start = draw_list->VtxBuffer.Data + vert_start_idx; |
| 2380 | ImDrawVert* vert_end = draw_list->VtxBuffer.Data + vert_end_idx; |
| 2381 | const int col0_r = (int)(col0 >> IM_COL32_R_SHIFT) & 0xFF; |
| 2382 | const int col0_g = (int)(col0 >> IM_COL32_G_SHIFT) & 0xFF; |
| 2383 | const int col0_b = (int)(col0 >> IM_COL32_B_SHIFT) & 0xFF; |
| 2384 | const int col_delta_r = ((int)(col1 >> IM_COL32_R_SHIFT) & 0xFF) - col0_r; |
| 2385 | const int col_delta_g = ((int)(col1 >> IM_COL32_G_SHIFT) & 0xFF) - col0_g; |
| 2386 | const int col_delta_b = ((int)(col1 >> IM_COL32_B_SHIFT) & 0xFF) - col0_b; |
| 2387 | for (ImDrawVert* vert = vert_start; vert < vert_end; vert++) |
| 2388 | { |
| 2389 | float d = ImDot(vert->pos - gradient_p0, gradient_extent); |
| 2390 | float t = ImClamp(d * gradient_inv_length2, 0.0f, 1.0f); |
| 2391 | int r = (int)(col0_r + col_delta_r * t); |
| 2392 | int g = (int)(col0_g + col_delta_g * t); |
| 2393 | int b = (int)(col0_b + col_delta_b * t); |
| 2394 | vert->col = (r << IM_COL32_R_SHIFT) | (g << IM_COL32_G_SHIFT) | (b << IM_COL32_B_SHIFT) | (vert->col & IM_COL32_A_MASK); |
| 2395 | } |
| 2396 | } |
| 2397 | |
| 2398 | // Distribute UV over (a, b) rectangle |
| 2399 | void ImGui::ShadeVertsLinearUV(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, bool clamp) |
nothing calls this directly
no test coverage detected