#pragma once #include #include #include "Renderive/architecture/global.h" namespace renderive { class LIB_DECL Graphic_Renderable { public: virtual ~Graphic_Renderable() = default; }; class Painter_Renderable : public Graphic_Renderable { public: std::unique_ptr buffer1{}; std::unique_ptr buffer2{}; bool it = true; void resize_buffers(const QSize& size) { buffer1 = std::make_unique(size); buffer2 = std::make_unique(size); } void draw() { if (!buffer1 || !buffer2) return; it = !it; QPixmap* cur = it ? buffer1.get() : buffer2.get(); QPainter painter(cur); painter.fillRect(cur->rect(), Qt::red); } void update_texture() { QPixmap* cur = it ? buffer1.get() : buffer2.get(); Q_UNUSED(cur) } }; class LIB_DECL Opengl_Renderable : public Graphic_Renderable { public: void draw(); }; class Graphic : public QWindow { public: Graphic(); std::vector renderables; std::vector painter_buffers; std::vector opengl_buffers; bool first_resize = true; protected: bool event(QEvent*) override; public: virtual void create_renderables() {}; void render() { if (first_resize) return; for (Opengl_Renderable* b : opengl_buffers) { b->draw(); } for (Painter_Renderable* b : painter_buffers) { b->draw(); b->update_texture(); } } }; } // namespace renderive