| 1 | // Copyright (C) 2019 The Qt Company Ltd. |
| 2 | // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only |
| 3 | |
| 4 | #ifndef QSSGPRINCIPLEDMATERIAL_H |
| 5 | #define QSSGPRINCIPLEDMATERIAL_H |
| 6 | |
| 7 | // |
| 8 | // W A R N I N G |
| 9 | // ------------- |
| 10 | // |
| 11 | // This file is not part of the Qt API. It exists purely as an |
| 12 | // implementation detail. This header file may change from version to |
| 13 | // version without notice, or even be removed. |
| 14 | // |
| 15 | // We mean it. |
| 16 | // |
| 17 | |
| 18 | #include <QtQuick3D/private/qquick3dmaterial_p.h> |
| 19 | #include <QtQuick3D/private/qquick3dtexture_p.h> |
| 20 | |
| 21 | #include <QColor> |
| 22 | #include <QHash> |
| 23 | |
| 24 | QT_BEGIN_NAMESPACE |
| 25 | |
| 26 | class Q_QUICK3D_EXPORT QQuick3DPrincipledMaterial : public QQuick3DMaterial |
| 27 | { |
| 28 | Q_OBJECT |
| 29 | Q_PROPERTY(Lighting lighting READ lighting WRITE setLighting NOTIFY lightingChanged) |
| 30 | Q_PROPERTY(BlendMode blendMode READ blendMode WRITE setBlendMode NOTIFY blendModeChanged) |
| 31 | |
| 32 | Q_PROPERTY(QColor baseColor READ baseColor WRITE setBaseColor NOTIFY baseColorChanged) |
| 33 | Q_PROPERTY(QQuick3DTexture *baseColorMap READ baseColorMap WRITE setBaseColorMap NOTIFY baseColorMapChanged) |
| 34 | Q_PROPERTY(bool baseColorSingleChannelEnabled READ baseColorSingleChannelEnabled WRITE setBaseColorSingleChannelEnabled NOTIFY baseColorSingleChannelEnabledChanged REVISION(6, 8)) |
| 35 | Q_PROPERTY(QQuick3DMaterial::TextureChannelMapping baseColorChannel READ baseColorChannel WRITE setBaseColorChannel NOTIFY baseColorChannelChanged REVISION(6, 8)) |
| 36 | |
| 37 | Q_PROPERTY(float metalness READ metalness WRITE setMetalness NOTIFY metalnessChanged) |
| 38 | Q_PROPERTY(QQuick3DTexture *metalnessMap READ metalnessMap WRITE setMetalnessMap NOTIFY metalnessMapChanged) |
| 39 | Q_PROPERTY(QQuick3DMaterial::TextureChannelMapping metalnessChannel READ metalnessChannel WRITE setMetalnessChannel NOTIFY metalnessChannelChanged) |
| 40 | |
| 41 | Q_PROPERTY(float specularAmount READ specularAmount WRITE setSpecularAmount NOTIFY specularAmountChanged) |
| 42 | Q_PROPERTY(QQuick3DTexture *specularMap READ specularMap WRITE setSpecularMap NOTIFY specularMapChanged) |
| 43 | Q_PROPERTY(float specularTint READ specularTint WRITE setSpecularTint NOTIFY specularTintChanged) |
| 44 | Q_PROPERTY(bool specularSingleChannelEnabled READ specularSingleChannelEnabled WRITE setSpecularSingleChannelEnabled NOTIFY specularSingleChannelEnabledChanged REVISION(6, 8)) |
| 45 | Q_PROPERTY(QQuick3DMaterial::TextureChannelMapping specularChannel READ specularChannel WRITE setSpecularChannel NOTIFY specularChannelChanged REVISION(6, 8)) |
| 46 | |
| 47 | Q_PROPERTY(float roughness READ roughness WRITE setRoughness NOTIFY roughnessChanged) |
| 48 | Q_PROPERTY(QQuick3DTexture *roughnessMap READ roughnessMap WRITE setRoughnessMap NOTIFY roughnessMapChanged) |
| 49 | Q_PROPERTY(QQuick3DMaterial::TextureChannelMapping roughnessChannel READ roughnessChannel WRITE setRoughnessChannel NOTIFY roughnessChannelChanged) |
| 50 | |
| 51 | Q_PROPERTY(QVector3D emissiveFactor READ emissiveFactor WRITE setEmissiveFactor NOTIFY emissiveFactorChanged) |
| 52 | Q_PROPERTY(QQuick3DTexture *emissiveMap READ emissiveMap WRITE setEmissiveMap NOTIFY emissiveMapChanged) |
| 53 | Q_PROPERTY(bool emissiveSingleChannelEnabled READ emissiveSingleChannelEnabled WRITE setEmissiveSingleChannelEnabled NOTIFY emissiveSingleChannelEnabledChanged REVISION(6, 8)) |
| 54 | Q_PROPERTY(QQuick3DMaterial::TextureChannelMapping emissiveChannel READ emissiveChannel WRITE setEmissiveChannel NOTIFY emissiveChannelChanged REVISION(6, 8)) |
| 55 | |
| 56 | Q_PROPERTY(bool invertOpacityMapValue READ invertOpacityMapValue WRITE setInvertOpacityMapValue NOTIFY invertOpacityMapValueChanged REVISION(6, 8)) |
| 57 | Q_PROPERTY(float opacity READ opacity WRITE setOpacity NOTIFY opacityChanged) |
| 58 | Q_PROPERTY(QQuick3DTexture *opacityMap READ opacityMap WRITE setOpacityMap NOTIFY opacityMapChanged) |
| 59 | Q_PROPERTY(QQuick3DMaterial::TextureChannelMapping opacityChannel READ opacityChannel WRITE setOpacityChannel NOTIFY opacityChannelChanged) |
| 60 | |
| 61 | Q_PROPERTY(QQuick3DTexture *normalMap READ normalMap WRITE setNormalMap NOTIFY normalMapChanged) |
| 62 | Q_PROPERTY(float normalStrength READ normalStrength WRITE setNormalStrength NOTIFY normalStrengthChanged) |
| 63 | |
| 64 | Q_PROPERTY(QQuick3DTexture *specularReflectionMap READ specularReflectionMap WRITE setSpecularReflectionMap NOTIFY specularReflectionMapChanged) |
| 65 | |
| 66 | Q_PROPERTY(QQuick3DTexture *occlusionMap READ occlusionMap WRITE setOcclusionMap NOTIFY occlusionMapChanged) |
| 67 | Q_PROPERTY(QQuick3DMaterial::TextureChannelMapping occlusionChannel READ occlusionChannel WRITE setOcclusionChannel NOTIFY occlusionChannelChanged) |
| 68 | Q_PROPERTY(float occlusionAmount READ occlusionAmount WRITE setOcclusionAmount NOTIFY occlusionAmountChanged) |
| 69 | |
| 70 | Q_PROPERTY(AlphaMode alphaMode READ alphaMode WRITE setAlphaMode NOTIFY alphaModeChanged) |
| 71 | Q_PROPERTY(float alphaCutoff READ alphaCutoff WRITE setAlphaCutoff NOTIFY alphaCutoffChanged) |
| 72 | |
| 73 | Q_PROPERTY(float pointSize READ pointSize WRITE setPointSize NOTIFY pointSizeChanged) |
| 74 | Q_PROPERTY(float lineWidth READ lineWidth WRITE setLineWidth NOTIFY lineWidthChanged) |
| 75 | |
| 76 | Q_PROPERTY(QQuick3DTexture *heightMap READ heightMap WRITE setHeightMap NOTIFY heightMapChanged REVISION(6, 2)) |
| 77 | Q_PROPERTY(QQuick3DMaterial::TextureChannelMapping heightChannel READ heightChannel WRITE setHeightChannel NOTIFY heightChannelChanged REVISION(6, 2)) |
| 78 | Q_PROPERTY(float heightAmount READ heightAmount WRITE setHeightAmount NOTIFY heightAmountChanged REVISION(6, 2)) |
| 79 | Q_PROPERTY(int minHeightMapSamples READ minHeightMapSamples WRITE setMinHeightMapSamples NOTIFY minHeightMapSamplesChanged REVISION(6, 2)) |
| 80 | Q_PROPERTY(int maxHeightMapSamples READ maxHeightMapSamples WRITE setMaxHeightMapSamples NOTIFY maxHeightMapSamplesChanged REVISION(6, 2)) |
| 81 | |
| 82 | Q_PROPERTY(float clearcoatAmount READ clearcoatAmount WRITE setClearcoatAmount NOTIFY clearcoatAmountChanged REVISION(6, 3)) |
| 83 | Q_PROPERTY(QQuick3DTexture *clearcoatMap READ clearcoatMap WRITE setClearcoatMap NOTIFY clearcoatMapChanged REVISION(6, 3)) |
| 84 | Q_PROPERTY(QQuick3DMaterial::TextureChannelMapping clearcoatChannel READ clearcoatChannel WRITE setClearcoatChannel NOTIFY |
| 85 | clearcoatChannelChanged REVISION(6, 3)) |
| 86 | Q_PROPERTY(float clearcoatRoughnessAmount READ clearcoatRoughnessAmount WRITE setClearcoatRoughnessAmount NOTIFY |
| 87 | clearcoatRoughnessAmountChanged REVISION(6, 3)) |
| 88 | Q_PROPERTY(QQuick3DMaterial::TextureChannelMapping clearcoatRoughnessChannel READ clearcoatRoughnessChannel WRITE |
| 89 | setClearcoatRoughnessChannel NOTIFY clearcoatRoughnessChannelChanged REVISION(6, 3)) |
| 90 | Q_PROPERTY(QQuick3DTexture *clearcoatRoughnessMap READ clearcoatRoughnessMap WRITE setClearcoatRoughnessMap NOTIFY |
| 91 | clearcoatRoughnessMapChanged REVISION(6, 3)) |
| 92 | Q_PROPERTY(QQuick3DTexture *clearcoatNormalMap READ clearcoatNormalMap WRITE setClearcoatNormalMap NOTIFY |
| 93 | clearcoatNormalMapChanged REVISION(6, 3)) |
| 94 | Q_PROPERTY(float clearcoatNormalStrength READ clearcoatNormalStrength WRITE setClearcoatNormalStrength NOTIFY clearcoatNormalStrengthChanged REVISION(6, 8)) |
| 95 | |
| 96 | Q_PROPERTY(float transmissionFactor READ transmissionFactor WRITE setTransmissionFactor NOTIFY transmissionFactorChanged) |
| 97 | Q_PROPERTY(QQuick3DTexture * transmissionMap READ transmissionMap WRITE setTransmissionMap NOTIFY transmissionMapChanged) |
| 98 | Q_PROPERTY(QQuick3DMaterial::TextureChannelMapping transmissionChannel READ transmissionChannel WRITE setTransmissionChannel NOTIFY transmissionChannelChanged) |
| 99 | |
| 100 | Q_PROPERTY(float thicknessFactor READ thicknessFactor WRITE setThicknessFactor NOTIFY thicknessFactorChanged REVISION(6, 3)) |
| 101 | Q_PROPERTY(QQuick3DTexture *thicknessMap READ thicknessMap WRITE setThicknessMap NOTIFY thicknessMapChanged REVISION(6, 3)) |
| 102 | Q_PROPERTY(QQuick3DMaterial::TextureChannelMapping thicknessChannel READ thicknessChannel WRITE setThicknessChannel NOTIFY |
| 103 | thicknessChannelChanged REVISION(6, 3)) |
| 104 | Q_PROPERTY(float attenuationDistance READ attenuationDistance WRITE setAttenuationDistance NOTIFY attenuationDistanceChanged REVISION(6, 3)) |
| 105 | Q_PROPERTY(QColor attenuationColor READ attenuationColor WRITE setAttenuationColor NOTIFY attenuationColorChanged REVISION(6, 3)) |
| 106 | |
| 107 | Q_PROPERTY(float indexOfRefraction READ indexOfRefraction WRITE setIndexOfRefraction NOTIFY indexOfRefractionChanged REVISION(6, 3)) |
| 108 | |
| 109 | Q_PROPERTY(bool vertexColorsEnabled READ vertexColorsEnabled WRITE setVertexColorsEnabled NOTIFY vertexColorsEnabledChanged REVISION(6, 5)) |
| 110 | |
| 111 | Q_PROPERTY(bool fresnelScaleBiasEnabled READ fresnelScaleBiasEnabled WRITE setFresnelScaleBiasEnabled NOTIFY fresnelScaleBiasEnabledChanged REVISION(6, 8)) |
| 112 | Q_PROPERTY(float fresnelScale READ fresnelScale WRITE setFresnelScale NOTIFY fresnelScaleChanged REVISION(6, 8)) |
| 113 | Q_PROPERTY(float fresnelBias READ fresnelBias WRITE setFresnelBias NOTIFY fresnelBiasChanged REVISION(6, 8)) |
| 114 | Q_PROPERTY(float fresnelPower READ fresnelPower WRITE setFresnelPower NOTIFY fresnelPowerChanged REVISION(6, 8)) |
| 115 | |
| 116 | Q_PROPERTY(bool clearcoatFresnelScaleBiasEnabled READ clearcoatFresnelScaleBiasEnabled WRITE setClearcoatFresnelScaleBiasEnabled NOTIFY clearcoatFresnelScaleBiasEnabledChanged REVISION(6, 8)) |
| 117 | Q_PROPERTY(float clearcoatFresnelScale READ clearcoatFresnelScale WRITE setClearcoatFresnelScale NOTIFY clearcoatFresnelScaleChanged REVISION(6, 8)) |
| 118 | Q_PROPERTY(float clearcoatFresnelBias READ clearcoatFresnelBias WRITE setClearcoatFresnelBias NOTIFY clearcoatFresnelBiasChanged REVISION(6, 8)) |
| 119 | Q_PROPERTY(float clearcoatFresnelPower READ clearcoatFresnelPower WRITE setClearcoatFresnelPower NOTIFY clearcoatFresnelPowerChanged REVISION(6, 8)) |
| 120 | |
| 121 | Q_PROPERTY(bool vertexColorsMaskEnabled READ vertexColorsMaskEnabled WRITE setVertexColorsMaskEnabled NOTIFY vertexColorsMaskEnabledChanged REVISION(6, 8)) |
| 122 | Q_PROPERTY(VertexColorMaskFlags vertexColorRedMask READ vertexColorRedMask WRITE setVertexColorRedMask NOTIFY vertexColorRedMaskChanged REVISION(6, 8)) |
| 123 | Q_PROPERTY(VertexColorMaskFlags vertexColorGreenMask READ vertexColorGreenMask WRITE setVertexColorGreenMask NOTIFY vertexColorGreenMaskChanged REVISION(6, 8)) |
| 124 | Q_PROPERTY(VertexColorMaskFlags vertexColorBlueMask READ vertexColorBlueMask WRITE setVertexColorBlueMask NOTIFY vertexColorBlueMaskChanged REVISION(6, 8)) |
| 125 | Q_PROPERTY(VertexColorMaskFlags vertexColorAlphaMask READ vertexColorAlphaMask WRITE setVertexColorAlphaMask NOTIFY vertexColorAlphaMaskChanged REVISION(6, 8)) |
| 126 | |
| 127 | QML_NAMED_ELEMENT(PrincipledMaterial) |
| 128 | |
| 129 | public: |
| 130 | enum Lighting { |
| 131 | NoLighting = 0, |
| 132 | FragmentLighting |
| 133 | }; |
| 134 | Q_ENUM(Lighting) |
| 135 | |
| 136 | enum BlendMode { |
| 137 | SourceOver = 0, |
| 138 | Screen, |
| 139 | Multiply |
| 140 | }; |
| 141 | Q_ENUM(BlendMode) |
| 142 | |
| 143 | enum AlphaMode { |
| 144 | Default = 0, |
| 145 | Mask, |
| 146 | Blend, |
| 147 | Opaque |
| 148 | }; |
| 149 | Q_ENUM(AlphaMode) |
| 150 | |
| 151 | enum VertexColorMask { |
| 152 | NoMask = QQuick3DMaterial::NoMask, |
| 153 | RoughnessMask = QQuick3DMaterial::RoughnessMask, |
| 154 | NormalStrengthMask = QQuick3DMaterial::NormalStrengthMask, |
| 155 | SpecularAmountMask = QQuick3DMaterial::SpecularAmountMask, |
| 156 | ClearcoatAmountMask = QQuick3DMaterial::ClearcoatAmountMask, |
| 157 | ClearcoatRoughnessAmountMask = QQuick3DMaterial::ClearcoatRoughnessAmountMask, |
| 158 | ClearcoatNormalStrengthMask = QQuick3DMaterial::ClearcoatNormalStrengthMask, |
| 159 | HeightAmountMask = QQuick3DMaterial::HeightAmountMask, |
| 160 | MetalnessMask = QQuick3DMaterial::MetalnessMask, |
| 161 | OcclusionAmountMask = QQuick3DMaterial::OcclusionAmountMask, |
| 162 | ThicknessFactorMask = QQuick3DMaterial::ThicknessFactorMask, |
| 163 | TransmissionFactorMask = QQuick3DMaterial::TransmissionFactorMask |
| 164 | }; |
| 165 | Q_ENUM(VertexColorMask) |
| 166 | Q_DECLARE_FLAGS(VertexColorMaskFlags, VertexColorMask) |
| 167 | Q_FLAG(VertexColorMaskFlags) |
| 168 | |
| 169 | explicit QQuick3DPrincipledMaterial(QQuick3DObject *parent = nullptr); |
| 170 | ~QQuick3DPrincipledMaterial() override; |
| 171 | |
| 172 | Lighting lighting() const; |
| 173 | BlendMode blendMode() const; |
| 174 | QColor baseColor() const; |
| 175 | QQuick3DTexture *baseColorMap() const; |
| 176 | Q_REVISION(6, 8) bool baseColorSingleChannelEnabled() const; |
| 177 | Q_REVISION(6, 8) TextureChannelMapping baseColorChannel() const; |
| 178 | Q_REVISION(6, 8) bool specularSingleChannelEnabled() const; |
| 179 | Q_REVISION(6, 8) TextureChannelMapping specularChannel() const; |
| 180 | Q_REVISION(6, 8) bool emissiveSingleChannelEnabled() const; |
| 181 | Q_REVISION(6, 8) TextureChannelMapping emissiveChannel() const; |
| 182 | QQuick3DTexture *emissiveMap() const; |
| 183 | QVector3D emissiveFactor() const; |
| 184 | QQuick3DTexture *specularReflectionMap() const; |
| 185 | QQuick3DTexture *specularMap() const; |
| 186 | float specularTint() const; |
| 187 | float specularAmount() const; |
| 188 | float roughness() const; |
| 189 | QQuick3DTexture *roughnessMap() const; |
| 190 | Q_REVISION(6, 8) bool invertOpacityMapValue() const; |
| 191 | float opacity() const; |
| 192 | QQuick3DTexture *opacityMap() const; |
| 193 | QQuick3DTexture *normalMap() const; |
| 194 | float metalness() const; |
| 195 | QQuick3DTexture *metalnessMap() const; |
| 196 | float normalStrength() const; |
| 197 | QQuick3DTexture *occlusionMap() const; |
| 198 | float occlusionAmount() const; |
| 199 | AlphaMode alphaMode() const; |
| 200 | float alphaCutoff() const; |
| 201 | TextureChannelMapping metalnessChannel() const; |
| 202 | TextureChannelMapping roughnessChannel() const; |
| 203 | TextureChannelMapping opacityChannel() const; |
| 204 | TextureChannelMapping occlusionChannel() const; |
| 205 | float pointSize() const; |
| 206 | float lineWidth() const; |
| 207 | Q_REVISION(6, 2) QQuick3DTexture *heightMap() const; |
| 208 | Q_REVISION(6, 2) TextureChannelMapping heightChannel() const; |
| 209 | Q_REVISION(6, 2) float heightAmount() const; |
| 210 | Q_REVISION(6, 2) int minHeightMapSamples() const; |
| 211 | Q_REVISION(6, 2) int maxHeightMapSamples() const; |
| 212 | |
| 213 | Q_REVISION(6, 3) float clearcoatAmount() const; |
| 214 | Q_REVISION(6, 3) QQuick3DTexture *clearcoatMap() const; |
| 215 | Q_REVISION(6, 3) TextureChannelMapping clearcoatChannel() const; |
| 216 | Q_REVISION(6, 3) float clearcoatRoughnessAmount() const; |
| 217 | Q_REVISION(6, 3) TextureChannelMapping clearcoatRoughnessChannel() const; |
| 218 | Q_REVISION(6, 3) QQuick3DTexture *clearcoatRoughnessMap() const; |
| 219 | Q_REVISION(6, 3) QQuick3DTexture *clearcoatNormalMap() const; |
| 220 | Q_REVISION(6, 8) float clearcoatNormalStrength() const; |
| 221 | |
| 222 | Q_REVISION(6, 3) float transmissionFactor() const; |
| 223 | Q_REVISION(6, 3) QQuick3DTexture *transmissionMap() const; |
| 224 | Q_REVISION(6, 3) TextureChannelMapping transmissionChannel() const; |
| 225 | |
| 226 | Q_REVISION(6, 3) float thicknessFactor() const; |
| 227 | Q_REVISION(6, 3) QQuick3DTexture *thicknessMap() const; |
| 228 | Q_REVISION(6, 3) const TextureChannelMapping &thicknessChannel() const; |
| 229 | Q_REVISION(6, 3) float attenuationDistance() const; |
| 230 | Q_REVISION(6, 3) const QColor &attenuationColor() const; |
| 231 | |
| 232 | Q_REVISION(6, 3) float indexOfRefraction() const; |
| 233 | Q_REVISION(6, 8) bool fresnelScaleBiasEnabled() const; |
| 234 | Q_REVISION(6, 8) float fresnelScale() const; |
| 235 | Q_REVISION(6, 8) float fresnelBias() const; |
| 236 | Q_REVISION(6, 8) float fresnelPower() const; |
| 237 | |
| 238 | Q_REVISION(6, 8) bool clearcoatFresnelScaleBiasEnabled() const; |
| 239 | Q_REVISION(6, 8) float clearcoatFresnelScale() const; |
| 240 | Q_REVISION(6, 8) float clearcoatFresnelBias() const; |
| 241 | Q_REVISION(6, 8) float clearcoatFresnelPower() const; |
| 242 | |
| 243 | Q_REVISION(6, 5) bool vertexColorsEnabled() const; |
| 244 | |
| 245 | Q_REVISION(6, 8) bool vertexColorsMaskEnabled() const; |
| 246 | |
| 247 | Q_REVISION(6, 8) VertexColorMaskFlags vertexColorRedMask() const; |
| 248 | Q_REVISION(6, 8) VertexColorMaskFlags vertexColorGreenMask() const; |
| 249 | Q_REVISION(6, 8) VertexColorMaskFlags vertexColorBlueMask() const; |
| 250 | Q_REVISION(6, 8) VertexColorMaskFlags vertexColorAlphaMask() const; |
| 251 | |
| 252 | public Q_SLOTS: |
| 253 | void setLighting(QQuick3DPrincipledMaterial::Lighting lighting); |
| 254 | void setBlendMode(QQuick3DPrincipledMaterial::BlendMode blendMode); |
| 255 | void setBaseColor(QColor baseColor); |
| 256 | void setBaseColorMap(QQuick3DTexture *baseColorMap); |
| 257 | Q_REVISION(6, 8) void setBaseColorSingleChannelEnabled(bool baseColorSingleChannelEnabled); |
| 258 | Q_REVISION(6, 8) void setBaseColorChannel(QQuick3DMaterial::TextureChannelMapping channel); |
| 259 | Q_REVISION(6, 8) void setSpecularSingleChannelEnabled(bool specularSingleChannelEnabled); |
| 260 | Q_REVISION(6, 8) void setSpecularChannel(QQuick3DMaterial::TextureChannelMapping channel); |
| 261 | Q_REVISION(6, 8) void setEmissiveSingleChannelEnabled(bool emissiveSingleChannelEnabled); |
| 262 | Q_REVISION(6, 8) void setEmissiveChannel(QQuick3DMaterial::TextureChannelMapping channel); |
| 263 | void setEmissiveMap(QQuick3DTexture *emissiveMap); |
| 264 | void setEmissiveFactor(QVector3D emissiveFactor); |
| 265 | void setSpecularReflectionMap(QQuick3DTexture *specularReflectionMap); |
| 266 | void setSpecularMap(QQuick3DTexture *specularMap); |
| 267 | void setSpecularTint(float specularTint); |
| 268 | void setSpecularAmount(float specularAmount); |
| 269 | void setRoughness(float roughness); |
| 270 | void setRoughnessMap(QQuick3DTexture *roughnessMap); |
| 271 | Q_REVISION(6, 8) void setInvertOpacityMapValue(bool invertOpacityMapValue); |
| 272 | void setOpacity(float opacity); |
| 273 | void setOpacityMap(QQuick3DTexture *opacityMap); |
| 274 | void setNormalMap(QQuick3DTexture *normalMap); |
| 275 | void setMetalness(float metalnessAmount); |
| 276 | void setMetalnessMap(QQuick3DTexture *metalnessMap); |
| 277 | void setNormalStrength(float normalStrength); |
| 278 | void setOcclusionMap(QQuick3DTexture *occlusionMap); |
| 279 | void setOcclusionAmount(float occlusionAmount); |
| 280 | void setAlphaMode(QQuick3DPrincipledMaterial::AlphaMode alphaMode); |
| 281 | void setAlphaCutoff(float alphaCutoff); |
| 282 | void setMetalnessChannel(QQuick3DMaterial::TextureChannelMapping channel); |
| 283 | void setRoughnessChannel(QQuick3DMaterial::TextureChannelMapping channel); |
| 284 | void setOpacityChannel(QQuick3DMaterial::TextureChannelMapping channel); |
| 285 | void setOcclusionChannel(QQuick3DMaterial::TextureChannelMapping channel); |
| 286 | void setPointSize(float size); |
| 287 | void setLineWidth(float width); |
| 288 | Q_REVISION(6, 2) void setHeightMap(QQuick3DTexture *heightMap); |
| 289 | Q_REVISION(6, 2) void setHeightChannel(QQuick3DMaterial::TextureChannelMapping channel); |
| 290 | Q_REVISION(6, 2) void setHeightAmount(float heightAmount); |
| 291 | Q_REVISION(6, 2) void setMinHeightMapSamples(int samples); |
| 292 | Q_REVISION(6, 2) void setMaxHeightMapSamples(int samples); |
| 293 | |
| 294 | Q_REVISION(6, 3) void setClearcoatAmount(float newClearcoatAmount); |
| 295 | Q_REVISION(6, 3) void setClearcoatMap(QQuick3DTexture *newClearcoatMap); |
| 296 | Q_REVISION(6, 3) void setClearcoatChannel(QQuick3DMaterial::TextureChannelMapping newClearcoatChannel); |
| 297 | Q_REVISION(6, 3) void setClearcoatRoughnessAmount(float newClearcoatRoughnessAmount); |
| 298 | Q_REVISION(6, 3) void setClearcoatRoughnessChannel(QQuick3DMaterial::TextureChannelMapping newClearcoatRoughnessChannel); |
| 299 | Q_REVISION(6, 3) void setClearcoatRoughnessMap(QQuick3DTexture *newClearcoatRoughnessMap); |
| 300 | Q_REVISION(6, 3) void setClearcoatNormalMap(QQuick3DTexture *newClearcoatNormalMap); |
| 301 | Q_REVISION(6, 8) void setClearcoatNormalStrength(float clearcoatNormalStrength); |
| 302 | |
| 303 | Q_REVISION(6, 3) void setTransmissionFactor(float newTransmissionFactor); |
| 304 | Q_REVISION(6, 3) void setTransmissionMap(QQuick3DTexture *newTransmissionMap); |
| 305 | Q_REVISION(6, 3) void setTransmissionChannel(QQuick3DMaterial::TextureChannelMapping newTransmissionChannel); |
| 306 | |
| 307 | Q_REVISION(6, 3) void setThicknessFactor(float newThicknessFactor); |
| 308 | Q_REVISION(6, 3) void setThicknessMap(QQuick3DTexture *newThicknessMap); |
| 309 | Q_REVISION(6, 3) void setThicknessChannel(const QQuick3DMaterial::TextureChannelMapping &newThicknessChannel); |
| 310 | Q_REVISION(6, 3) void setAttenuationDistance(float newAttenuationDistance); |
| 311 | Q_REVISION(6, 3) void setAttenuationColor(const QColor &newAttenuationColor); |
| 312 | |
| 313 | Q_REVISION(6, 3) void setIndexOfRefraction(float indexOfRefraction); |
| 314 | Q_REVISION(6, 8) void setFresnelScaleBiasEnabled(bool fresnelScaleBias); |
| 315 | Q_REVISION(6, 8) void setFresnelScale(float fresnelScale); |
| 316 | Q_REVISION(6, 8) void setFresnelBias(float fresnelBias); |
| 317 | Q_REVISION(6, 8) void setFresnelPower(float fresnelPower); |
| 318 | |
| 319 | Q_REVISION(6, 8) void setClearcoatFresnelScaleBiasEnabled(bool clearcoatFresnelScaleBias); |
| 320 | Q_REVISION(6, 8) void setClearcoatFresnelScale(float clearcoatFresnelScale); |
| 321 | Q_REVISION(6, 8) void setClearcoatFresnelBias(float clearcoatFresnelBias); |
| 322 | Q_REVISION(6, 8) void setClearcoatFresnelPower(float clearcoatFresnelPower); |
| 323 | |
| 324 | Q_REVISION(6, 5) void setVertexColorsEnabled(bool vertexColorsEnabled); |
| 325 | |
| 326 | Q_REVISION(6, 8) void setVertexColorsMaskEnabled(bool vertexColorsMaskEnabled); |
| 327 | Q_REVISION(6, 8) void setVertexColorRedMask(VertexColorMaskFlags vertexColorRedMask); |
| 328 | Q_REVISION(6, 8) void setVertexColorGreenMask(VertexColorMaskFlags vertexColorGreenMask); |
| 329 | Q_REVISION(6, 8) void setVertexColorBlueMask(VertexColorMaskFlags vertexColorBlueMask); |
| 330 | Q_REVISION(6, 8) void setVertexColorAlphaMask(VertexColorMaskFlags vertexColorAlphaMask); |
| 331 | |
| 332 | Q_SIGNALS: |
| 333 | void lightingChanged(QQuick3DPrincipledMaterial::Lighting lighting); |
| 334 | void blendModeChanged(QQuick3DPrincipledMaterial::BlendMode blendMode); |
| 335 | void baseColorChanged(QColor baseColor); |
| 336 | void baseColorMapChanged(QQuick3DTexture *baseColorMap); |
| 337 | Q_REVISION(6, 8) void baseColorSingleChannelEnabledChanged(bool baseColorSingleChannelEnabled); |
| 338 | Q_REVISION(6, 8) void baseColorChannelChanged(QQuick3DMaterial::TextureChannelMapping channel); |
| 339 | Q_REVISION(6, 8) void specularSingleChannelEnabledChanged(bool specularColorSingleChannelEnabled); |
| 340 | Q_REVISION(6, 8) void specularChannelChanged(QQuick3DMaterial::TextureChannelMapping channel); |
| 341 | Q_REVISION(6, 8) void emissiveSingleChannelEnabledChanged(bool emissiveColorSingleChannelEnabled); |
| 342 | Q_REVISION(6, 8) void emissiveChannelChanged(QQuick3DMaterial::TextureChannelMapping channel); |
| 343 | void emissiveMapChanged(QQuick3DTexture *emissiveMap); |
| 344 | void emissiveFactorChanged(QVector3D emissiveFactor); |
| 345 | void specularReflectionMapChanged(QQuick3DTexture *specularReflectionMap); |
| 346 | void specularMapChanged(QQuick3DTexture *specularMap); |
| 347 | void specularTintChanged(float specularTint); |
| 348 | void specularAmountChanged(float specularAmount); |
| 349 | void roughnessChanged(float roughness); |
| 350 | void roughnessMapChanged(QQuick3DTexture *roughnessMap); |
| 351 | Q_REVISION(6, 8) void invertOpacityMapValueChanged(bool invertOpacityMapValue); |
| 352 | void opacityChanged(float opacity); |
| 353 | void opacityMapChanged(QQuick3DTexture *opacityMap); |
| 354 | void normalMapChanged(QQuick3DTexture *normalMap); |
| 355 | void metalnessChanged(float metalness); |
| 356 | void metalnessMapChanged(QQuick3DTexture *metalnessMap); |
| 357 | void normalStrengthChanged(float normalStrength); |
| 358 | void occlusionMapChanged(QQuick3DTexture *occlusionMap); |
| 359 | void occlusionAmountChanged(float occlusionAmount); |
| 360 | void alphaModeChanged(QQuick3DPrincipledMaterial::AlphaMode alphaMode); |
| 361 | void alphaCutoffChanged(float alphaCutoff); |
| 362 | void metalnessChannelChanged(QQuick3DMaterial::TextureChannelMapping channel); |
| 363 | void roughnessChannelChanged(QQuick3DMaterial::TextureChannelMapping channel); |
| 364 | void opacityChannelChanged(QQuick3DMaterial::TextureChannelMapping channel); |
| 365 | void occlusionChannelChanged(QQuick3DMaterial::TextureChannelMapping channel); |
| 366 | void pointSizeChanged(); |
| 367 | void lineWidthChanged(); |
| 368 | Q_REVISION(6, 2) void heightMapChanged(QQuick3DTexture *heightMap); |
| 369 | Q_REVISION(6, 2) void heightChannelChanged(QQuick3DMaterial::TextureChannelMapping channel); |
| 370 | Q_REVISION(6, 2) void heightAmountChanged(float heightAmount); |
| 371 | Q_REVISION(6, 2) void minHeightMapSamplesChanged(int samples); |
| 372 | Q_REVISION(6, 2) void maxHeightMapSamplesChanged(int samples); |
| 373 | |
| 374 | Q_REVISION(6, 3) void clearcoatAmountChanged(float amount); |
| 375 | Q_REVISION(6, 3) void clearcoatMapChanged(QQuick3DTexture *texture); |
| 376 | Q_REVISION(6, 3) void clearcoatChannelChanged(QQuick3DMaterial::TextureChannelMapping channel); |
| 377 | Q_REVISION(6, 3) void clearcoatRoughnessAmountChanged(float amount); |
| 378 | Q_REVISION(6, 3) void clearcoatRoughnessChannelChanged(QQuick3DMaterial::TextureChannelMapping channel); |
| 379 | Q_REVISION(6, 3) void clearcoatRoughnessMapChanged(QQuick3DTexture *texture); |
| 380 | Q_REVISION(6, 3) void clearcoatNormalMapChanged(QQuick3DTexture *texture); |
| 381 | Q_REVISION(6, 8) void clearcoatNormalStrengthChanged(float clearcoatNormalStrength); |
| 382 | |
| 383 | Q_REVISION(6, 3) void transmissionFactorChanged(float amount); |
| 384 | Q_REVISION(6, 3) void transmissionMapChanged(QQuick3DTexture *texture); |
| 385 | Q_REVISION(6, 3) void transmissionChannelChanged(QQuick3DMaterial::TextureChannelMapping channel); |
| 386 | |
| 387 | Q_REVISION(6, 3) void thicknessFactorChanged(float amount); |
| 388 | Q_REVISION(6, 3) void thicknessMapChanged(QQuick3DTexture *texture); |
| 389 | Q_REVISION(6, 3) void thicknessChannelChanged(QQuick3DMaterial::TextureChannelMapping channel); |
| 390 | Q_REVISION(6, 3) void attenuationDistanceChanged(float distance); |
| 391 | Q_REVISION(6, 3) void attenuationColorChanged(QColor color); |
| 392 | |
| 393 | Q_REVISION(6, 3) void indexOfRefractionChanged(float indexOfRefraction); |
| 394 | Q_REVISION(6, 8) void fresnelScaleBiasEnabledChanged(bool fresnelScaleBiasEnabled); |
| 395 | Q_REVISION(6, 8) void fresnelScaleChanged(float fresnelScale); |
| 396 | Q_REVISION(6, 8) void fresnelBiasChanged(float fresnelBias); |
| 397 | Q_REVISION(6, 8) void fresnelPowerChanged(float fresnelPower); |
| 398 | |
| 399 | Q_REVISION(6, 8) void clearcoatFresnelScaleBiasEnabledChanged(bool clearcoatFresnelScaleBiasEnabled); |
| 400 | Q_REVISION(6, 8) void clearcoatFresnelScaleChanged(float clearcoatFresnelScale); |
| 401 | Q_REVISION(6, 8) void clearcoatFresnelBiasChanged(float clearcoatFresnelBias); |
| 402 | Q_REVISION(6, 8) void clearcoatFresnelPowerChanged(float clearcoatFresnelPower); |
| 403 | |
| 404 | Q_REVISION(6, 5) void vertexColorsEnabledChanged(bool vertexColorsEnabled); |
| 405 | |
| 406 | Q_REVISION(6, 8) void vertexColorsMaskEnabledChanged(); |
| 407 | Q_REVISION(6, 8) void vertexColorRedMaskChanged(); |
| 408 | Q_REVISION(6, 8) void vertexColorGreenMaskChanged(); |
| 409 | Q_REVISION(6, 8) void vertexColorBlueMaskChanged(); |
| 410 | Q_REVISION(6, 8) void vertexColorAlphaMaskChanged(); |
| 411 | |
| 412 | protected: |
| 413 | QSSGRenderGraphObject *updateSpatialNode(QSSGRenderGraphObject *node) override; |
| 414 | void markAllDirty() override; |
| 415 | void itemChange(ItemChange, const ItemChangeData &) override; |
| 416 | private: |
| 417 | enum DirtyType { |
| 418 | LightingModeDirty = 0x00000001, |
| 419 | BlendModeDirty = 0x00000002, |
| 420 | BaseColorDirty = 0x00000004, |
| 421 | EmissiveDirty = 0x00000008, |
| 422 | SpecularDirty = 0x00000010, |
| 423 | OpacityDirty = 0x00000020, |
| 424 | NormalDirty = 0x00000040, |
| 425 | MetalnessDirty = 0x00000080, |
| 426 | RoughnessDirty = 0x00000100, |
| 427 | OcclusionDirty = 0x00000200, |
| 428 | AlphaModeDirty = 0x00000400, |
| 429 | PointSizeDirty = 0x00000800, |
| 430 | LineWidthDirty = 0x00001000, |
| 431 | HeightDirty = 0x00002000, |
| 432 | ClearcoatDirty = 0x00004000, |
| 433 | TransmissionDirty = 0x00008000, |
| 434 | VolumeDirty = 0x00010000, |
| 435 | VertexColorsDirty = 0x00020000 |
| 436 | }; |
| 437 | |
| 438 | void updateSceneManager(QQuick3DSceneManager *window); |
| 439 | |
| 440 | // Note: The default values for properties that are also present in |
| 441 | // QSSGShaderCustomMaterialAdapter must match the values there, because a |
| 442 | // PrincipledMaterial { } and CustomMaterial { } must be identical. Same |
| 443 | // goes for the custom shader defaults in generateFragmentShader(), keep |
| 444 | // them in sync. |
| 445 | |
| 446 | Lighting m_lighting = FragmentLighting; |
| 447 | BlendMode m_blendMode = SourceOver; |
| 448 | AlphaMode m_alphaMode = Default; |
| 449 | QColor m_baseColor = Qt::white; |
| 450 | QQuick3DTexture *m_baseColorMap = nullptr; |
| 451 | bool m_baseColorSingleChannelEnabled = false; |
| 452 | TextureChannelMapping m_baseColorChannel = QQuick3DMaterial::R; |
| 453 | bool m_specularSingleChannelEnabled = false; |
| 454 | TextureChannelMapping m_specularChannel = QQuick3DMaterial::R; |
| 455 | TextureChannelMapping m_emissiveChannel = QQuick3DMaterial::R; |
| 456 | bool m_emissiveSingleChannelEnabled = false; |
| 457 | QVector3D m_emissiveFactor; |
| 458 | QQuick3DTexture *m_emissiveMap = nullptr; |
| 459 | |
| 460 | QQuick3DTexture *m_specularReflectionMap = nullptr; |
| 461 | QQuick3DTexture *m_specularMap = nullptr; |
| 462 | QQuick3DTexture *m_roughnessMap = nullptr; |
| 463 | QQuick3DTexture *m_opacityMap = nullptr; |
| 464 | QQuick3DTexture *m_normalMap = nullptr; |
| 465 | QQuick3DTexture *m_metalnessMap = nullptr; |
| 466 | QQuick3DTexture *m_occlusionMap = nullptr; |
| 467 | float m_specularTint = 0.0f; |
| 468 | float m_specularAmount = 1.0f; |
| 469 | float m_roughness = 0.0f; |
| 470 | bool m_invertOpacityMapValue = false; |
| 471 | float m_opacity = 1.0f; |
| 472 | float m_metalnessAmount = 0.0f; |
| 473 | float m_normalStrength = 1.0f; |
| 474 | float m_occlusionAmount = 1.0f; |
| 475 | float m_alphaCutoff = 0.5f; |
| 476 | TextureChannelMapping m_metalnessChannel = QQuick3DMaterial::B; |
| 477 | TextureChannelMapping m_roughnessChannel = QQuick3DMaterial::G; |
| 478 | TextureChannelMapping m_opacityChannel = QQuick3DMaterial::A; |
| 479 | TextureChannelMapping m_occlusionChannel = QQuick3DMaterial::R; |
| 480 | float m_pointSize = 1.0f; |
| 481 | float m_lineWidth = 1.0f; |
| 482 | QQuick3DTexture *m_heightMap = nullptr; |
| 483 | TextureChannelMapping m_heightChannel = QQuick3DMaterial::R; |
| 484 | float m_heightAmount = 0.0f; |
| 485 | int m_minHeightMapSamples = 8; |
| 486 | int m_maxHeightMapSamples = 32; |
| 487 | float m_clearcoatAmount = 0.0f; |
| 488 | QQuick3DTexture *m_clearcoatMap = nullptr; |
| 489 | TextureChannelMapping m_clearcoatChannel = QQuick3DMaterial::R; |
| 490 | float m_clearcoatRoughnessAmount = 0.0f; |
| 491 | float m_clearcoatNormalStrength = 1.0f; |
| 492 | TextureChannelMapping m_clearcoatRoughnessChannel = QQuick3DMaterial::G; |
| 493 | QQuick3DTexture *m_clearcoatRoughnessMap = nullptr; |
| 494 | QQuick3DTexture *m_clearcoatNormalMap = nullptr; |
| 495 | float m_transmissionFactor = 0.0f; |
| 496 | QQuick3DTexture *m_transmissionMap = nullptr; |
| 497 | TextureChannelMapping m_transmissionChannel = QQuick3DMaterial::R; |
| 498 | float m_thicknessFactor = 0.0f; |
| 499 | QQuick3DTexture *m_thicknessMap = nullptr; |
| 500 | TextureChannelMapping m_thicknessChannel = QQuick3DMaterial::G; |
| 501 | float m_attenuationDistance = std::numeric_limits<float>::infinity(); |
| 502 | QColor m_attenuationColor = Qt::white; |
| 503 | float m_indexOfRefraction = 1.5f; |
| 504 | bool m_fresnelScaleBiasEnabled = false; |
| 505 | float m_fresnelScale = 1.0f; |
| 506 | float m_fresnelBias = 0.0f; |
| 507 | float m_fresnelPower = 5.0f; |
| 508 | bool m_clearcoatFresnelScaleBiasEnabled = false; |
| 509 | float m_clearcoatFresnelScale = 1.0f; |
| 510 | float m_clearcoatFresnelBias = 0.0f; |
| 511 | float m_clearcoatFresnelPower = 5.0f; |
| 512 | bool m_vertexColorsEnabled = true; |
| 513 | |
| 514 | bool m_vertexColorsMaskEnabled = false; |
| 515 | VertexColorMaskFlags m_vertexColorRedMask = NoMask; |
| 516 | VertexColorMaskFlags m_vertexColorGreenMask = NoMask; |
| 517 | VertexColorMaskFlags m_vertexColorBlueMask = NoMask; |
| 518 | VertexColorMaskFlags m_vertexColorAlphaMask = NoMask; |
| 519 | |
| 520 | quint32 m_dirtyAttributes = 0xffffffff; // all dirty by default |
| 521 | void markDirty(DirtyType type); |
| 522 | |
| 523 | static constexpr float ensureNormalized(float val) { return qBound(min: 0.0f, val, max: 1.0f); } |
| 524 | }; |
| 525 | |
| 526 | QT_END_NAMESPACE |
| 527 | |
| 528 | #endif // QSSGPRINCIPLEDMATERIAL_H |
| 529 | |