Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion python/PyQt6/3d/auto_additions/qgs3dmapsettings.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
# --
Qgs3DMapSettings.BackgroundType.baseClass = Qgs3DMapSettings
try:
Qgs3DMapSettings.__attribute_docs__ = {'settingsChanged': 'Emitted when one of the configuration settings has changed\n\n.. versionadded:: 3.24\n', 'backgroundColorChanged': 'Emitted when the background color has changed\n', 'selectionColorChanged': 'Emitted when the selection color has changed\n', 'layersChanged': 'Emitted when the list of map layers for 3d rendering has changed.\n\n.. seealso:: :py:func:`setLayers`\n\n.. seealso:: :py:func:`layers`\n', 'terrainGeneratorChanged': 'Emitted when the terrain generator has changed\n', 'terrainSettingsChanged': 'Emitted when the terrain settings are changed.\n\n.. versionadded:: 3.42\n', 'terrainVerticalScaleChanged': 'Emitted when the vertical scale of the terrain has changed\n\n.. deprecated:: 3.42\n\n Use :py:func:`~Qgs3DMapSettings.terrainSettingsChanged` instead.\n', 'mapTileResolutionChanged': 'Emitted when the map tile resoulution has changed\n\n.. deprecated:: 3.42\n\n Use :py:func:`~Qgs3DMapSettings.terrainSettingsChanged` instead.\n', 'maxTerrainScreenErrorChanged': 'Emitted when the maximum terrain screen error has changed\n\n.. deprecated:: 3.42\n\n Use :py:func:`~Qgs3DMapSettings.terrainSettingsChanged` instead.\n', 'maxTerrainGroundErrorChanged': 'Emitted when the maximum terrain ground error has changed\n\n.. deprecated:: 3.42\n\n Use :py:func:`~Qgs3DMapSettings.terrainSettingsChanged` instead.\n', 'terrainElevationOffsetChanged': 'Emitted when the terrain elevation offset is changed\n\n.. deprecated:: 3.42\n\n Use :py:func:`~Qgs3DMapSettings.terrainSettingsChanged` instead.\n', 'terrainShadingChanged': 'Emitted when terrain shading enabled flag or terrain shading material\nhas changed\n\n.. versionadded:: 3.6\n', 'terrainMapThemeChanged': "Emitted when terrain's map theme has changed\n\n.. versionadded:: 3.6\n", 'renderersChanged': "Emitted when the list of map's extra renderers have been modified\n\n.. versionadded:: 3.10\n", 'showTerrainBoundingBoxesChanged': "Emitted when the flag whether terrain's bounding boxes are shown has\nchanged\n", 'showTerrainTilesInfoChanged': "Emitted when the flag whether terrain's tile info is shown has changed\n", 'showCameraViewCenterChanged': "Emitted when the flag whether camera's view center is shown has changed\n\n.. versionadded:: 3.4\n", 'showCameraRotationCenterChanged': "Emitted when the flag whether camera's rotation center is shown has\nchanged\n\n.. versionadded:: 3.24\n", 'showLightSourceOriginsChanged': 'Emitted when the flag whether light source origins are shown has\nchanged.\n\n.. versionadded:: 3.15\n', 'showLabelsChanged': 'Emitted when the flag whether labels are displayed on terrain tiles has\nchanged\n', 'stopUpdatesChanged': 'Emitted when the flag whether to keep updating scene has changed\n\n.. versionadded:: 3.42\n', 'eyeDomeLightingEnabledChanged': 'Emitted when the flag whether eye dome lighting is used has changed\n\n.. versionadded:: 3.18\n', 'eyeDomeLightingStrengthChanged': 'Emitted when the eye dome lighting strength has changed\n\n.. versionadded:: 3.18\n', 'eyeDomeLightingDistanceChanged': 'Emitted when the eye dome lighting distance has changed\n\n.. versionadded:: 3.18\n', 'debugShadowMapSettingsChanged': 'Emitted when shadow map debugging has changed\n\n.. versionadded:: 3.18\n', 'debugDepthMapSettingsChanged': 'Emitted when depth map debugging has changed\n\n.. versionadded:: 3.18\n', 'pointLightsChanged': 'Emitted when the list of point lights changes\n\n.. versionadded:: 3.6\n', 'lightSourcesChanged': 'Emitted when any of the light source settings in the map changes.\n\n.. versionadded:: 3.26\n', 'directionalLightsChanged': 'Emitted when the list of directional lights changes\n\n.. versionadded:: 3.16\n', 'fieldOfViewChanged': 'Emitted when the camera lens field of view changes\n\n.. versionadded:: 3.8\n', 'projectionTypeChanged': 'Emitted when the camera lens projection type changes\n\n.. versionadded:: 3.18\n', 'cameraNavigationModeChanged': 'Emitted when the camera navigation mode was changed\n\n.. versionadded:: 3.18\n', 'cameraMovementSpeedChanged': 'Emitted when the camera movement speed was changed\n\n.. versionadded:: 3.18\n', 'skyboxSettingsChanged': 'Emitted when skybox settings are changed\n\n.. versionadded:: 3.16\n', 'shadowSettingsChanged': 'Emitted when shadow rendering settings are changed\n\n.. versionadded:: 3.16\n', 'ambientOcclusionSettingsChanged': 'Emitted when ambient occlusion rendering settings are changed\n\n.. versionadded:: 3.28\n', 'fpsCounterEnabledChanged': 'Emitted when the FPS counter is enabled or disabled\n\n.. versionadded:: 3.18\n', 'viewFrustumVisualizationEnabledChanged': "Emitted when the camera's view frustum visualization on the main 2D map\ncanvas is enabled or disabled\n\n.. versionadded:: 3.26\n", 'axisSettingsChanged': 'Emitted when 3d axis rendering settings are changed\n\n.. versionadded:: 3.26\n', 'debugOverlayEnabledChanged': 'Emitted when the debug overaly is enabled or disabled\n\n.. versionadded:: 3.26\n', 'extentChanged': "Emitted when the 3d view's 2d extent has changed\n\n.. seealso:: :py:func:`setExtent`\n\n.. versionadded:: 3.30\n", 'showExtentIn2DViewChanged': "Emitted when the parameter to display 3d view's extent in the 2D canvas\nhas changed\n\n.. seealso:: :py:func:`setShowExtentIn2DView`\n\n.. versionadded:: 3.32\n", 'showDebugPanelChanged': 'Emitted when the Show debug panel checkbox changes value\n\n.. seealso:: :py:func:`setShowDebugPanel`\n\n.. versionadded:: 3.42\n', 'originChanged': "Emitted when the world's origin point has been shifted\n\n.. seealso:: :py:func:`setOrigin`\n\n.. versionadded:: 3.42\n", 'show2DMapOverlayChanged': 'Emitted when the 2D map overlay is enabled or disabled\n\n.. seealso:: :py:func:`setIs2DMapOverlayEnabled`\n\n.. versionadded:: 4.0\n', 'backgroundTypeChanged': 'Emitted when the background type or gradient colors change.\n\n.. versionadded:: 4.2\n'}
Qgs3DMapSettings.__attribute_docs__ = {'settingsChanged': 'Emitted when one of the configuration settings has changed\n\n.. versionadded:: 3.24\n', 'backgroundColorChanged': 'Emitted when the background color has changed\n', 'selectionColorChanged': 'Emitted when the selection color has changed\n', 'layersChanged': 'Emitted when the list of map layers for 3d rendering has changed.\n\n.. seealso:: :py:func:`setLayers`\n\n.. seealso:: :py:func:`layers`\n', 'terrainGeneratorChanged': 'Emitted when the terrain generator has changed\n', 'terrainSettingsChanged': 'Emitted when the terrain settings are changed.\n\n.. versionadded:: 3.42\n', 'terrainVerticalScaleChanged': 'Emitted when the vertical scale of the terrain has changed\n\n.. deprecated:: 3.42\n\n Use :py:func:`~Qgs3DMapSettings.terrainSettingsChanged` instead.\n', 'mapTileResolutionChanged': 'Emitted when the map tile resoulution has changed\n\n.. deprecated:: 3.42\n\n Use :py:func:`~Qgs3DMapSettings.terrainSettingsChanged` instead.\n', 'maxTerrainScreenErrorChanged': 'Emitted when the maximum terrain screen error has changed\n\n.. deprecated:: 3.42\n\n Use :py:func:`~Qgs3DMapSettings.terrainSettingsChanged` instead.\n', 'maxTerrainGroundErrorChanged': 'Emitted when the maximum terrain ground error has changed\n\n.. deprecated:: 3.42\n\n Use :py:func:`~Qgs3DMapSettings.terrainSettingsChanged` instead.\n', 'terrainElevationOffsetChanged': 'Emitted when the terrain elevation offset is changed\n\n.. deprecated:: 3.42\n\n Use :py:func:`~Qgs3DMapSettings.terrainSettingsChanged` instead.\n', 'terrainShadingChanged': 'Emitted when terrain shading enabled flag or terrain shading material\nhas changed\n\n.. versionadded:: 3.6\n', 'terrainMapThemeChanged': "Emitted when terrain's map theme has changed\n\n.. versionadded:: 3.6\n", 'renderersChanged': "Emitted when the list of map's extra renderers have been modified\n\n.. versionadded:: 3.10\n", 'showTerrainBoundingBoxesChanged': "Emitted when the flag whether terrain's bounding boxes are shown has\nchanged\n", 'showTerrainTilesInfoChanged': "Emitted when the flag whether terrain's tile info is shown has changed\n", 'showCameraViewCenterChanged': "Emitted when the flag whether camera's view center is shown has changed\n\n.. versionadded:: 3.4\n", 'showCameraRotationCenterChanged': "Emitted when the flag whether camera's rotation center is shown has\nchanged\n\n.. versionadded:: 3.24\n", 'showLightSourceOriginsChanged': 'Emitted when the flag whether light source origins are shown has\nchanged.\n\n.. versionadded:: 3.15\n', 'showLabelsChanged': 'Emitted when the flag whether labels are displayed on terrain tiles has\nchanged\n', 'stopUpdatesChanged': 'Emitted when the flag whether to keep updating scene has changed\n\n.. versionadded:: 3.42\n', 'eyeDomeLightingEnabledChanged': 'Emitted when the flag whether eye dome lighting is used has changed\n\n.. versionadded:: 3.18\n', 'eyeDomeLightingStrengthChanged': 'Emitted when the eye dome lighting strength has changed\n\n.. versionadded:: 3.18\n', 'eyeDomeLightingDistanceChanged': 'Emitted when the eye dome lighting distance has changed\n\n.. versionadded:: 3.18\n', 'msaaEnabledChanged': 'Emitted when the MSAA enabled flag has changed\n\n.. versionadded:: 4.2\n', 'debugShadowMapSettingsChanged': 'Emitted when shadow map debugging has changed\n\n.. versionadded:: 3.18\n', 'debugDepthMapSettingsChanged': 'Emitted when depth map debugging has changed\n\n.. versionadded:: 3.18\n', 'pointLightsChanged': 'Emitted when the list of point lights changes\n\n.. versionadded:: 3.6\n', 'lightSourcesChanged': 'Emitted when any of the light source settings in the map changes.\n\n.. versionadded:: 3.26\n', 'directionalLightsChanged': 'Emitted when the list of directional lights changes\n\n.. versionadded:: 3.16\n', 'fieldOfViewChanged': 'Emitted when the camera lens field of view changes\n\n.. versionadded:: 3.8\n', 'projectionTypeChanged': 'Emitted when the camera lens projection type changes\n\n.. versionadded:: 3.18\n', 'cameraNavigationModeChanged': 'Emitted when the camera navigation mode was changed\n\n.. versionadded:: 3.18\n', 'cameraMovementSpeedChanged': 'Emitted when the camera movement speed was changed\n\n.. versionadded:: 3.18\n', 'skyboxSettingsChanged': 'Emitted when skybox settings are changed\n\n.. versionadded:: 3.16\n', 'shadowSettingsChanged': 'Emitted when shadow rendering settings are changed\n\n.. versionadded:: 3.16\n', 'ambientOcclusionSettingsChanged': 'Emitted when ambient occlusion rendering settings are changed\n\n.. versionadded:: 3.28\n', 'fpsCounterEnabledChanged': 'Emitted when the FPS counter is enabled or disabled\n\n.. versionadded:: 3.18\n', 'viewFrustumVisualizationEnabledChanged': "Emitted when the camera's view frustum visualization on the main 2D map\ncanvas is enabled or disabled\n\n.. versionadded:: 3.26\n", 'axisSettingsChanged': 'Emitted when 3d axis rendering settings are changed\n\n.. versionadded:: 3.26\n', 'debugOverlayEnabledChanged': 'Emitted when the debug overaly is enabled or disabled\n\n.. versionadded:: 3.26\n', 'extentChanged': "Emitted when the 3d view's 2d extent has changed\n\n.. seealso:: :py:func:`setExtent`\n\n.. versionadded:: 3.30\n", 'showExtentIn2DViewChanged': "Emitted when the parameter to display 3d view's extent in the 2D canvas\nhas changed\n\n.. seealso:: :py:func:`setShowExtentIn2DView`\n\n.. versionadded:: 3.32\n", 'showDebugPanelChanged': 'Emitted when the Show debug panel checkbox changes value\n\n.. seealso:: :py:func:`setShowDebugPanel`\n\n.. versionadded:: 3.42\n', 'originChanged': "Emitted when the world's origin point has been shifted\n\n.. seealso:: :py:func:`setOrigin`\n\n.. versionadded:: 3.42\n", 'show2DMapOverlayChanged': 'Emitted when the 2D map overlay is enabled or disabled\n\n.. seealso:: :py:func:`setIs2DMapOverlayEnabled`\n\n.. versionadded:: 4.0\n', 'backgroundTypeChanged': 'Emitted when the background type or gradient colors change.\n\n.. versionadded:: 4.2\n'}
Qgs3DMapSettings.__signal_arguments__ = {'fpsCounterEnabledChanged': ['fpsCounterEnabled: bool'], 'debugOverlayEnabledChanged': ['debugOverlayEnabled: bool'], 'showDebugPanelChanged': ['shown: bool']}
except (NameError, AttributeError):
pass
24 changes: 24 additions & 0 deletions python/PyQt6/3d/auto_generated/qgs3dmapsettings.sip.in
Original file line number Diff line number Diff line change
Expand Up @@ -932,6 +932,23 @@ Sets whether 2D map overlay is enabled
.. versionadded:: 4.0
%End

