Don't try to render line primitives if the renderer won't do anything with them

This commit is contained in:
Nyall Dawson 2023-08-23 14:36:40 +10:00 committed by Martin Dobias
parent fd9f39e0af
commit e4770a18eb
7 changed files with 18 additions and 7 deletions

View File

@ -3807,7 +3807,9 @@ TiledSceneRequestFlags = Qgis # dirty hack since SIP seems to introduce the fla
# monkey patching scoped based enum # monkey patching scoped based enum
Qgis.TiledSceneRendererFlag.RequiresTextures.__doc__ = "Renderer requires textures" Qgis.TiledSceneRendererFlag.RequiresTextures.__doc__ = "Renderer requires textures"
Qgis.TiledSceneRendererFlag.ForceRasterRender.__doc__ = "Layer should always be rendered as a raster image" 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.TiledSceneRendererFlag.baseClass = Qgis
Qgis.TiledSceneRendererFlags.baseClass = Qgis Qgis.TiledSceneRendererFlags.baseClass = Qgis

View File

@ -2209,6 +2209,8 @@ The development version
{ {
RequiresTextures, RequiresTextures,
ForceRasterRender, ForceRasterRender,
RendersTriangles,
RendersLines,
}; };
typedef QFlags<Qgis::TiledSceneRendererFlag> TiledSceneRendererFlags; typedef QFlags<Qgis::TiledSceneRendererFlag> TiledSceneRendererFlags;

View File

@ -3878,6 +3878,8 @@ class CORE_EXPORT Qgis
{ {
RequiresTextures = 1 << 0, //!< Renderer requires textures RequiresTextures = 1 << 0, //!< Renderer requires textures
ForceRasterRender = 1 << 1, //!< Layer should always be rendered as a raster image 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 ) Q_ENUM( TiledSceneRendererFlag )

View File

@ -392,11 +392,13 @@ void QgsTiledSceneLayerRenderer::renderPrimitive( const tinygltf::Model &model,
switch ( primitive.mode ) switch ( primitive.mode )
{ {
case TINYGLTF_MODE_TRIANGLES: 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; break;
case TINYGLTF_MODE_LINE: 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; return;
case TINYGLTF_MODE_POINTS: 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" ); auto posIt = primitive.attributes.find( "POSITION" );
if ( posIt == primitive.attributes.end() ) if ( posIt == primitive.attributes.end() )

View File

@ -69,7 +69,7 @@ void QgsTiledSceneRenderContext::textureCoordinates( float &textureX1, float &te
Qgis::TiledSceneRendererFlags QgsTiledSceneRenderer::flags() const Qgis::TiledSceneRendererFlags QgsTiledSceneRenderer::flags() const
{ {
return Qgis::TiledSceneRendererFlags(); return Qgis::TiledSceneRendererFlag::RendersLines | Qgis::TiledSceneRendererFlag::RendersTriangles;
} }
QgsTiledSceneRenderer *QgsTiledSceneRenderer::load( QDomElement &element, const QgsReadWriteContext &context ) QgsTiledSceneRenderer *QgsTiledSceneRenderer::load( QDomElement &element, const QgsReadWriteContext &context )

View File

@ -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 // 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 // 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. // 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 ) void QgsTiledSceneTextureRenderer::renderTriangle( QgsTiledSceneRenderContext &context, const QPolygonF &triangle )

View File

@ -212,7 +212,8 @@ void QgsTiledSceneWireframeRenderer::stopRender( QgsTiledSceneRenderContext &con
Qgis::TiledSceneRendererFlags QgsTiledSceneWireframeRenderer::flags() const Qgis::TiledSceneRendererFlags QgsTiledSceneWireframeRenderer::flags() const
{ {
Qgis::TiledSceneRendererFlags flags; Qgis::TiledSceneRendererFlags flags = Qgis::TiledSceneRendererFlag::RendersTriangles |
Qgis::TiledSceneRendererFlag::RendersLines;
if ( mUseTextureColors ) if ( mUseTextureColors )
flags |= Qgis::TiledSceneRendererFlag::RequiresTextures; flags |= Qgis::TiledSceneRendererFlag::RequiresTextures;