#include #include namespace sophia { class Canvas::Impl { public: explicit Impl(Application* application) : application{application} {} void triangle(glm::vec2 a, glm::vec2 b, glm::vec2 c, glm::vec3 color = {1.0f, 1.0f, 1.0f}) { std::vector vertices{ {a, color}, {b, color}, {c, color}, }; application->pushModel(std::move(vertices), {}); } void quad(glm::vec2 position, glm::vec2 size, glm::vec3 color = {1.0f, 1.0f, 1.0f}) { std::vector vertices{ {position, color}, {position + glm::vec2(size.x, 0.f), color}, {position + size, color}, {position + glm::vec2(0.f, size.y), color}, }; std::vector indices{0, 1, 2, 2, 3, 0}; application->pushModel(std::move(vertices), std::move(indices)); } void clear() { application->clearModels(); } private: Application* application; }; Canvas::Canvas(Application* application) : impl{std::make_unique(application)} {} Canvas::~Canvas() = default; void Canvas::triangle(glm::vec2 a, glm::vec2 b, glm::vec2 c, glm::vec3 color) { impl->triangle(a, b, c, color); } void Canvas::quad(glm::vec2 position, glm::vec2 size, glm::vec3 color) { impl->quad(position, size, color); } void Canvas::clear() { impl->clear(); } } // namespace sophia