Distribute UV over (a, b) rectangle
| 1871 | |
| 1872 | // Distribute UV over (a, b) rectangle |
| 1873 | 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) |
| 1874 | { |
| 1875 | const ImVec2 size = b - a; |
| 1876 | const ImVec2 uv_size = uv_b - uv_a; |
| 1877 | const ImVec2 scale = ImVec2( |
| 1878 | size.x != 0.0f ? (uv_size.x / size.x) : 0.0f, |
| 1879 | size.y != 0.0f ? (uv_size.y / size.y) : 0.0f); |
| 1880 | |
| 1881 | ImDrawVert* vert_start = draw_list->VtxBuffer.Data + vert_start_idx; |
| 1882 | ImDrawVert* vert_end = draw_list->VtxBuffer.Data + vert_end_idx; |
| 1883 | if (clamp) |
| 1884 | { |
| 1885 | const ImVec2 min = ImMin(uv_a, uv_b); |
| 1886 | const ImVec2 max = ImMax(uv_a, uv_b); |
| 1887 | for (ImDrawVert* vertex = vert_start; vertex < vert_end; ++vertex) |
| 1888 | vertex->uv = ImClamp(uv_a + ImMul(ImVec2(vertex->pos.x, vertex->pos.y) - a, scale), min, max); |
| 1889 | } |
| 1890 | else |
| 1891 | { |
| 1892 | for (ImDrawVert* vertex = vert_start; vertex < vert_end; ++vertex) |
| 1893 | vertex->uv = uv_a + ImMul(ImVec2(vertex->pos.x, vertex->pos.y) - a, scale); |
| 1894 | } |
| 1895 | } |
| 1896 | |
| 1897 | //----------------------------------------------------------------------------- |
| 1898 | // [SECTION] ImFontConfig |