void setMsaaEnabled( bool enabled );
%Docstring
Sets whether multisample anti-aliasing (MSAA) is enabled

.. seealso:: :py:func:`isMsaaEnabled`

.. versionadded:: 4.2
%End

bool isMsaaEnabled() const;
%Docstring
Returns whether multisample anti-aliasing (MSAA) is enabled

.. seealso:: :py:func:`setMsaaEnabled`

.. versionadded:: 4.2
%End

signals:

Expand Down Expand Up @@ -1104,6 +1121,13 @@ Emitted when the eye dome lighting strength has changed
Emitted when the eye dome lighting distance has changed

.. versionadded:: 3.18
%End

void msaaEnabledChanged();
%Docstring
Emitted when the MSAA enabled flag has changed

.. versionadded:: 4.2
%End

void debugShadowMapSettingsChanged();
Expand Down
65 changes: 62 additions & 3 deletions src/3d/framegraph/qgsforwardrenderview.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
#include <Qt3DRender/QFrustumCulling>
#include <Qt3DRender/QLayer>
#include <Qt3DRender/QLayerFilter>
#include <Qt3DRender/QMultiSampleAntiAliasing>
#include <Qt3DRender/QNoDepthMask>
#include <Qt3DRender/QParameter>
#include <Qt3DRender/QPolygonOffset>
Expand Down Expand Up @@ -91,6 +92,36 @@ Qt3DRender::QRenderTarget *QgsForwardRenderView::buildTextures()
return renderTarget;
}

