Skip to content

Commit

Permalink
Add FPS counter check box
Browse files Browse the repository at this point in the history
  • Loading branch information
NEDJIMAbelgacem authored and wonder-sk committed Dec 8, 2020
1 parent b7fb38f commit a5329d4
Show file tree
Hide file tree
Showing 11 changed files with 222 additions and 139 deletions.
25 changes: 25 additions & 0 deletions python/3d/auto_generated/qgs3dmapsettings.sip.in
Expand Up @@ -592,6 +592,24 @@ Sets whether the skybox is enabled.
.. seealso:: :py:func:`isSkyboxEnabled`

.. versionadded:: 3.16
%End

bool isFpsCounterEnabled() const;
%Docstring
Returns whether FPS counter label is enabled

.. seealso:: :py:func:`setIsFpsCounterEnabled`

.. versionadded:: 3.18
%End

void setIsFpsCounterEnabled( bool fpsCounterEnabled );
%Docstring
Sets whether FPS counter label is enabled

.. seealso:: :py:func:`isFpsCounterEnabled`

.. versionadded:: 3.18
%End

signals:
Expand Down Expand Up @@ -780,6 +798,13 @@ Emitted when skybox settings are changed
Emitted when shadow rendering settings are changed

.. versionadded:: 3.16
%End

void fpsCounterEnabledChanged( bool fpsCounterEnabled );
%Docstring
Emitted when the FPS counter is enabled or disabled

.. versionadded:: 3.18
%End

