60 lines
1.6 KiB
C++
60 lines
1.6 KiB
C++
#pragma once
|
|
#include <QWindow>
|
|
#include <memory>
|
|
#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<QPixmap> buffer1{};
|
|
std::unique_ptr<QPixmap> buffer2{};
|
|
bool it = true;
|
|
void resize_buffers(const QSize& size) {
|
|
buffer1 = std::make_unique<QPixmap>(size);
|
|
buffer2 = std::make_unique<QPixmap>(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<Graphic_Renderable*> renderables;
|
|
std::vector<Painter_Renderable*> painter_buffers;
|
|
std::vector<Opengl_Renderable*> 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
|