Qt3DRender::QRenderTarget *QgsForwardRenderView::buildMsaaTarget()
{
mColorTextureMS = new Qt3DRender::QTexture2DMultisample;
mColorTextureMS->setFormat( Qt3DRender::QAbstractTexture::RGB8_UNorm );
mColorTextureMS->setSamples( 4 );
mColorTextureMS->setGenerateMipMaps( false );
mColorTextureMS->setWidth( mCurrentWidth );
mColorTextureMS->setHeight( mCurrentHeight );

mDepthTextureMS = new Qt3DRender::QTexture2DMultisample;
mDepthTextureMS->setFormat( Qt3DRender::QAbstractTexture::D24S8 );
mDepthTextureMS->setSamples( 4 );
mDepthTextureMS->setGenerateMipMaps( false );
mDepthTextureMS->setWidth( mCurrentWidth );
mDepthTextureMS->setHeight( mCurrentHeight );

Qt3DRender::QRenderTarget *renderTarget = new Qt3DRender::QRenderTarget;
Qt3DRender::QRenderTargetOutput *msaaDepthOutput = new Qt3DRender::QRenderTargetOutput;
msaaDepthOutput->setAttachmentPoint( Qt3DRender::QRenderTargetOutput::DepthStencil );
msaaDepthOutput->setTexture( mDepthTextureMS );
renderTarget->addOutput( msaaDepthOutput );

Qt3DRender::QRenderTargetOutput *msaaColorOutput = new Qt3DRender::QRenderTargetOutput;
msaaColorOutput->setAttachmentPoint( Qt3DRender::QRenderTargetOutput::Color0 );
msaaColorOutput->setTexture( mColorTextureMS );
renderTarget->addOutput( msaaColorOutput );

return renderTarget;
}

