-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Description
Anyone having luck porting this to Qt6?
I have no idea what i'm doing, but i got it compiling with this:
diff --git a/main.cpp b/main.cpp
index da016e2..1f0ea25 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,12 +1,14 @@
#include <QGuiApplication>
#include <QCommandLineParser>
#include <QStringList>
+#include <QSGRendererInterface>
#include "oledrenderer.h"
#include "ssd1306driver.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
+ QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGL);
qApp->setApplicationName("QML OLED Renderer");
QCommandLineParser parser;
diff --git a/oledrenderer.cpp b/oledrenderer.cpp
index 0fd41e2..5ced985 100644
--- a/oledrenderer.cpp
+++ b/oledrenderer.cpp
@@ -1,6 +1,8 @@
#include "oledrenderer.h"
#include <QSurfaceFormat>
+#include <QQuickGraphicsDevice>
+#include <QQuickRenderTarget>
OledRenderer::OledRenderer(QObject *parent)
: QObject(parent)
@@ -38,7 +40,10 @@ OledRenderer::OledRenderer(QObject *parent)
m_qmlEngine->setIncubationController(m_quickWindow->incubationController());
m_context->makeCurrent(m_offscreenSurface);
- m_renderControl->initialize(m_context);
+
+ m_quickWindow->setGraphicsDevice(QQuickGraphicsDevice::fromOpenGLContext(m_context));
+ if (!m_renderControl->initialize())
+ qWarning("Failed to initialize redirected Qt Quick rendering");
}
OledRenderer::~OledRenderer()
@@ -114,7 +119,10 @@ void OledRenderer::cleanup()
void OledRenderer::createFbo()
{
m_fbo = new QOpenGLFramebufferObject(m_size * m_dpr, QOpenGLFramebufferObject::CombinedDepthStencil);
- m_quickWindow->setRenderTarget(m_fbo);
+
+ QQuickRenderTarget rt = QQuickRenderTarget::fromOpenGLRenderBuffer(m_fbo->handle(), m_fbo->size() ,1);
+
+ m_quickWindow->setRenderTarget(rt);
}
void OledRenderer::destroyFbo()
@@ -166,9 +174,11 @@ bool OledRenderer::loadQml(const QString &qmlFile, const QSize &size)
void OledRenderer::renderNext()
{
// Polish, synchronize and render the next frame (into our fbo).
+ m_renderControl->beginFrame();
m_renderControl->polishItems();
m_renderControl->sync();
m_renderControl->render();
+ m_renderControl->endFrame();
m_context->functions()->glFlush();
diff --git a/qml-oled-renderer.pro b/qml-oled-renderer.pro
index 46cb107..d41c21d 100644
--- a/qml-oled-renderer.pro
+++ b/qml-oled-renderer.pro
@@ -1,7 +1,7 @@
TEMPLATE = app
QT += qml quick
-CONFIG += c++11
+CONFIG += c++17
SOURCES += main.cpp \
oledrenderer.cpp \Yet running shows a scrambled oled output and following errors:
screen 0 shmid 12
Device: /dev/i2c-1 (I2C_FUNC_I2C I2C_FUNC_SMBUS_BYTE �)
Framebuffer incomplete: 0x8cd6
Failed to build texture render target for QQuickRenderTarget
QQuickWindow: No render target (neither swapchain nor custom target was provided)
QQuickWindow: No render target (neither swapchain nor custom target was provided)
QQuickWindow: No render target (neither swapchain nor custom target was provided)
# last line repeated for every renderNext()
FWIW, i'm trying this on raspberry pi 4 and the qt5 code works.
Metadata
Metadata
Assignees
Labels
No labels