| 47 | } |
| 48 | |
| 49 | void dxDebugRender::add_lines(Fvector const* vertices, u32 const& vertex_count, u16 const* pairs, u32 const& pair_count, u32 const& color, bool hud_mode) |
| 50 | { |
| 51 | auto& line_vertices = hud_mode ? m_line_vertices_hud : m_line_vertices; |
| 52 | auto& line_indices = hud_mode ? m_line_indices_hud : m_line_indices; |
| 53 | |
| 54 | size_t all_verts_count{}, all_inds_count{}; |
| 55 | for (const auto& [color, vert_vec] : line_vertices) |
| 56 | { |
| 57 | all_verts_count += vert_vec.size(); |
| 58 | all_inds_count += line_indices.at(color).size(); |
| 59 | } |
| 60 | |
| 61 | //Лимиты превышать нельзя ни в коем случае - убавить лимит если будут краши в R_DStreams.cpp |
| 62 | if ((all_verts_count + vertex_count) >= u16(-1)) |
| 63 | { |
| 64 | // Msg("~~[%s.1] Rendered [%u] verts and [%u] inds", __FUNCTION__, all_verts_count, all_inds_count); |
| 65 | Render(); |
| 66 | } |
| 67 | else if ((all_inds_count + 2 * pair_count) >= u16(-1)) |
| 68 | { |
| 69 | // Msg("~~[%s.2] Rendered [%u] verts and [%u] inds", __FUNCTION__, all_verts_count, all_inds_count); |
| 70 | Render(); |
| 71 | } |
| 72 | |
| 73 | ////////////////////////////////////////////////////////////////// |
| 74 | |
| 75 | auto& vert_vec = line_vertices[color]; |
| 76 | auto& ind_vec = line_indices[color]; |
| 77 | |
| 78 | const auto vertices_size = vert_vec.size(), indices_size = ind_vec.size(); |
| 79 | |
| 80 | ind_vec.resize(indices_size + 2 * pair_count); |
| 81 | auto I = ind_vec.begin() + indices_size, E = ind_vec.end(); |
| 82 | const u16* J = pairs; |
| 83 | for (; I != E; ++I, ++J) |
| 84 | *I = static_cast<u16>(vertices_size + *J); |
| 85 | |
| 86 | vert_vec.resize(vertices_size + vertex_count); |
| 87 | auto i = vert_vec.begin() + vertices_size, e = vert_vec.end(); |
| 88 | Fvector const* j = vertices; |
| 89 | for (; i != e; ++i, ++j) |
| 90 | { |
| 91 | i->color = color; |
| 92 | i->p = *j; |
| 93 | } |
| 94 | } |
| 95 | |
| 96 | void dxDebugRender::OnFrameEnd() { RCache.OnFrameEnd(); } |
| 97 | |