/*
* We define four forward passes: one for solid objects, one for background (gradient/skybox),
* followed by two for transparent objects (one to write colors but no depths, one to write depths) :
Expand All @@ -105,7 +136,7 @@ Qt3DRender::QRenderTarget *QgsForwardRenderView::buildTextures()
* +-----------------+
* |
* +-----------------+
* | QRenderStateSet | define clip planes
* | QRenderStateSet | define clip planes (MSAA on/off)
* +-----------------+
* |
* +-----------------------+
Expand Down Expand Up @@ -148,10 +179,14 @@ void QgsForwardRenderView::buildRenderPasses()
mClipRenderStateSet = new Qt3DRender::QRenderStateSet( mLayerFilter );
mClipRenderStateSet->setObjectName( mViewName + "::Clip Plane RenderStateSet" );

Qt3DRender::QRenderTarget *renderTarget = buildTextures();
mMsaaRenderState = new Qt3DRender::QMultiSampleAntiAliasing;
mMsaaRenderState->setEnabled( false );
mClipRenderStateSet->addRenderState( mMsaaRenderState );

mRegularRenderTarget = buildTextures();

mRenderTargetSelector = new Qt3DRender::QRenderTargetSelector( mClipRenderStateSet );
mRenderTargetSelector->setTarget( renderTarget );
mRenderTargetSelector->setTarget( mRegularRenderTarget );

// first branch: opaque layer filter
Qt3DRender::QLayerFilter *opaqueObjectsFilter = new Qt3DRender::QLayerFilter( mRenderTargetSelector );
Expand Down Expand Up @@ -238,8 +273,17 @@ void QgsForwardRenderView::buildRenderPasses()

void QgsForwardRenderView::updateWindowResize( int width, int height )
{
mCurrentWidth = width; // we need to store and update the attributes so we can set msaa textures w and h when enabled
mCurrentHeight = height;
mColorTexture->setSize( width, height );
mDepthTexture->setSize( width, height );
if ( mColorTextureMS )
{
mColorTextureMS->setWidth( width );
mColorTextureMS->setHeight( height );
mDepthTextureMS->setWidth( width );
mDepthTextureMS->setHeight( height );
}
}


Expand All @@ -263,6 +307,21 @@ void QgsForwardRenderView::setDebugOverlayEnabled( bool enabled )
mDebugOverlay->setEnabled( enabled );
}

void QgsForwardRenderView::setMsaaEnabled( bool enabled )
{
if ( enabled && !mMsaaRenderTarget )
mMsaaRenderTarget = buildMsaaTarget();
mMsaaRenderState->setEnabled( enabled );
mRenderTargetSelector->setTarget( enabled ? mMsaaRenderTarget : mRegularRenderTarget );
if ( !enabled )
{
delete mMsaaRenderTarget;
mMsaaRenderTarget = nullptr;
mColorTextureMS = nullptr;
mDepthTextureMS = nullptr;
}
}

Qt3DRender::QTexture2D *QgsForwardRenderView::depthTexture() const
{
return mDepthTexture;
Expand Down
27 changes: 24 additions & 3 deletions src/3d/framegraph/qgsforwardrenderview.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@ namespace Qt3DRender
class QRenderTarget;
class QClearBuffers;
class QFrustumCulling;
class QMultiSampleAntiAliasing;
class QRenderStateSet;
class QTexture2DMultisample;
class QDebugOverlay;
} // namespace Qt3DRender

Expand Down Expand Up @@ -71,9 +73,18 @@ class QgsForwardRenderView : public QgsAbstractRenderView
//! Sets whether debug overlay is enabled
void setDebugOverlayEnabled( bool enabled );

//! Sets whether multisample anti-aliasing (MSAA) is enabled
void setMsaaEnabled( bool enabled );

//! Returns current render target selector
Qt3DRender::QRenderTargetSelector *renderTargetSelector() { return mRenderTargetSelector; }

//! Returns the regular (single-sample) render target used as blit destination and postprocessing input
Qt3DRender::QRenderTarget *regularRenderTarget() const { return mRegularRenderTarget; }

//! Returns the multisampled render target used as blit source when MSAA is enabled
Qt3DRender::QRenderTarget *msaaRenderTarget() const { return mMsaaRenderTarget; }

void updateWindowResize( int width, int height ) override;

//! Returns forward depth texture
Expand Down Expand Up @@ -120,16 +131,26 @@ class QgsForwardRenderView : public QgsAbstractRenderView
Qt3DRender::QTexture2D *mDepthTexture = nullptr;
// QDebugOverlay added in the forward pass
Qt3DRender::QDebugOverlay *mDebugOverlay = nullptr;
// MSAA
Qt3DRender::QMultiSampleAntiAliasing *mMsaaRenderState = nullptr;
Qt3DRender::QRenderTarget *mRegularRenderTarget = nullptr;
Qt3DRender::QRenderTarget *mMsaaRenderTarget = nullptr;
Qt3DRender::QTexture2DMultisample *mColorTextureMS = nullptr;
Qt3DRender::QTexture2DMultisample *mDepthTextureMS = nullptr;

int mCurrentWidth = 0;
int mCurrentHeight = 0;

/**
* Builds the three forward passes needed by forward: one for solid objects, followed by two for transparent objects
*/
void buildRenderPasses();

/**
* Build color and depth textures and add then to a new rendertarget
*/
//! Builds the regular (single-sample) color and depth textures and render target.
Qt3DRender::QRenderTarget *buildTextures();

//! Builds the multisampled color and depth textures and render target
Qt3DRender::QRenderTarget *buildMsaaTarget();
};

#endif // QGSFORWARDRENDERVIEW_H
Loading
Loading