From 30376341d154cff167d5fa290c2e728cf7bf0d05 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Fri, 17 Dec 2021 12:17:54 +0600 Subject: [PATCH] Start of windowed OpenGL rendering --- src/qt/qt_hardwarerenderer.cpp | 10 +++++++--- src/qt/qt_hardwarerenderer.hpp | 11 +++++++---- src/qt/qt_rendererstack.cpp | 10 ++++++---- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/qt/qt_hardwarerenderer.cpp b/src/qt/qt_hardwarerenderer.cpp index d1bd781ae..856577d50 100644 --- a/src/qt/qt_hardwarerenderer.cpp +++ b/src/qt/qt_hardwarerenderer.cpp @@ -17,6 +17,12 @@ void HardwareRenderer::initializeGL() } void HardwareRenderer::paintGL() { + //onPaint(this); +} + +void HardwareRenderer::paintUnderGL() { + glClearColor(0.f, 0.f, 0.f, 1.f); + glClear(GL_COLOR_BUFFER_BIT); onPaint(this); } @@ -24,11 +30,9 @@ void HardwareRenderer::setRenderType(RenderType type) { QSurfaceFormat format; switch (type) { case RenderType::OpenGL: - setTextureFormat(GL_RGB); format.setRenderableType(QSurfaceFormat::OpenGL); break; case RenderType::OpenGLES: - setTextureFormat((QApplication::platformName().contains("wayland") || QApplication::platformName() == "cocoa") ? GL_RGB : GL_RGBA); format.setRenderableType(QSurfaceFormat::OpenGLES); break; } @@ -45,5 +49,5 @@ void HardwareRenderer::onBlit(const QImage& img, int x, int y, int w, int h, std void HardwareRenderer::resizeEvent(QResizeEvent *event) { onResize(width(), height()); - QOpenGLWidget::resizeEvent(event); + QOpenGLWindow::resizeEvent(event); } diff --git a/src/qt/qt_hardwarerenderer.hpp b/src/qt/qt_hardwarerenderer.hpp index fa9e7ec31..a1bd4ff86 100644 --- a/src/qt/qt_hardwarerenderer.hpp +++ b/src/qt/qt_hardwarerenderer.hpp @@ -2,6 +2,7 @@ #include #include +#include #include #include #include @@ -16,7 +17,7 @@ #include "wl_mouse.hpp" #endif -class HardwareRenderer : public QOpenGLWidget, protected QOpenGLFunctions, public RendererCommon +class HardwareRenderer : public QOpenGLWindow, protected QOpenGLFunctions, public RendererCommon { Q_OBJECT @@ -26,10 +27,12 @@ public: void resizeGL(int w, int h) override; void initializeGL() override; void paintGL() override; - HardwareRenderer(QWidget* parent = nullptr) - : QOpenGLWidget(parent), QOpenGLFunctions() + void paintUnderGL() override; + HardwareRenderer(QWindow* parent = nullptr) + : QOpenGLWindow(QOpenGLWindow::PartialUpdateBlend, parent), QOpenGLFunctions() { - setMinimumSize(16, 16); + setMinimumSize(QSize(16, 16)); + setFlags(Qt::FramelessWindowHint); } ~HardwareRenderer() { diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index 23f61f186..0b89f258d 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -183,18 +183,20 @@ void RendererStack::switchRenderer(Renderer renderer) { break; case Renderer::OpenGL: { - auto hw = new HardwareRenderer(this); + this->createWinId(); + auto hw = new HardwareRenderer(this->windowHandle()); connect(this, &RendererStack::blitToRenderer, hw, &HardwareRenderer::onBlit, Qt::QueuedConnection); hw->setRenderType(HardwareRenderer::RenderType::OpenGL); - current.reset(hw); + current.reset(this->createWindowContainer(hw, this)); break; } case Renderer::OpenGLES: { - auto hw = new HardwareRenderer(this); + this->createWinId(); + auto hw = new HardwareRenderer(this->windowHandle()); connect(this, &RendererStack::blitToRenderer, hw, &HardwareRenderer::onBlit, Qt::QueuedConnection); hw->setRenderType(HardwareRenderer::RenderType::OpenGLES); - current.reset(hw); + current.reset(this->createWindowContainer(hw, this)); break; } }