#pragma once #include #include "../GlobalTypes.h" namespace YSG{ class LIB_DECL GraphicLayer { public: }; class PainterLayer : public GraphicLayer{ public: QPixmap *mBuffer1{}; QPixmap *mBuffer2{}; bool it = true; void draw() { it = !it; QPixmap* cur = it ? mBuffer1 : mBuffer2; QPainter painter(cur); painter.fillRect(cur->rect(), Qt::red); } void updateTexture() { QPixmap* cur = it ? mBuffer1 : mBuffer2; } }; class LIB_DECL OpenglLayer : public GraphicLayer { public: void draw(); }; class Graphic : public QWindow { public: Graphic(); QVector mLayers; QVector mPainterBuffers; QVector mOpenglBuffers; SpinLock mPainterRenderMtx, mResizeMtx; bool mFirstResize; protected: bool event(QEvent*) override; public: virtual void createLayers() { }; void render() { if(mFirstResize) return; SpinLockGuard g(&mResizeMtx); for(OpenglLayer* b : mOpenglBuffers) { b->draw(); } // 插入opengl同步变量 for(PainterLayer* b : mPainterBuffers) { b->draw(); b->updateTexture(); } // 等待opengl同步变量 // opengl汇总绘制 } }; }