Revision control

++ // Copyright (C) 2019 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
++ // Qt-Security score:significant reason:default
++
++
++ #ifndef QSSGSCENEENVIRONMENT_H
++ #define QSSGSCENEENVIRONMENT_H
++
++ //
++ // W A R N I N G
++ // -------------
++ //
++ // This file is not part of the Qt API. It exists purely as an
++ // implementation detail. This header file may change from version to
++ // version without notice, or even be removed.
++ //
++ // We mean it.
++ //
++
++ #include <QtCore/QObject>
++ #include <QtCore/QVector>
++
++ #include <QtGui/QColor>
++
++ #include <QtQuick3D/private/qquick3dnode_p.h>
++
++ #include <QtQml/QQmlListProperty>
++
++ #include <QtQuick3D/private/qquick3deffect_p.h>
++ #include <QtQuick3D/private/qquick3dlightmapper_p.h>
++ #include <QtQuick3D/private/qquick3ddebugsettings_p.h>
++ #include <QtQuick3D/private/qquick3dfog_p.h>
++ #include <QtQuick3D/private/qquick3drenderpass_p.h>
++ #include <QtQuick3D/private/qquick3dskymaterial_p.h>
++
++ QT_BEGIN_NAMESPACE
++
++ class QQuick3DTexture;
++ class QQuick3DCubeMapTexture;
++ class Q_QUICK3D_EXPORT QQuick3DSceneEnvironment : public QQuick3DObject
++ {
++ Q_OBJECT
++ Q_PROPERTY(QQuick3DEnvironmentAAModeValues antialiasingMode READ antialiasingMode WRITE setAntialiasingMode NOTIFY antialiasingModeChanged)
++ Q_PROPERTY(QQuick3DEnvironmentAAQualityValues antialiasingQuality READ antialiasingQuality WRITE setAntialiasingQuality NOTIFY antialiasingQualityChanged)
++
++ Q_PROPERTY(QQuick3DEnvironmentTemporalAAMode temporalAAMode READ temporalAAMode WRITE setTemporalAAMode NOTIFY temporalAAModeChanged REVISION(6, 11))
++ Q_PROPERTY(bool temporalAAEnabled READ temporalAAEnabled WRITE setTemporalAAEnabled NOTIFY temporalAAEnabledChanged)
++ Q_PROPERTY(float temporalAAStrength READ temporalAAStrength WRITE setTemporalAAStrength NOTIFY temporalAAStrengthChanged)
++ Q_PROPERTY(QQuick3DEnvironmentBackgroundTypes backgroundMode READ backgroundMode WRITE setBackgroundMode NOTIFY backgroundModeChanged)
++ Q_PROPERTY(QColor clearColor READ clearColor WRITE setClearColor NOTIFY clearColorChanged)
++ Q_PROPERTY(bool depthTestEnabled READ depthTestEnabled WRITE setDepthTestEnabled NOTIFY depthTestEnabledChanged)
++ Q_PROPERTY(bool depthPrePassEnabled READ depthPrePassEnabled WRITE setDepthPrePassEnabled NOTIFY depthPrePassEnabledChanged)
++
++ Q_PROPERTY(float aoStrength READ aoStrength WRITE setAoStrength NOTIFY aoStrengthChanged)
++ Q_PROPERTY(float aoDistance READ aoDistance WRITE setAoDistance NOTIFY aoDistanceChanged)
++ Q_PROPERTY(float aoSoftness READ aoSoftness WRITE setAoSoftness NOTIFY aoSoftnessChanged)
++ Q_PROPERTY(bool aoDither READ aoDither WRITE setAoDither NOTIFY aoDitherChanged)
++ Q_PROPERTY(int aoSampleRate READ aoSampleRate WRITE setAoSampleRate NOTIFY aoSampleRateChanged)
++ Q_PROPERTY(float aoBias READ aoBias WRITE setAoBias NOTIFY aoBiasChanged)
++ Q_PROPERTY(bool aoEnabled READ aoEnabled WRITE setAoEnabled NOTIFY aoEnabledChanged REVISION(6, 5))
++
++ Q_PROPERTY(QQuick3DTexture *lightProbe READ lightProbe WRITE setLightProbe NOTIFY lightProbeChanged)
++ Q_PROPERTY(QQuick3DSkyMaterial *skyMaterial READ skyMaterial WRITE setSkyMaterial NOTIFY skyMaterialChanged REVISION(6, 12))
++ Q_PROPERTY(float probeExposure READ probeExposure WRITE setProbeExposure NOTIFY probeExposureChanged)
++ Q_PROPERTY(float probeHorizon READ probeHorizon WRITE setProbeHorizon NOTIFY probeHorizonChanged)
++ Q_PROPERTY(QVector3D probeOrientation READ probeOrientation WRITE setProbeOrientation NOTIFY probeOrientationChanged)
++
++ Q_PROPERTY(QQuick3DCubeMapTexture *skyBoxCubeMap READ skyBoxCubeMap WRITE setSkyBoxCubeMap NOTIFY skyBoxCubeMapChanged REVISION(6, 4))
++
++ Q_PROPERTY(QQuick3DEnvironmentTonemapModes tonemapMode READ tonemapMode WRITE setTonemapMode NOTIFY tonemapModeChanged)
++
++ Q_PROPERTY(QQmlListProperty<QQuick3DEffect> effects READ effects)
++
++ Q_PROPERTY(float skyboxBlurAmount READ skyboxBlurAmount WRITE setSkyboxBlurAmount NOTIFY skyboxBlurAmountChanged REVISION(6, 4))
++ Q_PROPERTY(bool specularAAEnabled READ specularAAEnabled WRITE setSpecularAAEnabled NOTIFY specularAAEnabledChanged REVISION(6, 4))
++
++ Q_PROPERTY(QQuick3DLightmapper *lightmapper READ lightmapper WRITE setLightmapper NOTIFY lightmapperChanged REVISION(6, 4))
++
++ Q_PROPERTY(QQuick3DDebugSettings *debugSettings READ debugSettings WRITE setDebugSettings NOTIFY debugSettingsChanged REVISION(6, 5))
++ Q_PROPERTY(QRect scissorRect READ scissorRect WRITE setScissorRect NOTIFY scissorRectChanged REVISION(6, 5))
++
++ Q_PROPERTY(QQuick3DFog *fog READ fog WRITE setFog NOTIFY fogChanged REVISION(6, 5))
++
++ Q_PROPERTY(QQuick3DEnvironmentOITMethod oitMethod READ oitMethod WRITE setOitMethod NOTIFY oitMethodChanged REVISION(6, 9))
++
++ QML_NAMED_ELEMENT(SceneEnvironment)
++
++ public:
++
++ enum QQuick3DEnvironmentAAModeValues {
++ NoAA = 0,
++ SSAA,
++ MSAA,
++ ProgressiveAA
++ };
++ Q_ENUM(QQuick3DEnvironmentAAModeValues)
++
++ enum QQuick3DEnvironmentAAQualityValues {
++ Medium = 2,
++ High = 4,
++ VeryHigh = 8
++ };
++ Q_ENUM(QQuick3DEnvironmentAAQualityValues)
++
++ enum QQuick3DEnvironmentBackgroundTypes {
++ Transparent = 0,
++ Unspecified,
++ Color,
++ SkyBox,
++ SkyBoxCubeMap,
++ SkyMaterial
++ };
++ Q_ENUM(QQuick3DEnvironmentBackgroundTypes)
++
++ enum QQuick3DEnvironmentTonemapModes {
++ TonemapModeNone = 0,
++ TonemapModeLinear,
++ TonemapModeAces,
++ TonemapModeHejlDawson,
++ TonemapModeFilmic
++ };
++ Q_ENUM(QQuick3DEnvironmentTonemapModes)
++
++ enum QQuick3DEnvironmentOITMethod
++ {
++ OITNone = 0,
++ OITWeightedBlended,
++ OITLinkedList
++ };
++ Q_ENUM(QQuick3DEnvironmentOITMethod)
++
++ enum QQuick3DEnvironmentTemporalAAMode
++ {
++ TAADefault = 0,
++ TAAMotionVector
++ };
++ Q_ENUM(QQuick3DEnvironmentTemporalAAMode)
++
++ explicit QQuick3DSceneEnvironment(QQuick3DObject *parent = nullptr);
++ ~QQuick3DSceneEnvironment() override;
++
++ QQuick3DEnvironmentAAModeValues antialiasingMode() const;
++ QQuick3DEnvironmentAAQualityValues antialiasingQuality() const;
++ Q_REVISION(6, 11) QQuick3DEnvironmentTemporalAAMode temporalAAMode() const;
++ bool temporalAAEnabled() const;
++ float temporalAAStrength() const;
++
++ QQuick3DEnvironmentBackgroundTypes backgroundMode() const;
++ QColor clearColor() const;
++
++ float aoStrength() const;
++ float aoDistance() const;
++ float aoSoftness() const;
++ bool aoDither() const;
++ int aoSampleRate() const;
++ float aoBias() const;
++ Q_REVISION(6, 5) bool aoEnabled() const;
++ Q_REVISION(6, 5) void setAoEnabled(bool newAoEnabled);
++
++ QQuick3DTexture *lightProbe() const;
++ Q_REVISION(6, 12) QQuick3DSkyMaterial *skyMaterial() const;
++ float probeExposure() const;
++ float probeHorizon() const;
++ QVector3D probeOrientation() const;
++
++ bool depthTestEnabled() const;
++ bool depthPrePassEnabled() const;
++
++ QQuick3DEnvironmentTonemapModes tonemapMode() const;
++
++ QQmlListProperty<QQuick3DEffect> effects();
++
++ Q_REVISION(6, 4) float skyboxBlurAmount() const;
++ Q_REVISION(6, 4) bool specularAAEnabled() const;
++ Q_REVISION(6, 4) QQuick3DLightmapper *lightmapper() const;
++ Q_REVISION(6, 4) QQuick3DCubeMapTexture *skyBoxCubeMap() const;
++
++ Q_REVISION(6, 5) QQuick3DDebugSettings *debugSettings() const;
++ Q_REVISION(6, 5) QRect scissorRect() const;
++
++ Q_REVISION(6, 5) QQuick3DFog *fog() const;
++
++ QQuick3DEnvironmentOITMethod Q_REVISION(6, 9) oitMethod() const;
++
++ bool gridEnabled() const;
++ void setGridEnabled(bool newGridEnabled);
++
++ float gridScale() const;
++ void setGridScale(float newGridScale);
++
++ uint gridFlags() const;
++ void setGridFlags(uint newGridFlags);
++
++ public Q_SLOTS:
++ void setAntialiasingMode(QQuick3DSceneEnvironment::QQuick3DEnvironmentAAModeValues antialiasingMode);
++ void setAntialiasingQuality(QQuick3DSceneEnvironment::QQuick3DEnvironmentAAQualityValues antialiasingQuality);
++ Q_REVISION(6, 11) void setTemporalAAMode(const QQuick3DEnvironmentTemporalAAMode &newTemporalAAMode);
++ void setTemporalAAEnabled(bool temporalAAEnabled);
++ void setTemporalAAStrength(float strength);
++
++ void setBackgroundMode(QQuick3DSceneEnvironment::QQuick3DEnvironmentBackgroundTypes backgroundMode);
++ void setClearColor(const QColor &clearColor);
++
++ void setAoStrength(float aoStrength);
++ void setAoDistance(float aoDistance);
++ void setAoSoftness(float aoSoftness);
++ void setAoDither(bool aoDither);
++ void setAoSampleRate(int aoSampleRate);
++ void setAoBias(float aoBias);
++
++ void setLightProbe(QQuick3DTexture *lightProbe);
++ Q_REVISION(6, 12) void setSkyMaterial(QQuick3DSkyMaterial *skyMaterial);
++ void setProbeExposure(float probeExposure);
++ void setProbeHorizon(float probeHorizon);
++ void setProbeOrientation(const QVector3D &orientation);
++
++ void setDepthTestEnabled(bool depthTestEnabled);
++ void setDepthPrePassEnabled(bool depthPrePassEnabled);
++
++ void setTonemapMode(QQuick3DSceneEnvironment::QQuick3DEnvironmentTonemapModes tonemapMode);
++
++ Q_REVISION(6, 4) void setSkyboxBlurAmount(float newSkyboxBlurAmount);
++ Q_REVISION(6, 4) void setSpecularAAEnabled(bool enabled);
++ Q_REVISION(6, 4) void setSkyBoxCubeMap(QQuick3DCubeMapTexture *newSkyBoxCubeMap);
++
++ Q_REVISION(6, 4) void setLightmapper(QQuick3DLightmapper *lightmapper);
++
++ Q_REVISION(6, 5) void setDebugSettings(QQuick3DDebugSettings *newDebugSettings);
++ Q_REVISION(6, 5) void setScissorRect(QRect scissorRect);
++
++ Q_REVISION(6, 5) void setFog(QQuick3DFog *fog);
++
++ Q_REVISION(6, 9) void setOitMethod(QQuick3DSceneEnvironment::QQuick3DEnvironmentOITMethod mode);
++
++ Q_SIGNALS:
++ void antialiasingModeChanged();
++ void antialiasingQualityChanged();
++ Q_REVISION(6, 11) void temporalAAModeChanged();
++ void temporalAAEnabledChanged();
++ void temporalAAStrengthChanged();
++
++ void backgroundModeChanged();
++ void clearColorChanged();
++
++ void aoStrengthChanged();
++ void aoDistanceChanged();
++ void aoSoftnessChanged();
++ void aoDitherChanged();
++ void aoSampleRateChanged();
++ void aoBiasChanged();
++ Q_REVISION(6, 5) void aoEnabledChanged();
++
++ void lightProbeChanged();
++ Q_REVISION(6, 12) void skyMaterialChanged();
++ void probeExposureChanged();
++ void probeHorizonChanged();
++ void probeOrientationChanged();
++
++ void depthTestEnabledChanged();
++ void depthPrePassEnabledChanged();
++
++ void tonemapModeChanged();
++
++ Q_REVISION(6, 4) void skyboxBlurAmountChanged();
++ Q_REVISION(6, 4) void specularAAEnabledChanged();
++ Q_REVISION(6, 4) void lightmapperChanged();
++ Q_REVISION(6, 4) void skyBoxCubeMapChanged();
++
++ Q_REVISION(6, 5) void debugSettingsChanged();
++ Q_REVISION(6, 5) void scissorRectChanged();
++
++ Q_REVISION(6, 5) void fogChanged();
++
++ Q_REVISION(6, 9) void oitMethodChanged();
++
++ protected:
++ QSSGRenderGraphObject *updateSpatialNode(QSSGRenderGraphObject *node) override;
++ void itemChange(ItemChange, const ItemChangeData &) override;
++ virtual const QVector<QQuick3DEffect *> &effectList() const;
++ virtual bool useBuiltinTonemapper() const;
++
++ private:
++ friend class QQuick3DSceneRenderer;
++
++ enum InternalDirtyFlag : quint32
++ {
++ LightmapperDirty = 0x1,
++ };
++ using InternalDirtyFlagT = std::underlying_type_t<InternalDirtyFlag>;
++
++ static constexpr float defaultAoDistance() { return 5.0f; }
++
++ QVector<QQuick3DEffect *> m_effects;
++
++ static void qmlAppendEffect(QQmlListProperty<QQuick3DEffect> *list, QQuick3DEffect *effect);
++ static QQuick3DEffect *qmlEffectAt(QQmlListProperty<QQuick3DEffect> *list, qsizetype index);
++ static qsizetype qmlEffectsCount(QQmlListProperty<QQuick3DEffect> *list);
++ static void qmlClearEffects(QQmlListProperty<QQuick3DEffect> *list);
++
++ void updateSceneManager(QQuick3DSceneManager *manager);
++
++ QQuick3DEnvironmentAAModeValues m_antialiasingMode = NoAA;
++ QQuick3DEnvironmentAAQualityValues m_antialiasingQuality = High;
++ QQuick3DEnvironmentTemporalAAMode m_temporalAAMode = TAADefault;
++ bool m_temporalAAEnabled = false;
++ float m_temporalAAStrength = 0.3f;
++ bool m_specularAAEnabled = false;
++
++ QQuick3DEnvironmentBackgroundTypes m_backgroundMode = Transparent;
++ QColor m_clearColor = Qt::black;
++
++ float m_aoStrength = 0.0f;
++ float m_aoDistance = defaultAoDistance();
++ float m_aoSoftness = 50.0f;
++ float m_aoBias = 0.0f;
++ int m_aoSampleRate = 2;
++ bool m_aoDither = false;
++ bool m_aoEnabled = false;
++ QQuick3DTexture *m_lightProbe = nullptr;
++ QQuick3DSkyMaterial *m_skyMaterial = nullptr;
++ float m_probeExposure = 1.0f;
++ float m_probeHorizon = 0.0f;
++ QVector3D m_probeOrientation;
++
++ bool m_depthTestEnabled = true;
++ bool m_depthPrePassEnabled = false;
++ QQuick3DEnvironmentTonemapModes m_tonemapMode = QQuick3DEnvironmentTonemapModes::TonemapModeLinear;
++ float m_skyboxBlurAmount = 0.0f;
++ QQuick3DLightmapper *m_lightmapper = nullptr;
++ QMetaObject::Connection m_lightmapperSignalConnection;
++ QQuick3DCubeMapTexture *m_skyBoxCubeMap = nullptr;
++ QQuick3DDebugSettings *m_debugSettings = nullptr;
++ QRect m_scissorRect;
++ QMetaObject::Connection m_debugSettingsSignalConnection;
++ bool m_gridEnabled = false;
++ uint m_gridFlags = 0;
++ float m_gridScale = 1.0f;
++ QQuick3DFog *m_fog = nullptr;
++ QMetaObject::Connection m_fogSignalConnection;
++ QQuick3DEnvironmentOITMethod m_oitMethod = QQuick3DEnvironmentOITMethod::OITNone;
++ InternalDirtyFlagT m_dirtyFlags = { LightmapperDirty };
++ };
++
++ QT_END_NAMESPACE
++
++ #endif // QSSGSCENEENVIRONMENT_H