diff --git a/python/core/auto_additions/qgis.py b/python/core/auto_additions/qgis.py index 8a28cf79845..e77c9d9bd7b 100644 --- a/python/core/auto_additions/qgis.py +++ b/python/core/auto_additions/qgis.py @@ -3807,7 +3807,9 @@ TiledSceneRequestFlags = Qgis # dirty hack since SIP seems to introduce the fla # monkey patching scoped based enum Qgis.TiledSceneRendererFlag.RequiresTextures.__doc__ = "Renderer requires textures" Qgis.TiledSceneRendererFlag.ForceRasterRender.__doc__ = "Layer should always be rendered as a raster image" -Qgis.TiledSceneRendererFlag.__doc__ = "Flags which control how tiled scene 2D renderers behave.\n\n.. versionadded:: 3.34\n\n" + '* ``RequiresTextures``: ' + Qgis.TiledSceneRendererFlag.RequiresTextures.__doc__ + '\n' + '* ``ForceRasterRender``: ' + Qgis.TiledSceneRendererFlag.ForceRasterRender.__doc__ +Qgis.TiledSceneRendererFlag.RendersTriangles.__doc__ = "Renderer can render triangle primitives" +Qgis.TiledSceneRendererFlag.RendersLines.__doc__ = "Renderer can render line primitives" +Qgis.TiledSceneRendererFlag.__doc__ = "Flags which control how tiled scene 2D renderers behave.\n\n.. versionadded:: 3.34\n\n" + '* ``RequiresTextures``: ' + Qgis.TiledSceneRendererFlag.RequiresTextures.__doc__ + '\n' + '* ``ForceRasterRender``: ' + Qgis.TiledSceneRendererFlag.ForceRasterRender.__doc__ + '\n' + '* ``RendersTriangles``: ' + Qgis.TiledSceneRendererFlag.RendersTriangles.__doc__ + '\n' + '* ``RendersLines``: ' + Qgis.TiledSceneRendererFlag.RendersLines.__doc__ # -- Qgis.TiledSceneRendererFlag.baseClass = Qgis Qgis.TiledSceneRendererFlags.baseClass = Qgis diff --git a/python/core/auto_generated/qgis.sip.in b/python/core/auto_generated/qgis.sip.in index 5e1aed25881..db5cd56fb01 100644 --- a/python/core/auto_generated/qgis.sip.in +++ b/python/core/auto_generated/qgis.sip.in @@ -2209,6 +2209,8 @@ The development version { RequiresTextures, ForceRasterRender, + RendersTriangles, + RendersLines, }; typedef QFlags TiledSceneRendererFlags; diff --git a/src/core/qgis.h b/src/core/qgis.h index 51ea946164f..bf399d40c73 100644 --- a/src/core/qgis.h +++ b/src/core/qgis.h @@ -3878,6 +3878,8 @@ class CORE_EXPORT Qgis { RequiresTextures = 1 << 0, //!< Renderer requires textures ForceRasterRender = 1 << 1, //!< Layer should always be rendered as a raster image + RendersTriangles = 1 << 2, //!< Renderer can render triangle primitives + RendersLines = 1 << 3, //!< Renderer can render line primitives }; Q_ENUM( TiledSceneRendererFlag ) diff --git a/src/core/tiledscene/qgstiledscenelayerrenderer.cpp b/src/core/tiledscene/qgstiledscenelayerrenderer.cpp index f5ddf47b7d4..1c7d79165a2 100644 --- a/src/core/tiledscene/qgstiledscenelayerrenderer.cpp +++ b/src/core/tiledscene/qgstiledscenelayerrenderer.cpp @@ -392,11 +392,13 @@ void QgsTiledSceneLayerRenderer::renderPrimitive( const tinygltf::Model &model, switch ( primitive.mode ) { case TINYGLTF_MODE_TRIANGLES: - renderTrianglePrimitive( model, primitive, tile, tileTranslationEcef, gltfLocalTransform, contentUri, context ); + if ( mRenderer->flags() & Qgis::TiledSceneRendererFlag::RendersTriangles ) + renderTrianglePrimitive( model, primitive, tile, tileTranslationEcef, gltfLocalTransform, contentUri, context ); break; case TINYGLTF_MODE_LINE: - renderLinePrimitive( model, primitive, tile, tileTranslationEcef, gltfLocalTransform, contentUri, context ); + if ( mRenderer->flags() & Qgis::TiledSceneRendererFlag::RendersLines ) + renderLinePrimitive( model, primitive, tile, tileTranslationEcef, gltfLocalTransform, contentUri, context ); return; case TINYGLTF_MODE_POINTS: @@ -695,7 +697,7 @@ void QgsTiledSceneLayerRenderer::renderTrianglePrimitive( const tinygltf::Model } } -void QgsTiledSceneLayerRenderer::renderLinePrimitive( const tinygltf::Model &model, const tinygltf::Primitive &primitive, const QgsTiledSceneTile &tile, const QgsVector3D &tileTranslationEcef, const QMatrix4x4 *gltfLocalTransform, const QString &contentUri, QgsTiledSceneRenderContext &context ) +void QgsTiledSceneLayerRenderer::renderLinePrimitive( const tinygltf::Model &model, const tinygltf::Primitive &primitive, const QgsTiledSceneTile &tile, const QgsVector3D &tileTranslationEcef, const QMatrix4x4 *gltfLocalTransform, const QString &, QgsTiledSceneRenderContext &context ) { auto posIt = primitive.attributes.find( "POSITION" ); if ( posIt == primitive.attributes.end() ) diff --git a/src/core/tiledscene/qgstiledscenerenderer.cpp b/src/core/tiledscene/qgstiledscenerenderer.cpp index 495acaf5e36..dd5c91fc769 100644 --- a/src/core/tiledscene/qgstiledscenerenderer.cpp +++ b/src/core/tiledscene/qgstiledscenerenderer.cpp @@ -69,7 +69,7 @@ void QgsTiledSceneRenderContext::textureCoordinates( float &textureX1, float &te Qgis::TiledSceneRendererFlags QgsTiledSceneRenderer::flags() const { - return Qgis::TiledSceneRendererFlags(); + return Qgis::TiledSceneRendererFlag::RendersLines | Qgis::TiledSceneRendererFlag::RendersTriangles; } QgsTiledSceneRenderer *QgsTiledSceneRenderer::load( QDomElement &element, const QgsReadWriteContext &context ) diff --git a/src/core/tiledscene/qgstiledscenetexturerenderer.cpp b/src/core/tiledscene/qgstiledscenetexturerenderer.cpp index ea80f01df4e..ffa32b5873c 100644 --- a/src/core/tiledscene/qgstiledscenetexturerenderer.cpp +++ b/src/core/tiledscene/qgstiledscenetexturerenderer.cpp @@ -62,7 +62,9 @@ Qgis::TiledSceneRendererFlags QgsTiledSceneTextureRenderer::flags() const // force raster rendering for this renderer type -- there's no benefit in exporting these layers as a bunch // of triangular images which are pieced together, that adds a lot of extra content to the exports and results // in files which can be extremely slow to open and render in other viewers. - return Qgis::TiledSceneRendererFlag::RequiresTextures | Qgis::TiledSceneRendererFlag::ForceRasterRender; + return Qgis::TiledSceneRendererFlag::RequiresTextures | + Qgis::TiledSceneRendererFlag::ForceRasterRender | + Qgis::TiledSceneRendererFlag::RendersTriangles; } void QgsTiledSceneTextureRenderer::renderTriangle( QgsTiledSceneRenderContext &context, const QPolygonF &triangle ) diff --git a/src/core/tiledscene/qgstiledscenewireframerenderer.cpp b/src/core/tiledscene/qgstiledscenewireframerenderer.cpp index d12275065bc..318907e715a 100644 --- a/src/core/tiledscene/qgstiledscenewireframerenderer.cpp +++ b/src/core/tiledscene/qgstiledscenewireframerenderer.cpp @@ -212,7 +212,8 @@ void QgsTiledSceneWireframeRenderer::stopRender( QgsTiledSceneRenderContext &con Qgis::TiledSceneRendererFlags QgsTiledSceneWireframeRenderer::flags() const { - Qgis::TiledSceneRendererFlags flags; + Qgis::TiledSceneRendererFlags flags = Qgis::TiledSceneRendererFlag::RendersTriangles | + Qgis::TiledSceneRendererFlag::RendersLines; if ( mUseTextureColors ) flags |= Qgis::TiledSceneRendererFlag::RequiresTextures;