#include "selection_disc.h" #include "gl/mesh.h" #include #include #include #include namespace Render::Geom { std::unique_ptr SelectionDisc::s_mesh; static auto create_disc_mesh() -> std::unique_ptr { using namespace Render::GL; std::vector verts; std::vector idx; constexpr int k_disc_segments = 72; verts.push_back({{0.0F, 0.0F, 0.0F}, {0.0F, 1.0F, 0.0F}, {0.5F, 0.5F}}); for (int i = 0; i <= k_disc_segments; ++i) { float const a = (i / float(k_disc_segments)) * 6.2831853F; float x = std::cos(a); float z = std::sin(a); verts.push_back( {{x, 0.0F, z}, {0.0F, 1.0F, 0.0F}, {0.5F + 0.5F * x, 0.5F + 0.5F * z}}); } for (int i = 1; i <= k_disc_segments; ++i) { idx.push_back(0); idx.push_back(i); idx.push_back(i + 1); } return std::make_unique(verts, idx); } auto SelectionDisc::get() -> Render::GL::Mesh * { if (!s_mesh) { s_mesh = create_disc_mesh(); } return s_mesh.get(); } } // namespace Render::Geom