diff options
author | Laszlo Agocs <[email protected]> | 2020-05-06 18:25:23 +0200 |
---|---|---|
committer | Laszlo Agocs <[email protected]> | 2020-06-02 15:44:33 +0200 |
commit | bfa9e94600d4decdf0dfe8e522a5bf468a4a512e (patch) | |
tree | 6c9b925a053f1d4c74034e5078fc4810238ea894 | |
parent | 2efc801a13c775cd2377001fe3362e94edc0e97b (diff) |
Remove OpenGL FBO references in QQuickWindow and the renderer API
setRenderTarget(GLuint), setRenderTarget(QQuickFramebufferObject*),
renderScene(uint fboId), QSGBindable, etc. are now removed.
This leads to a simpler and cleaner interface in QSGAbstractRenderer and
QSGRenderer because the somewhat weird renderScene() overloading (where
one version is virtual, while the other isn't) is now avoided, with just
a single renderScene() virtual now.
Task-number: QTBUG-84040
Change-Id: I0ce5a159a557688bdfcb7cacf8a9d12d6fd970d1
Reviewed-by: Eirik Aavitsland <[email protected]>
19 files changed, 34 insertions, 307 deletions
diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp index 128072b6cd..9ec34141be 100644 --- a/src/quick/items/qquickwindow.cpp +++ b/src/quick/items/qquickwindow.cpp @@ -561,8 +561,7 @@ void QQuickWindowPrivate::syncSceneGraph() // Calculate the dpr the same way renderSceneGraph() will. qreal devicePixelRatio = q->effectiveDevicePixelRatio(); - const bool hasCustomRenderTarget = customRenderTargetGl.renderTargetId || redirect.rt.renderTarget; - if (hasCustomRenderTarget && !QQuickRenderControl::renderWindowFor(q)) + if (redirect.rt.renderTarget && !QQuickRenderControl::renderWindowFor(q)) devicePixelRatio = 1; QRhiCommandBuffer *cb = nullptr; @@ -667,17 +666,9 @@ void QQuickWindowPrivate::renderSceneGraph(const QSize &size, const QSize &surfa const bool flipY = rhi ? !rhi->isYUpInNDC() : false; if (flipY) matrixFlags |= QSGAbstractRenderer::MatrixTransformFlipY; - int fboId = 0; const qreal devicePixelRatio = q->effectiveDevicePixelRatio(); - const bool hasCustomRenderTarget = customRenderTargetGl.renderTargetId || redirect.rt.renderTarget; - if (hasCustomRenderTarget) { - QRect rect; - if (redirect.rt.renderTarget) { - rect = QRect(QPoint(0, 0), redirect.rt.renderTarget->pixelSize()); - } else { - fboId = customRenderTargetGl.renderTargetId; - rect = QRect(QPoint(0, 0), customRenderTargetGl.renderTargetSize); - } + if (redirect.rt.renderTarget) { + QRect rect(QPoint(0, 0), redirect.rt.renderTarget->pixelSize()); renderer->setDeviceRect(rect); renderer->setViewportRect(rect); if (QQuickRenderControl::renderWindowFor(q)) { @@ -704,10 +695,14 @@ void QQuickWindowPrivate::renderSceneGraph(const QSize &size, const QSize &surfa renderer->setDevicePixelRatio(devicePixelRatio); } - if (rhi) + if (rhi) { context->renderNextRhiFrame(renderer); - else - context->renderNextFrame(renderer, fboId); + } else { + // This is the software backend (or some custom scenegraph context + // plugin) in practice, because the default implementation always + // hits the QRhi-based path in Qt 6. + context->renderNextFrame(renderer); + } } emit q->afterRendering(); runAndClearJobs(&afterRenderingJobs); @@ -4176,122 +4171,6 @@ bool QQuickWindow::isSceneGraphInitialized() const you need to do something else before the window can be closed. */ -#if QT_CONFIG(opengl) -/*! - Sets the render target for this window to be \a fbo. - - The specified fbo must be created in the context of the window - or one that shares with it. - - \note - This function only has an effect when using the default OpenGL scene - graph adaptation. - - \note This function has no effect when running on the RHI graphics abstraction. - - \warning - This function can only be called from the thread doing - the rendering. - */ - -void QQuickWindow::setRenderTarget(QOpenGLFramebufferObject *fbo) -{ - Q_D(QQuickWindow); - if (d->rhi) - return; - - if (d->context && QThread::currentThread() != d->context->thread()) { - qWarning("QQuickWindow::setRenderTarget: Cannot set render target from outside the rendering thread"); - return; - } - - d->customRenderTargetGl.renderTarget = fbo; - if (fbo) { - d->customRenderTargetGl.renderTargetId = fbo->handle(); - d->customRenderTargetGl.renderTargetSize = fbo->size(); - } else { - d->customRenderTargetGl.renderTargetId = 0; - d->customRenderTargetGl.renderTargetSize = QSize(); - } -} -#endif -/*! - \overload - - Sets the render target for this window to be an FBO with - \a fboId and \a size. - - The specified FBO must be created in the context of the window - or one that shares with it. - - \note \a fboId can also be set to 0. In this case rendering will target the - default framebuffer of whichever surface is current when the scenegraph - renders. \a size must still be valid, specifying the dimensions of the - surface. - - \note - This function only has an effect when using the default OpenGL scene - graph adaptation. - - \warning - This function can only be called from the thread doing - the rendering. -*/ - -void QQuickWindow::setRenderTarget(uint fboId, const QSize &size) -{ - Q_D(QQuickWindow); - if (d->context && QThread::currentThread() != d->context->thread()) { - qWarning("QQuickWindow::setRenderThread: Cannot set render target from outside the rendering thread"); - return; - } - - d->customRenderTargetGl.renderTargetId = fboId; - d->customRenderTargetGl.renderTargetSize = size; - - // Unset any previously set instance... - d->customRenderTargetGl.renderTarget = nullptr; -} - - -/*! - Returns the FBO id of the render target when set; otherwise returns 0. - */ -uint QQuickWindow::renderTargetId() const -{ - Q_D(const QQuickWindow); - return d->customRenderTargetGl.renderTargetId; -} - -/*! - Returns the size of the currently set render target; otherwise returns an empty size. - */ -QSize QQuickWindow::renderTargetSize() const -{ - Q_D(const QQuickWindow); - return d->customRenderTargetGl.renderTargetSize; -} - -#if QT_CONFIG(opengl) -/*! - Returns the render target for this window. - - The default is to render to the surface of the window, in which - case the render target is 0. - - \note This function will return nullptr when not using the OpenGL scene - graph adaptation. - - \note This function has no effect and returns nullptr when running on the - RHI graphics abstraction. - */ -QOpenGLFramebufferObject *QQuickWindow::renderTarget() const -{ - Q_D(const QQuickWindow); - return d->customRenderTargetGl.renderTarget; -} -#endif - /*! Sets the render target for this window to be \a target. diff --git a/src/quick/items/qquickwindow.h b/src/quick/items/qquickwindow.h index 820b53cce9..e78e56b1de 100644 --- a/src/quick/items/qquickwindow.h +++ b/src/quick/items/qquickwindow.h @@ -58,7 +58,6 @@ class QInputMethodEvent; class QQuickWindowPrivate; class QQuickWindowAttached; class QOpenGLContext; -class QOpenGLFramebufferObject; class QQmlIncubationController; class QInputMethodEvent; class QQuickCloseEvent; @@ -133,15 +132,6 @@ public: QImage grabWindow(); - // ### Qt 6 remove all these 5 functions. Replaced by setRenderTarget(QQuickRenderTarget*). -#if QT_CONFIG(opengl) - void setRenderTarget(QOpenGLFramebufferObject *fbo); - QOpenGLFramebufferObject *renderTarget() const; -#endif - void setRenderTarget(uint fboId, const QSize &size); - uint renderTargetId() const; - QSize renderTargetSize() const; - void setRenderTarget(const QQuickRenderTarget &target); #if QT_CONFIG(opengl) diff --git a/src/quick/items/qquickwindow_p.h b/src/quick/items/qquickwindow_p.h index 3d629cd74f..afc47ce848 100644 --- a/src/quick/items/qquickwindow_p.h +++ b/src/quick/items/qquickwindow_p.h @@ -306,13 +306,6 @@ public: QQuickGraphicsDevice customDeviceObjects; - // ### Qt 6 remove - struct { - QOpenGLFramebufferObject *renderTarget = nullptr; - uint renderTargetId = 0; - QSize renderTargetSize; - } customRenderTargetGl; - QOpenGLVertexArrayObjectHelper *vaoHelper; // ### Qt 6 remove mutable QQuickWindowIncubationController *incubationController; diff --git a/src/quick/scenegraph/adaptations/software/qsgsoftwarecontext.cpp b/src/quick/scenegraph/adaptations/software/qsgsoftwarecontext.cpp index 91c26780b1..4cb016562f 100644 --- a/src/quick/scenegraph/adaptations/software/qsgsoftwarecontext.cpp +++ b/src/quick/scenegraph/adaptations/software/qsgsoftwarecontext.cpp @@ -157,9 +157,9 @@ QSGRenderer *QSGSoftwareRenderContext::createRenderer() } -void QSGSoftwareRenderContext::renderNextFrame(QSGRenderer *renderer, uint fbo) +void QSGSoftwareRenderContext::renderNextFrame(QSGRenderer *renderer) { - renderer->renderScene(fbo); + renderer->renderScene(); } int QSGSoftwareRenderContext::maxTextureSize() const diff --git a/src/quick/scenegraph/adaptations/software/qsgsoftwarecontext_p.h b/src/quick/scenegraph/adaptations/software/qsgsoftwarecontext_p.h index 84f468ce33..22f64bc70c 100644 --- a/src/quick/scenegraph/adaptations/software/qsgsoftwarecontext_p.h +++ b/src/quick/scenegraph/adaptations/software/qsgsoftwarecontext_p.h @@ -72,7 +72,7 @@ public: QSGSoftwareRenderContext(QSGContext *ctx); void initializeIfNeeded(); void invalidate() override; - void renderNextFrame(QSGRenderer *renderer, uint fbo) override; + void renderNextFrame(QSGRenderer *renderer) override; QSGTexture *createTexture(const QImage &image, uint flags = CreateTexture_Alpha) const override; QSGRenderer *createRenderer() override; int maxTextureSize() const override; diff --git a/src/quick/scenegraph/adaptations/software/qsgsoftwarepixmaprenderer.cpp b/src/quick/scenegraph/adaptations/software/qsgsoftwarepixmaprenderer.cpp index 4a6d73ec59..bdb23656fd 100644 --- a/src/quick/scenegraph/adaptations/software/qsgsoftwarepixmaprenderer.cpp +++ b/src/quick/scenegraph/adaptations/software/qsgsoftwarepixmaprenderer.cpp @@ -59,14 +59,9 @@ QSGSoftwarePixmapRenderer::~QSGSoftwarePixmapRenderer() } -void QSGSoftwarePixmapRenderer::renderScene(uint) +void QSGSoftwarePixmapRenderer::renderScene() { - class B : public QSGBindable - { - public: - void bind() const override { } - } bindable; - QSGRenderer::renderScene(bindable); + QSGRenderer::renderScene(); } void QSGSoftwarePixmapRenderer::render() diff --git a/src/quick/scenegraph/adaptations/software/qsgsoftwarepixmaprenderer_p.h b/src/quick/scenegraph/adaptations/software/qsgsoftwarepixmaprenderer_p.h index 3b4fb304e7..2d042dae41 100644 --- a/src/quick/scenegraph/adaptations/software/qsgsoftwarepixmaprenderer_p.h +++ b/src/quick/scenegraph/adaptations/software/qsgsoftwarepixmaprenderer_p.h @@ -61,7 +61,7 @@ public: QSGSoftwarePixmapRenderer(QSGRenderContext *context); virtual ~QSGSoftwarePixmapRenderer(); - void renderScene(uint fboId = 0) final; + void renderScene() final; void render() final; void render(QPaintDevice *target); diff --git a/src/quick/scenegraph/adaptations/software/qsgsoftwarerenderer.cpp b/src/quick/scenegraph/adaptations/software/qsgsoftwarerenderer.cpp index df129cbfee..af12df26ab 100644 --- a/src/quick/scenegraph/adaptations/software/qsgsoftwarerenderer.cpp +++ b/src/quick/scenegraph/adaptations/software/qsgsoftwarerenderer.cpp @@ -85,14 +85,9 @@ QRegion QSGSoftwareRenderer::flushRegion() const return m_flushRegion; } -void QSGSoftwareRenderer::renderScene(uint) +void QSGSoftwareRenderer::renderScene() { - class B : public QSGBindable - { - public: - void bind() const override { } - } bindable; - QSGRenderer::renderScene(bindable); + QSGRenderer::renderScene(); } void QSGSoftwareRenderer::render() diff --git a/src/quick/scenegraph/adaptations/software/qsgsoftwarerenderer_p.h b/src/quick/scenegraph/adaptations/software/qsgsoftwarerenderer_p.h index bb28da4ca5..3730625a54 100644 --- a/src/quick/scenegraph/adaptations/software/qsgsoftwarerenderer_p.h +++ b/src/quick/scenegraph/adaptations/software/qsgsoftwarerenderer_p.h @@ -70,7 +70,7 @@ public: QRegion flushRegion() const; protected: - void renderScene(uint fboId = 0) final; + void renderScene() final; void render() final; private: diff --git a/src/quick/scenegraph/coreapi/qsgabstractrenderer.cpp b/src/quick/scenegraph/coreapi/qsgabstractrenderer.cpp index 502ee27e27..dba1d8406a 100644 --- a/src/quick/scenegraph/coreapi/qsgabstractrenderer.cpp +++ b/src/quick/scenegraph/coreapi/qsgabstractrenderer.cpp @@ -79,17 +79,9 @@ QT_BEGIN_NAMESPACE */ /*! - \fn void QSGAbstractRenderer::renderScene(GLuint fboId = 0) + \fn void QSGAbstractRenderer::renderScene() - Render the scene to the specified \a fboId - - If \a fboId isn't specified, the scene graph will be rendered - to the default framebuffer. You will have to call - QOpenGLContext::swapBuffers() yourself afterward. - - The framebuffer specified by \a fboId will be bound automatically. - - \sa QOpenGLContext::swapBuffers(), QOpenGLFramebufferObject::handle() + Renders the scene. */ /*! diff --git a/src/quick/scenegraph/coreapi/qsgabstractrenderer_p.h b/src/quick/scenegraph/coreapi/qsgabstractrenderer_p.h index 5d48f18310..83084cbd0f 100644 --- a/src/quick/scenegraph/coreapi/qsgabstractrenderer_p.h +++ b/src/quick/scenegraph/coreapi/qsgabstractrenderer_p.h @@ -107,7 +107,7 @@ public: void setClearMode(ClearMode mode); ClearMode clearMode() const; - virtual void renderScene(GLuint fboId = 0) = 0; + virtual void renderScene() = 0; Q_SIGNALS: void sceneGraphChanged(); diff --git a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp index 5863af85d3..bec693ed99 100644 --- a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp +++ b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp @@ -3488,6 +3488,9 @@ void Renderer::deleteRemovedElements() void Renderer::render() { + if (!renderTarget()) + return; + if (Q_UNLIKELY(debug_dump())) { qDebug("\n"); QSGNodeDumper::dump(rootNode()); diff --git a/src/quick/scenegraph/coreapi/qsgrenderer.cpp b/src/quick/scenegraph/coreapi/qsgrenderer.cpp index cd16014d41..4a7d2ce31d 100644 --- a/src/quick/scenegraph/coreapi/qsgrenderer.cpp +++ b/src/quick/scenegraph/coreapi/qsgrenderer.cpp @@ -39,11 +39,6 @@ #include "qsgrenderer_p.h" #include "qsgnodeupdater_p.h" -#if QT_CONFIG(opengl) -# include <QOpenGLFramebufferObject> -# include <QOpenGLContext> -# include <QOpenGLFunctions> -#endif #include <private/qquickprofiler_p.h> #include <qtquick_tracepoints_p.h> @@ -68,38 +63,6 @@ int qt_sg_envInt(const char *name, int defaultValue) return ok ? value : defaultValue; } -void QSGBindable::clear(QSGAbstractRenderer::ClearMode mode) const -{ -#if QT_CONFIG(opengl) - GLuint bits = 0; - if (mode & QSGAbstractRenderer::ClearColorBuffer) bits |= GL_COLOR_BUFFER_BIT; - if (mode & QSGAbstractRenderer::ClearDepthBuffer) bits |= GL_DEPTH_BUFFER_BIT; - if (mode & QSGAbstractRenderer::ClearStencilBuffer) bits |= GL_STENCIL_BUFFER_BIT; - QOpenGLContext::currentContext()->functions()->glClear(bits); -#else - Q_UNUSED(mode) -#endif -} - -// Reactivate the color buffer after switching to the stencil. -void QSGBindable::reactivate() const -{ -#if QT_CONFIG(opengl) - QOpenGLContext::currentContext()->functions()->glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); -#endif -} -#if QT_CONFIG(opengl) -QSGBindableFboId::QSGBindableFboId(GLuint id) - : m_id(id) -{ -} - - -void QSGBindableFboId::bind() const -{ - QOpenGLContext::currentContext()->functions()->glBindFramebuffer(GL_FRAMEBUFFER, m_id); -} -#endif /*! \class QSGRenderer \brief The renderer class is the abstract baseclass used for rendering the @@ -140,7 +103,6 @@ QSGRenderer::QSGRenderer(QSGRenderContext *context) , m_cb(nullptr) , m_rp_desc(nullptr) , m_node_updater(nullptr) - , m_bindable(nullptr) , m_changed_emitted(false) , m_is_rendering(false) , m_is_preprocessing(false) @@ -189,35 +151,7 @@ bool QSGRenderer::isMirrored() const return matrix(0, 0) * matrix(1, 1) - matrix(0, 1) * matrix(1, 0) > 0; } -void QSGRenderer::renderScene(uint fboId) -{ - if (m_rt) { - class B : public QSGBindable - { - public: - void bind() const override { } - } bindable; - renderScene(bindable); - } else { -#if QT_CONFIG(opengl) - if (fboId) { - QSGBindableFboId bindable(fboId); - renderScene(bindable); - } else { - class B : public QSGBindable - { - public: - void bind() const override { QOpenGLFramebufferObject::bindDefault(); } - } bindable; - renderScene(bindable); - } -#else - Q_UNUSED(fboId) -#endif - } -} - -void QSGRenderer::renderScene(const QSGBindable &bindable) +void QSGRenderer::renderScene() { if (!rootNode()) return; @@ -225,42 +159,16 @@ void QSGRenderer::renderScene(const QSGBindable &bindable) Q_TRACE_SCOPE(QSG_renderScene); m_is_rendering = true; - bool profileFrames = QSG_LOG_TIME_RENDERER().isDebugEnabled(); if (profileFrames) frameTimer.start(); Q_QUICK_SG_PROFILE_START(QQuickProfiler::SceneGraphRendererFrame); - qint64 bindTime = 0; qint64 renderTime = 0; - m_bindable = &bindable; preprocess(); - Q_TRACE(QSG_binding_entry); - bindable.bind(); - if (profileFrames) - bindTime = frameTimer.nsecsElapsed(); - Q_TRACE(QSG_binding_exit); - Q_QUICK_SG_PROFILE_RECORD(QQuickProfiler::SceneGraphRendererFrame, - QQuickProfiler::SceneGraphRendererBinding); Q_TRACE(QSG_render_entry); - -#if QT_CONFIG(opengl) - // Sanity check that attribute registers are disabled - if (qsg_sanity_check) { - GLint count = 0; - QOpenGLContext::currentContext()->functions()->glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &count); - GLint enabled; - for (int i=0; i<count; ++i) { - QOpenGLContext::currentContext()->functions()->glGetVertexAttribiv(i, GL_VERTEX_ATTRIB_ARRAY_ENABLED, &enabled); - if (enabled) { - qWarning("QSGRenderer: attribute %d is enabled, this can lead to memory corruption and crashes.", i); - } - } - } -#endif - render(); if (profileFrames) renderTime = frameTimer.nsecsElapsed(); @@ -270,15 +178,13 @@ void QSGRenderer::renderScene(const QSGBindable &bindable) m_is_rendering = false; m_changed_emitted = false; - m_bindable = nullptr; qCDebug(QSG_LOG_TIME_RENDERER, - "time in renderer: total=%dms, preprocess=%d, updates=%d, binding=%d, rendering=%d", + "time in renderer: total=%dms, preprocess=%d, updates=%d, rendering=%d", int(renderTime / 1000000), int(preprocessTime / 1000000), int((updatePassTime - preprocessTime) / 1000000), - int((bindTime - updatePassTime) / 1000000), - int((renderTime - bindTime) / 1000000)); + int((renderTime - updatePassTime) / 1000000)); } /*! diff --git a/src/quick/scenegraph/coreapi/qsgrenderer_p.h b/src/quick/scenegraph/coreapi/qsgrenderer_p.h index f9d7d3a65a..08a8325dbb 100644 --- a/src/quick/scenegraph/coreapi/qsgrenderer_p.h +++ b/src/quick/scenegraph/coreapi/qsgrenderer_p.h @@ -59,7 +59,6 @@ QT_BEGIN_NAMESPACE -class QSGBindable; class QSGNodeUpdater; class QRhiRenderTarget; class QRhiCommandBuffer; @@ -87,8 +86,7 @@ public: QSGRenderContext *context() const { return m_context; } bool isMirrored() const; - void renderScene(const QSGBindable &bindable); - void renderScene(uint fboId = 0) override; + void renderScene() override; void nodeChanged(QSGNode *node, QSGNode::DirtyState state) override; QSGNodeUpdater *nodeUpdater() const; @@ -127,8 +125,6 @@ public: protected: virtual void render() = 0; - const QSGBindable *bindable() const { return m_bindable; } - virtual void preprocess(); void addNodesToPreprocess(QSGNode *node); @@ -161,33 +157,11 @@ private: QSet<QSGNode *> m_nodes_to_preprocess; QSet<QSGNode *> m_nodes_dont_preprocess; - const QSGBindable *m_bindable; - uint m_changed_emitted : 1; uint m_is_rendering : 1; uint m_is_preprocessing : 1; }; -class Q_QUICK_PRIVATE_EXPORT QSGBindable -{ -public: - virtual ~QSGBindable() { } - virtual void bind() const = 0; - virtual void clear(QSGAbstractRenderer::ClearMode mode) const; - virtual void reactivate() const; -}; -#if QT_CONFIG(opengl) -class QSGBindableFboId : public QSGBindable -{ -public: - QSGBindableFboId(GLuint); - void bind() const override; -private: - GLuint m_id; -}; -#endif - - QSGMaterialShader::RenderState QSGRenderer::state(QSGMaterialShader::RenderState::DirtyStates dirty) const { QSGMaterialShader::RenderState s; diff --git a/src/quick/scenegraph/qsgcontext_p.h b/src/quick/scenegraph/qsgcontext_p.h index a2cb21a60c..1696ee9cba 100644 --- a/src/quick/scenegraph/qsgcontext_p.h +++ b/src/quick/scenegraph/qsgcontext_p.h @@ -178,7 +178,7 @@ public: RenderPassCallback mainPassRecordingStart, RenderPassCallback mainPassRecordingEnd, void *callbackUserData); - virtual void renderNextFrame(QSGRenderer *renderer, uint fboId) = 0; + virtual void renderNextFrame(QSGRenderer *renderer) = 0; virtual void endNextFrame(QSGRenderer *renderer); virtual void beginNextRhiFrame(QSGRenderer *renderer, diff --git a/src/quick/scenegraph/qsgdefaultcontext.cpp b/src/quick/scenegraph/qsgdefaultcontext.cpp index 5204c3ecfc..fee1a8449e 100644 --- a/src/quick/scenegraph/qsgdefaultcontext.cpp +++ b/src/quick/scenegraph/qsgdefaultcontext.cpp @@ -57,7 +57,6 @@ #include <QtQuick/private/qsgrhishadereffectnode_p.h> #include <QOpenGLContext> -#include <QOpenGLFramebufferObject> #include <QtQuick/private/qquickwindow_p.h> #include <QtQuick/private/qquickitem_p.h> diff --git a/src/quick/scenegraph/qsgdefaultrendercontext.cpp b/src/quick/scenegraph/qsgdefaultrendercontext.cpp index be110b5de5..0214b1b94c 100644 --- a/src/quick/scenegraph/qsgdefaultrendercontext.cpp +++ b/src/quick/scenegraph/qsgdefaultrendercontext.cpp @@ -231,12 +231,12 @@ void QSGDefaultRenderContext::beginNextFrame(QSGRenderer *renderer, renderer->setRenderPassRecordingCallbacks(mainPassRecordingStart, mainPassRecordingEnd, callbackUserData); } -void QSGDefaultRenderContext::renderNextFrame(QSGRenderer *renderer, uint fboId) +void QSGDefaultRenderContext::renderNextFrame(QSGRenderer *renderer) { if (m_serializedRender) qsg_framerender_mutex.lock(); - renderer->renderScene(fboId); + renderer->renderScene(); if (m_serializedRender) qsg_framerender_mutex.unlock(); diff --git a/src/quick/scenegraph/qsgdefaultrendercontext_p.h b/src/quick/scenegraph/qsgdefaultrendercontext_p.h index b6ed57ba6a..a2d3a1b20c 100644 --- a/src/quick/scenegraph/qsgdefaultrendercontext_p.h +++ b/src/quick/scenegraph/qsgdefaultrendercontext_p.h @@ -109,7 +109,7 @@ public: RenderPassCallback mainPassRecordingStart, RenderPassCallback mainPassRecordingEnd, void *callbackUserData) override; - void renderNextFrame(QSGRenderer *renderer, uint fboId) override; + void renderNextFrame(QSGRenderer *renderer) override; void endNextFrame(QSGRenderer *renderer) override; void beginNextRhiFrame(QSGRenderer *renderer, diff --git a/src/quickwidgets/qquickwidget_p.h b/src/quickwidgets/qquickwidget_p.h index 0517a772e1..1ba77520a8 100644 --- a/src/quickwidgets/qquickwidget_p.h +++ b/src/quickwidgets/qquickwidget_p.h @@ -73,6 +73,7 @@ class QQmlComponent; class QQuickRenderControl; class QOpenGLContext; class QOffscreenSurface; +class QOpenGLFramebufferObject; class QQuickWidgetPrivate : public QWidgetPrivate, |