Files
Renderive/Widget/base/Graphic.h
T
2026-08-01 20:09:45 +08:00

58 lines
1.5 KiB
C++

#pragma once
#include "./global.h"
namespace Flex_Qt {
class WIDGET_API 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 WIDGET_API 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();
}
}
};
} // Flex_Qt