diff options
author | Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> | 2020-06-11 12:35:04 +0200 |
---|---|---|
committer | Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> | 2020-06-11 22:23:48 +0200 |
commit | 2cb24f7054e1105be0dcb1a4d61a5b52d62d1a55 (patch) | |
tree | 6e059ba5184c0e7b618a874f581dfc63ed0e3f06 | |
parent | 66056aba7b47c147b4cf9fd70a855dd15b8a9eb6 (diff) |
Move QSGRenderContext::RenderMode to QSGRendererInterface
We want to be able to use this enum from the public API, so we move
it out to a suitable public class.
Task-number: QTBUG-84695
Change-Id: I8a3860ecfd0da7990941540bcf39fb0c2bf0ff83
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
11 files changed, 37 insertions, 27 deletions
diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp index 39f85e1f6d..f7bebeff5a 100644 --- a/src/quick/items/qquickwindow.cpp +++ b/src/quick/items/qquickwindow.cpp @@ -584,8 +584,8 @@ void QQuickWindowPrivate::syncSceneGraph() QSGRootNode *rootNode = new QSGRootNode; rootNode->appendChildNode(QQuickItemPrivate::get(contentItem)->itemNode()); static const bool useDepth = qEnvironmentVariableIsEmpty("QSG_NO_DEPTH_BUFFER"); - static const QSGRenderContext::RenderMode renderMode = useDepth ? QSGRenderContext::RenderMode2D - : QSGRenderContext::RenderMode2DNoDepthBuffer; + static const QSGRendererInterface::RenderMode renderMode = useDepth ? QSGRendererInterface::RenderMode2D + : QSGRendererInterface::RenderMode2DNoDepthBuffer; renderer = context->createRenderer(renderMode); renderer->setRootNode(rootNode); } diff --git a/src/quick/scenegraph/adaptations/software/qsgsoftwarecontext.cpp b/src/quick/scenegraph/adaptations/software/qsgsoftwarecontext.cpp index 4f61e615f6..cb2af431f8 100644 --- a/src/quick/scenegraph/adaptations/software/qsgsoftwarecontext.cpp +++ b/src/quick/scenegraph/adaptations/software/qsgsoftwarecontext.cpp @@ -151,7 +151,7 @@ QSGTexture *QSGSoftwareRenderContext::createTexture(const QImage &image, uint fl return new QSGSoftwarePixmapTexture(image, flags); } -QSGRenderer *QSGSoftwareRenderContext::createRenderer(RenderMode) +QSGRenderer *QSGSoftwareRenderContext::createRenderer(QSGRendererInterface::RenderMode) { return new QSGSoftwareRenderer(this); } diff --git a/src/quick/scenegraph/adaptations/software/qsgsoftwarecontext_p.h b/src/quick/scenegraph/adaptations/software/qsgsoftwarecontext_p.h index c523bfbb13..feb664cfd1 100644 --- a/src/quick/scenegraph/adaptations/software/qsgsoftwarecontext_p.h +++ b/src/quick/scenegraph/adaptations/software/qsgsoftwarecontext_p.h @@ -74,7 +74,7 @@ public: void invalidate() override; void renderNextFrame(QSGRenderer *renderer) override; QSGTexture *createTexture(const QImage &image, uint flags = CreateTexture_Alpha) const override; - QSGRenderer *createRenderer(RenderMode) override; + QSGRenderer *createRenderer(QSGRendererInterface::RenderMode) override; int maxTextureSize() const override; bool m_initialized; diff --git a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp index b4b027aea6..b2d8ab5ff0 100644 --- a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp +++ b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp @@ -888,7 +888,7 @@ static int qsg_countNodesInBatches(const QDataBuffer<Batch *> &batches) return sum; } -Renderer::Renderer(QSGDefaultRenderContext *ctx, QSGRenderContext::RenderMode renderMode) +Renderer::Renderer(QSGDefaultRenderContext *ctx, QSGRendererInterface::RenderMode renderMode) : QSGRenderer(ctx) , m_context(ctx) , m_renderMode(renderMode) @@ -2958,7 +2958,7 @@ bool Renderer::prepareRenderMergedBatch(Batch *batch, PreparedRenderBatch *rende m_current_projection_matrix_native_ndc = projectionMatrixWithNativeNDC(); QSGMaterial *material = gn->activeMaterial(); - if (m_renderMode != QSGRenderContext::RenderMode3D) + if (m_renderMode != QSGRendererInterface::RenderMode3D) updateClipState(gn->clipList(), batch); const QSGGeometry *g = gn->geometry(); @@ -3035,7 +3035,7 @@ bool Renderer::prepareRenderMergedBatch(Batch *batch, PreparedRenderBatch *rende if (!hasPipeline) return false; - if (m_renderMode == QSGRenderContext::RenderMode3D) { + if (m_renderMode == QSGRendererInterface::RenderMode3D) { m_gstateStack.push(m_gstate); setStateForDepthPostPass(); ensurePipelineState(e, sms, true); @@ -3131,7 +3131,7 @@ bool Renderer::prepareRenderUnmergedBatch(Batch *batch, PreparedRenderBatch *ren m_current_projection_matrix_native_ndc = projectionMatrixWithNativeNDC(); QSGGeometryNode *gn = e->node; - if (m_renderMode != QSGRenderContext::RenderMode3D) + if (m_renderMode != QSGRendererInterface::RenderMode3D) updateClipState(gn->clipList(), batch); // We always have dirty matrix as all batches are at a unique z range. @@ -3242,7 +3242,7 @@ bool Renderer::prepareRenderUnmergedBatch(Batch *batch, PreparedRenderBatch *ren return false; } ps = e->ps; - if (m_renderMode == QSGRenderContext::RenderMode3D) { + if (m_renderMode == QSGRendererInterface::RenderMode3D) { m_gstateStack.push(m_gstate); setStateForDepthPostPass(); ensurePipelineState(e, sms, true); @@ -3251,7 +3251,7 @@ bool Renderer::prepareRenderUnmergedBatch(Batch *batch, PreparedRenderBatch *ren } } else { e->ps = ps; - if (m_renderMode == QSGRenderContext::RenderMode3D) + if (m_renderMode == QSGRendererInterface::RenderMode3D) e->depthPostPassPs = depthPostPassPs; } @@ -3613,7 +3613,7 @@ void Renderer::prepareRenderPass(RenderPassContext *ctx) // special case: the 3D plane mode tests against the depth buffer, but does // not write (and all batches are alpha because this render mode evaluates // to useDepthBuffer()==false) - if (m_renderMode == QSGRenderContext::RenderMode3D) { + if (m_renderMode == QSGRendererInterface::RenderMode3D) { Q_ASSERT(m_opaqueBatches.isEmpty()); m_gstate.depthTest = true; } @@ -3690,7 +3690,7 @@ void Renderer::recordRenderPass(RenderPassContext *ctx) renderUnmergedBatch(renderBatch); } - if (m_renderMode == QSGRenderContext::RenderMode3D) { + if (m_renderMode == QSGRendererInterface::RenderMode3D) { // depth post-pass for (int i = 0, ie = ctx->alphaRenderBatches.count(); i != ie; ++i) { PreparedRenderBatch *renderBatch = &ctx->alphaRenderBatches[i]; @@ -3755,7 +3755,7 @@ bool Renderer::prepareRhiRenderNode(Batch *batch, PreparedRenderBatch *renderBat QSGRenderNodePrivate *rd = QSGRenderNodePrivate::get(e->renderNode); rd->m_clip_list = nullptr; - if (m_renderMode != QSGRenderContext::RenderMode3D) { + if (m_renderMode != QSGRendererInterface::RenderMode3D) { QSGNode *clip = e->renderNode->parent(); while (clip != rootNode()) { if (clip->type() == QSGNode::ClipNodeType) { diff --git a/src/quick/scenegraph/coreapi/qsgbatchrenderer_p.h b/src/quick/scenegraph/coreapi/qsgbatchrenderer_p.h index 3eb135275e..08b61984bd 100644 --- a/src/quick/scenegraph/coreapi/qsgbatchrenderer_p.h +++ b/src/quick/scenegraph/coreapi/qsgbatchrenderer_p.h @@ -747,7 +747,7 @@ protected: class Q_QUICK_PRIVATE_EXPORT Renderer : public QSGRenderer { public: - Renderer(QSGDefaultRenderContext *ctx, QSGRenderContext::RenderMode renderMode = QSGRenderContext::RenderMode2D); + Renderer(QSGDefaultRenderContext *ctx, QSGRendererInterface::RenderMode renderMode = QSGRendererInterface::RenderMode2D); ~Renderer(); protected: @@ -862,7 +862,7 @@ private: void invalidatePipelineCacheDependency(QRhiRenderPassDescriptor *rpDesc) override; QSGDefaultRenderContext *m_context; - QSGRenderContext::RenderMode m_renderMode; + QSGRendererInterface::RenderMode m_renderMode; QSet<Node *> m_taggedRoots; QDataBuffer<Element *> m_opaqueRenderList; QDataBuffer<Element *> m_alphaRenderList; @@ -955,7 +955,7 @@ int Renderer::mergedIndexElemSize() const bool Renderer::useDepthBuffer() const { - return !m_forceNoDepthBuffer && m_renderMode == QSGRenderContext::RenderMode2D; + return !m_forceNoDepthBuffer && m_renderMode == QSGRendererInterface::RenderMode2D; } void Renderer::setStateForDepthPostPass() diff --git a/src/quick/scenegraph/coreapi/qsgrendererinterface.cpp b/src/quick/scenegraph/coreapi/qsgrendererinterface.cpp index febd155c40..6970aa0afb 100644 --- a/src/quick/scenegraph/coreapi/qsgrendererinterface.cpp +++ b/src/quick/scenegraph/coreapi/qsgrendererinterface.cpp @@ -175,6 +175,13 @@ QT_BEGIN_NAMESPACE supported */ +/*! + \enum QSGRendererInterface::RenderMode + + \value RenderMode2D Normal 2D rendering + \value RenderMode2DNoDepthBuffer Normal 2D rendering with depth buffer disabled + \value RenderMode3D Scene is rendered as part of a 3D graph + */ QSGRendererInterface::~QSGRendererInterface() { } diff --git a/src/quick/scenegraph/coreapi/qsgrendererinterface.h b/src/quick/scenegraph/coreapi/qsgrendererinterface.h index 0c009de77b..9d7b9a5738 100644 --- a/src/quick/scenegraph/coreapi/qsgrendererinterface.h +++ b/src/quick/scenegraph/coreapi/qsgrendererinterface.h @@ -96,6 +96,12 @@ public: }; Q_DECLARE_FLAGS(ShaderSourceTypes, ShaderSourceType) + enum RenderMode { + RenderMode2D, + RenderMode2DNoDepthBuffer, + RenderMode3D + }; + virtual ~QSGRendererInterface(); virtual GraphicsApi graphicsApi() const = 0; diff --git a/src/quick/scenegraph/qsgcontext_p.h b/src/quick/scenegraph/qsgcontext_p.h index 7140432c30..2928d2ea4a 100644 --- a/src/quick/scenegraph/qsgcontext_p.h +++ b/src/quick/scenegraph/qsgcontext_p.h @@ -62,6 +62,7 @@ #include <private/qrawfont_p.h> #include <QtQuick/qsgnode.h> +#include <QtQuick/qsgrendererinterface.h> QT_BEGIN_NAMESPACE @@ -155,12 +156,6 @@ class Q_QUICK_PRIVATE_EXPORT QSGRenderContext : public QObject { Q_OBJECT public: - enum RenderMode { - RenderMode2D, - RenderMode2DNoDepthBuffer, - RenderMode3D - }; - enum CreateTextureFlags { CreateTexture_Alpha = 0x1, CreateTexture_Atlas = 0x2, @@ -201,7 +196,7 @@ public: QSGTexture *textureForFactory(QQuickTextureFactory *factory, QQuickWindow *window); virtual QSGTexture *createTexture(const QImage &image, uint flags = CreateTexture_Alpha) const = 0; - virtual QSGRenderer *createRenderer(RenderMode renderMode = RenderMode2D) = 0; + virtual QSGRenderer *createRenderer(QSGRendererInterface::RenderMode renderMode = QSGRendererInterface::RenderMode2D) = 0; virtual QSGTexture *compressedTextureForFactory(const QSGCompressedTextureFactory *) const; virtual int maxTextureSize() const = 0; diff --git a/src/quick/scenegraph/qsgdefaultrendercontext.cpp b/src/quick/scenegraph/qsgdefaultrendercontext.cpp index d939f64590..62d5ccd710 100644 --- a/src/quick/scenegraph/qsgdefaultrendercontext.cpp +++ b/src/quick/scenegraph/qsgdefaultrendercontext.cpp @@ -49,6 +49,8 @@ #include <QtQuick/private/qsgcompressedtexture_p.h> +#include <QtQuick/qsgrendererinterface.h> + QT_BEGIN_NAMESPACE QSGDefaultRenderContext::QSGDefaultRenderContext(QSGContext *context) @@ -235,7 +237,7 @@ QSGTexture *QSGDefaultRenderContext::createTexture(const QImage &image, uint fla return texture; } -QSGRenderer *QSGDefaultRenderContext::createRenderer(RenderMode renderMode) +QSGRenderer *QSGDefaultRenderContext::createRenderer(QSGRendererInterface::RenderMode renderMode) { return new QSGBatchRenderer::Renderer(this, renderMode); } diff --git a/src/quick/scenegraph/qsgdefaultrendercontext_p.h b/src/quick/scenegraph/qsgdefaultrendercontext_p.h index d92d83eb6b..0b4902ca71 100644 --- a/src/quick/scenegraph/qsgdefaultrendercontext_p.h +++ b/src/quick/scenegraph/qsgdefaultrendercontext_p.h @@ -109,7 +109,7 @@ public: QSGDistanceFieldGlyphCache *distanceFieldGlyphCache(const QRawFont &font) override; QSGTexture *createTexture(const QImage &image, uint flags) const override; - QSGRenderer *createRenderer(RenderMode renderMode = RenderMode2D) override; + QSGRenderer *createRenderer(QSGRendererInterface::RenderMode renderMode = QSGRendererInterface::RenderMode2D) override; QSGTexture *compressedTextureForFactory(const QSGCompressedTextureFactory *factory) const override; virtual void initializeRhiShader(QSGMaterialShader *shader, QShader::Variant shaderVariant); diff --git a/src/quick/scenegraph/qsgrhilayer.cpp b/src/quick/scenegraph/qsgrhilayer.cpp index d70f5e97ab..9d3db8354d 100644 --- a/src/quick/scenegraph/qsgrhilayer.cpp +++ b/src/quick/scenegraph/qsgrhilayer.cpp @@ -353,8 +353,8 @@ void QSGRhiLayer::grab() if (!m_renderer) { static const bool useDepth = qEnvironmentVariableIsEmpty("QSG_NO_DEPTH_BUFFER"); - static const QSGRenderContext::RenderMode renderMode = useDepth ? QSGRenderContext::RenderMode2D - : QSGRenderContext::RenderMode2DNoDepthBuffer; + static const QSGRendererInterface::RenderMode renderMode = useDepth ? QSGRendererInterface::RenderMode2D + : QSGRendererInterface::RenderMode2DNoDepthBuffer; m_renderer = m_context->createRenderer(renderMode); connect(m_renderer, SIGNAL(sceneGraphChanged()), this, SLOT(markDirtyTexture())); } |