private:
Expand Down
1 change: 1 addition & 0 deletions src/3d/qgs3dmapscene.cpp
Expand Up @@ -137,6 +137,7 @@ Qgs3DMapScene::Qgs3DMapScene( const Qgs3DMapSettings &map, QgsAbstract3DEngine *
connect( &map, &Qgs3DMapSettings::eyeDomeLightingDistanceChanged, this, &Qgs3DMapScene::onEyeDomeShadingSettingsChanged );
connect( &map, &Qgs3DMapSettings::debugShadowMapSettingsChanged, this, &Qgs3DMapScene::onDebugShadowMapSettingsChanged );
connect( &map, &Qgs3DMapSettings::debugDepthMapSettingsChanged, this, &Qgs3DMapScene::onDebugDepthMapSettingsChanged );
connect( &map, &Qgs3DMapSettings::fpsCounterEnabledChanged, this, &Qgs3DMapScene::fpsCounterEnabledChanged );

connect( QgsApplication::instance()->sourceCache(), &QgsSourceCache::remoteSourceFetched, this, [ = ]( const QString & url )
{
Expand Down
4 changes: 3 additions & 1 deletion src/3d/qgs3dmapscene.h
Expand Up @@ -126,8 +126,10 @@ class _3D_EXPORT Qgs3DMapScene : public Qt3DCore::QEntity
//! Emitted when the scene's state has changed
void sceneStateChanged();

//! Emmited when the FPS Count changes (at most every frame)
//! Emmited when the FPS count changes (at most every frame)
void fpsCountChanged( float fpsCount );
//! Emmited when the FPS counter is activated or deactivated
void fpsCounterEnabledChanged( bool fpsCounterEnabled );

public slots:
//! Updates the temporale entities
Expand Down
12 changes: 12 additions & 0 deletions src/3d/qgs3dmapsettings.cpp
Expand Up @@ -61,6 +61,8 @@ Qgs3DMapSettings::Qgs3DMapSettings( const Qgs3DMapSettings &other )
, mTransformContext( other.mTransformContext )
, mPathResolver( other.mPathResolver )
, mMapThemes( other.mMapThemes )
, mDpi( other.mDpi )
, mIsFpsCounterEnabled( other.mIsFpsCounterEnabled )
, mIsSkyboxEnabled( other.mIsSkyboxEnabled )
, mSkyboxSettings( other.mSkyboxSettings )
, mShadowSettings( other.mShadowSettings )
Expand Down Expand Up @@ -270,6 +272,7 @@ void Qgs3DMapSettings::readXml( const QDomElement &elem, const QgsReadWriteConte
mShowTerrainTileInfo = elemDebug.attribute( QStringLiteral( "terrain-tile-info" ), QStringLiteral( "0" ) ).toInt();
mShowCameraViewCenter = elemDebug.attribute( QStringLiteral( "camera-view-center" ), QStringLiteral( "0" ) ).toInt();
mShowLightSources = elemDebug.attribute( QStringLiteral( "show-light-sources" ), QStringLiteral( "0" ) ).toInt();
mIsFpsCounterEnabled = elemDebug.attribute( QStringLiteral( "show-fps-counter" ), QStringLiteral( "0" ) ).toInt();

QDomElement elemTemporalRange = elem.firstChildElement( QStringLiteral( "temporal-range" ) );
QDateTime start = QDateTime::fromString( elemTemporalRange.attribute( QStringLiteral( "start" ) ), Qt::ISODate );
Expand Down Expand Up @@ -379,6 +382,7 @@ QDomElement Qgs3DMapSettings::writeXml( QDomDocument &doc, const QgsReadWriteCon
elemDebug.setAttribute( QStringLiteral( "terrain-tile-info" ), mShowTerrainTileInfo ? 1 : 0 );
elemDebug.setAttribute( QStringLiteral( "camera-view-center" ), mShowCameraViewCenter ? 1 : 0 );
elemDebug.setAttribute( QStringLiteral( "show-light-sources" ), mShowLightSources ? 1 : 0 );
elemDebug.setAttribute( QStringLiteral( "show-fps-counter" ), mIsFpsCounterEnabled ? 1 : 0 );
elem.appendChild( elemDebug );

QDomElement elemEyeDomeLighting = doc.createElement( QStringLiteral( "eye-dome-lighting" ) );
Expand Down Expand Up @@ -780,3 +784,11 @@ void Qgs3DMapSettings::setDebugDepthMapSettings( bool enabled, Qt::Corner corner
mDebugDepthMapSize = size;
emit debugDepthMapSettingsChanged();
}

void Qgs3DMapSettings::setIsFpsCounterEnabled( bool fpsCounterEnabled )
{
if ( fpsCounterEnabled == mIsFpsCounterEnabled )
return;
mIsFpsCounterEnabled = fpsCounterEnabled;
emit fpsCounterEnabledChanged( mIsFpsCounterEnabled );
}
22 changes: 22 additions & 0 deletions src/3d/qgs3dmapsettings.h
Expand Up @@ -529,6 +529,20 @@ class _3D_EXPORT Qgs3DMapSettings : public QObject, public QgsTemporalRangeObjec
*/
void setIsSkyboxEnabled( bool enabled ) { mIsSkyboxEnabled = enabled; }

/**
* Returns whether FPS counter label is enabled
* \see setIsFpsCounterEnabled()
* \since QGIS 3.18
*/
bool isFpsCounterEnabled() const { return mIsFpsCounterEnabled; }

/**
* Sets whether FPS counter label is enabled
* \see isFpsCounterEnabled()
* \since QGIS 3.18
*/
void setIsFpsCounterEnabled( bool fpsCounterEnabled );

signals:
//! Emitted when the background color has changed
void backgroundColorChanged();
Expand Down Expand Up @@ -676,6 +690,13 @@ class _3D_EXPORT Qgs3DMapSettings : public QObject, public QgsTemporalRangeObjec
*/
void shadowSettingsChanged();

/**
* Emitted when the FPS counter is enabled or disabled
*
* \since QGIS 3.18
*/
void fpsCounterEnabledChanged( bool fpsCounterEnabled );

private:
#ifdef SIP_RUN
Qgs3DMapSettings &operator=( const Qgs3DMapSettings & );
Expand Down Expand Up @@ -713,6 +734,7 @@ class _3D_EXPORT Qgs3DMapSettings : public QObject, public QgsTemporalRangeObjec
QgsPathResolver mPathResolver;
QgsMapThemeCollection *mMapThemes = nullptr; //!< Pointer to map themes (e.g. from the current project) to resolve map theme content from the name
double mDpi = 96; //!< Dot per inch value for the screen / painter
bool mIsFpsCounterEnabled = false;

bool mIsSkyboxEnabled = false; //!< Whether the skybox is enabled
QgsSkyboxSettings mSkyboxSettings; //!< Skybox related configuration
Expand Down
2 changes: 2 additions & 0 deletions src/app/3d/qgs3dmapcanvas.cpp
Expand Up @@ -96,10 +96,12 @@ void Qgs3DMapCanvas::setMap( Qgs3DMapSettings *map )
if ( mScene )
{
disconnect( mScene, &Qgs3DMapScene::fpsCountChanged, this, &Qgs3DMapCanvas::fpsCountChanged );
disconnect( mScene, &Qgs3DMapScene::fpsCounterEnabledChanged, this, &Qgs3DMapCanvas::fpsCounterEnabledChanged );
mScene->deleteLater();
}
mScene = newScene;
connect( mScene, &Qgs3DMapScene::fpsCountChanged, this, &Qgs3DMapCanvas::fpsCountChanged );
connect( mScene, &Qgs3DMapScene::fpsCounterEnabledChanged, this, &Qgs3DMapCanvas::fpsCounterEnabledChanged );

delete mMap;
mMap = map;
Expand Down
4 changes: 3 additions & 1 deletion src/app/3d/qgs3dmapcanvas.h
Expand Up @@ -93,8 +93,10 @@ class Qgs3DMapCanvas : public QWidget
//! Emitted when the the map setting is changed
void mapSettingsChanged();

//! Emmited when the FPS Count changes (at most every frame)
//! Emmited when the FPS count changes (at most every frame)
void fpsCountChanged( float fpsCount );
//! Emitted when the FPS counter is enabled or disabeld
void fpsCounterEnabledChanged( bool enabled );

private slots:
void updateTemporalRange( const QgsDateTimeRange &timeRange );
Expand Down
7 changes: 7 additions & 0 deletions src/app/3d/qgs3dmapcanvasdockwidget.cpp
Expand Up @@ -168,6 +168,7 @@ Qgs3DMapCanvasDockWidget::Qgs3DMapCanvasDockWidget( QWidget *parent )
} );

connect( mCanvas, &Qgs3DMapCanvas::fpsCountChanged, this, &Qgs3DMapCanvasDockWidget::updateFpsCount );
connect( mCanvas, &Qgs3DMapCanvas::fpsCounterEnabledChanged, this, &Qgs3DMapCanvasDockWidget::toggleFpsCounter );

mMapToolIdentify = new Qgs3DMapToolIdentify( mCanvas );

Expand Down Expand Up @@ -262,10 +263,16 @@ void Qgs3DMapCanvasDockWidget::toggleNavigationWidget( bool visibility )
mCanvas->setOnScreenNavigationVisibility( visibility );
}

void Qgs3DMapCanvasDockWidget::toggleFpsCounter( bool visibility )
{
mLabelFpsCounter->setVisible( visibility );
}

void Qgs3DMapCanvasDockWidget::setMapSettings( Qgs3DMapSettings *map )
{
whileBlocking( mActionEnableShadows )->setChecked( map->shadowSettings().renderShadows() );
whileBlocking( mActionEnableEyeDome )->setChecked( map->eyeDomeLightingEnabled() );
whileBlocking( mLabelFpsCounter )->setVisible( map->isFpsCounterEnabled() );

mCanvas->setMap( map );

Expand Down
1 change: 1 addition & 0 deletions src/app/3d/qgs3dmapcanvasdockwidget.h
Expand Up @@ -61,6 +61,7 @@ class APP_EXPORT Qgs3DMapCanvasDockWidget : public QgsDockWidget
void measureLine();
void exportScene();
void toggleNavigationWidget( bool visibility );
void toggleFpsCounter( bool visibility );

void onMainCanvasLayersChanged();
void onMainCanvasColorChanged();
Expand Down
2 changes: 2 additions & 0 deletions src/app/3d/qgs3dmapconfigwidget.cpp
Expand Up @@ -144,6 +144,7 @@ Qgs3DMapConfigWidget::Qgs3DMapConfigWidget( Qgs3DMapSettings *map, QgsMapCanvas
chkShowBoundingBoxes->setChecked( mMap->showTerrainBoundingBoxes() );
chkShowCameraViewCenter->setChecked( mMap->showCameraViewCenter() );
chkShowLightSourceOrigins->setChecked( mMap->showLightSourceOrigins() );
mFpsCounterCheckBox->setChecked( mMap->isFpsCounterEnabled() );

groupTerrainShading->setChecked( mMap->isTerrainShadingEnabled() );
widgetTerrainMaterial->setTechnique( QgsMaterialSettingsRenderingTechnique::TrianglesWithFixedTexture );
Expand Down Expand Up @@ -326,6 +327,7 @@ void Qgs3DMapConfigWidget::apply()
mMap->setShowTerrainBoundingBoxes( chkShowBoundingBoxes->isChecked() );
mMap->setShowCameraViewCenter( chkShowCameraViewCenter->isChecked() );
mMap->setShowLightSourceOrigins( chkShowLightSourceOrigins->isChecked() );
mMap->setIsFpsCounterEnabled( mFpsCounterCheckBox->isChecked() );
mMap->setTerrainShadingEnabled( groupTerrainShading->isChecked() );

std::unique_ptr< QgsAbstractMaterialSettings > terrainMaterial( widgetTerrainMaterial->settings() );
Expand Down

0 comments on commit a5329d4

Please sign in to comment.