aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@qt.io>2020-05-06 18:25:23 +0200
committerLaszlo Agocs <laszlo.agocs@qt.io>2020-06-02 15:44:33 +0200
commitbfa9e94600d4decdf0dfe8e522a5bf468a4a512e (patch)
tree6c9b925a053f1d4c74034e5078fc4810238ea894
parent2efc801a13c775cd2377001fe3362e94edc0e97b (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 <eirik.aavitsland@qt.io>
-rw-r--r--src/quick/items/qquickwindow.cpp141
-rw-r--r--src/quick/items/qquickwindow.h10
-rw-r--r--src/quick/items/qquickwindow_p.h7
-rw-r--r--src/quick/scenegraph/adaptations/software/qsgsoftwarecontext.cpp4
-rw-r--r--src/quick/scenegraph/adaptations/software/qsgsoftwarecontext_p.h2
-rw-r--r--src/quick/scenegraph/adaptations/software/qsgsoftwarepixmaprenderer.cpp9
-rw-r--r--src/quick/scenegraph/adaptations/software/qsgsoftwarepixmaprenderer_p.h2
-rw-r--r--src/quick/scenegraph/adaptations/software/qsgsoftwarerenderer.cpp9
-rw-r--r--src/quick/scenegraph/adaptations/software/qsgsoftwarerenderer_p.h2
-rw-r--r--src/quick/scenegraph/coreapi/qsgabstractrenderer.cpp12
-rw-r--r--src/quick/scenegraph/coreapi/qsgabstractrenderer_p.h2
-rw-r--r--src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp3
-rw-r--r--src/quick/scenegraph/coreapi/qsgrenderer.cpp100
-rw-r--r--src/quick/scenegraph/coreapi/qsgrenderer_p.h28
-rw-r--r--src/quick/scenegraph/qsgcontext_p.h2
-rw-r--r--src/quick/scenegraph/qsgdefaultcontext.cpp1
-rw-r--r--src/quick/scenegraph/qsgdefaultrendercontext.cpp4
-rw-r--r--src/quick/scenegraph/qsgdefaultrendercontext_p.h2
-rw-r--r--src/quickwidgets/qquickwidget_p.h1
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,