mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-17 00:09:36 -04:00
Don't try to render line primitives if the renderer won't do anything with them
This commit is contained in:
parent
fd9f39e0af
commit
e4770a18eb
@ -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
|
||||
|
@ -2209,6 +2209,8 @@ The development version
|
||||
{
|
||||
RequiresTextures,
|
||||
ForceRasterRender,
|
||||
RendersTriangles,
|
||||
RendersLines,
|
||||
};
|
||||
|
||||
typedef QFlags<Qgis::TiledSceneRendererFlag> TiledSceneRendererFlags;
|
||||
|
@ -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 )
|
||||
|
||||
|
@ -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() )
|
||||
|
@ -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 )
|
||||
|
@ -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 )
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user