Files
Renderive/Widget/base/Graphic.h
T
2026-07-29 18:08:57 +08:00

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