7#include <QtQuick3DRuntimeRender/private/qssgrenderdefaultmaterial_p.h>
8#include <QtQuick3DUtils/private/qssgutils_p.h>
9#include <QtQuick3D/private/qquick3dviewport_p.h>
847 return m_albedoSingleChannelEnabled;
852 return m_albedoChannel;
857 return m_specularSingleChannelEnabled;
862 return m_specularChannel;
867 return m_emissiveSingleChannelEnabled;
872 return m_emissiveChannel;
877 return m_emissiveMap;
882 return m_emissiveFactor;
892 return m_glossinessMap;
897 return m_invertOpacityMapValue;
922 return m_specularMap;
927 return m_normalStrength;
932 return m_occlusionMap;
937 return m_occlusionAmount;
947 return m_alphaCutoff;
952 return m_glossinessChannel;
957 return m_opacityChannel;
962 return m_occlusionChannel;
982 return m_heightChannel;
987 return m_heightAmount;
992 return m_minHeightMapSamples;
997 return m_maxHeightMapSamples;
1002 m_dirtyAttributes = 0xffffffff;
1013 markDirty(LightingModeDirty);
1023 markDirty(BlendModeDirty);
1028 if (m_albedo == diffuseColor)
1031 m_albedo = diffuseColor;
1033 markDirty(AlbedoDirty);
1045 markDirty(AlbedoDirty);
1055 markDirty(AlbedoDirty);
1060 if (m_albedoChannel ==
channel)
1065 markDirty(AlbedoDirty);
1075 markDirty(SpecularDirty);
1080 if (m_specularChannel ==
channel)
1085 markDirty(SpecularDirty);
1095 markDirty(EmissiveDirty);
1100 if (m_emissiveChannel ==
channel)
1105 markDirty(EmissiveDirty);
1117 markDirty(EmissiveDirty);
1127 markDirty(EmissiveDirty);
1138 markDirty(GlossyDirty);
1150 markDirty(GlossyDirty);
1160 markDirty(OpacityDirty);
1171 markDirty(OpacityDirty);
1183 markDirty(OpacityDirty);
1195 markDirty(NormalDirty);
1200 if (m_specular == specular)
1203 m_specular = specular;
1205 markDirty(SpecularDirty);
1217 markDirty(SpecularDirty);
1222 factor = ensureNormalized(factor);
1226 m_normalStrength = factor;
1228 markDirty(NormalDirty);
1240 markDirty(OcclusionDirty);
1250 markDirty(OcclusionDirty);
1260 markDirty(AlphaModeDirty);
1270 markDirty(AlphaModeDirty);
1275 if (m_glossinessChannel ==
channel)
1278 m_glossinessChannel =
channel;
1280 markDirty(GlossyDirty);
1285 if (m_opacityChannel ==
channel)
1290 markDirty(OpacityDirty);
1295 if (m_occlusionChannel ==
channel)
1300 markDirty(OcclusionDirty);
1309 markDirty(PointSizeDirty);
1316 m_lineWidth =
width;
1318 markDirty(LineWidthDirty);
1330 markDirty(HeightDirty);
1335 if (m_heightChannel ==
channel)
1340 markDirty(HeightDirty);
1350 markDirty(HeightDirty);
1355 if (m_minHeightMapSamples ==
samples)
1358 m_minHeightMapSamples =
samples;
1360 markDirty(HeightDirty);
1365 if (m_maxHeightMapSamples ==
samples)
1368 m_maxHeightMapSamples =
samples;
1370 markDirty(HeightDirty);
1391 if (m_dirtyAttributes & LightingModeDirty)
1394 if (m_dirtyAttributes & BlendModeDirty)
1397 if (m_dirtyAttributes & AlbedoDirty) {
1403 material->
color = QSSGUtils::color::sRGBToLinear(m_albedo);
1408 if (m_dirtyAttributes & EmissiveDirty) {
1419 if (m_dirtyAttributes & GlossyDirty) {
1420 if (!m_glossinessMap)
1429 if (m_dirtyAttributes & SpecularDirty) {
1444 if (m_dirtyAttributes & OpacityDirty) {
1451 material->
opacity = m_opacity;
1455 if (m_dirtyAttributes & NormalDirty) {
1464 if (m_dirtyAttributes & OcclusionDirty) {
1465 if (!m_occlusionMap)
1473 if (m_dirtyAttributes & AlphaModeDirty) {
1478 if (m_dirtyAttributes & PointSizeDirty)
1481 if (m_dirtyAttributes & LineWidthDirty)
1484 if (m_dirtyAttributes & HeightDirty) {
1495 if (m_dirtyAttributes & ClearcoatDirty) {
1497 if (!m_clearcoatMap)
1503 if (!m_clearcoatRoughnessMap)
1508 if (!m_clearcoatNormalMap)
1519 if (m_dirtyAttributes & TransmissionDirty) {
1521 if (!m_transmissionMap)
1528 if (m_dirtyAttributes & VolumeDirty) {
1530 if (!m_thicknessMap)
1540 if (m_dirtyAttributes & VertexColorsDirty) {
1543 material->
vertexColorRedMask = QSSGRenderDefaultMaterial::VertexColorMaskFlags::fromInt(m_vertexColorRedMask);
1544 material->
vertexColorGreenMask = QSSGRenderDefaultMaterial::VertexColorMaskFlags::fromInt(m_vertexColorGreenMask);
1545 material->
vertexColorBlueMask = QSSGRenderDefaultMaterial::VertexColorMaskFlags::fromInt(m_vertexColorBlueMask);
1546 material->
vertexColorAlphaMask = QSSGRenderDefaultMaterial::VertexColorMaskFlags::fromInt(m_vertexColorAlphaMask);
1549 m_dirtyAttributes = 0;
1556 if (change == QQuick3DObject::ItemSceneChange)
1557 updateSceneManager(
value.sceneManager);
1594void QQuick3DSpecularGlossyMaterial::markDirty(QQuick3DSpecularGlossyMaterial::DirtyType
type)
1604 return m_clearcoatAmount;
1611 m_clearcoatAmount = newClearcoatAmount;
1613 markDirty(ClearcoatDirty);
1618 return m_clearcoatMap;
1623 if (m_clearcoatMap == newClearcoatMap)
1628 m_clearcoatMap = newClearcoatMap;
1630 markDirty(ClearcoatDirty);
1635 return m_clearcoatChannel;
1640 if (m_clearcoatChannel == newClearcoatChannel)
1642 m_clearcoatChannel = newClearcoatChannel;
1644 markDirty(ClearcoatDirty);
1649 return m_clearcoatRoughnessAmount;
1654 if (
qFuzzyCompare(m_clearcoatRoughnessAmount, newClearcoatRoughnessAmount))
1656 m_clearcoatRoughnessAmount = newClearcoatRoughnessAmount;
1658 markDirty(ClearcoatDirty);
1663 return m_clearcoatRoughnessChannel;
1668 if (m_clearcoatRoughnessChannel == newClearcoatRoughnessChannel)
1670 m_clearcoatRoughnessChannel = newClearcoatRoughnessChannel;
1672 markDirty(ClearcoatDirty);
1677 return m_clearcoatRoughnessMap;
1682 if (m_clearcoatRoughnessMap == newClearcoatRoughnessMap)
1687 m_clearcoatRoughnessMap = newClearcoatRoughnessMap;
1689 markDirty(ClearcoatDirty);
1694 return m_clearcoatNormalMap;
1699 if (m_clearcoatNormalMap == newClearcoatNormalMap)
1704 m_clearcoatNormalMap = newClearcoatNormalMap;
1706 markDirty(ClearcoatDirty);
1711 return m_clearcoatNormalStrength;
1715void QQuick3DSpecularGlossyMaterial::setClearcoatNormalStrength(
float newClearcoatNormalStrength)
1717 if (
qFuzzyCompare(m_clearcoatNormalStrength, newClearcoatNormalStrength))
1719 m_clearcoatNormalStrength = newClearcoatNormalStrength;
1721 markDirty(ClearcoatDirty);
1726 return m_transmissionFactor;
1731 if (
qFuzzyCompare(m_transmissionFactor, newTransmissionFactor))
1733 m_transmissionFactor = newTransmissionFactor;
1735 markDirty(TransmissionDirty);
1740 return m_transmissionMap;
1745 if (m_transmissionMap == newTransmissionMap)
1750 m_transmissionMap = newTransmissionMap;
1752 markDirty(TransmissionDirty);
1757 return m_transmissionChannel;
1762 if (m_transmissionChannel == newTransmissionChannel)
1764 m_transmissionChannel = newTransmissionChannel;
1766 markDirty(TransmissionDirty);
1771 return m_thicknessFactor;
1778 m_thicknessFactor = newThicknessFactor;
1780 markDirty(VolumeDirty);
1785 return m_thicknessMap;
1790 if (m_thicknessMap == newThicknessMap)
1795 m_thicknessMap = newThicknessMap;
1797 markDirty(VolumeDirty);
1802 return m_thicknessChannel;
1807 if (m_thicknessChannel == newThicknessChannel)
1809 m_thicknessChannel = newThicknessChannel;
1811 markDirty(VolumeDirty);
1816 return m_attenuationDistance;
1821 if (
qFuzzyCompare(m_attenuationDistance, newAttenuationDistance))
1823 m_attenuationDistance = newAttenuationDistance;
1825 markDirty(VolumeDirty);
1830 return m_attenuationColor;
1835 return m_fresnelScaleBiasEnabled;
1840 return m_fresnelScale;
1845 return m_fresnelBias;
1850 return m_fresnelPower;
1855 return m_clearcoatFresnelScaleBiasEnabled;
1860 return m_clearcoatFresnelScale;
1865 return m_clearcoatFresnelBias;
1870 return m_clearcoatFresnelPower;
1875 return m_vertexColorsEnabled;
1880 if (m_attenuationColor == newAttenuationColor)
1882 m_attenuationColor = newAttenuationColor;
1884 markDirty(VolumeDirty);
1887void QQuick3DSpecularGlossyMaterial::setFresnelScaleBiasEnabled(
bool fresnelScaleBiasEnabled)
1893 emit fresnelScaleBiasEnabledChanged(m_fresnelScaleBiasEnabled);
1894 markDirty(SpecularDirty);
1897void QQuick3DSpecularGlossyMaterial::setFresnelScale(
float fresnelScale)
1903 emit fresnelScaleChanged(m_fresnelScale);
1904 markDirty(SpecularDirty);
1907void QQuick3DSpecularGlossyMaterial::setFresnelBias(
float fresnelBias)
1913 emit fresnelBiasChanged(m_fresnelBias);
1914 markDirty(SpecularDirty);
1917void QQuick3DSpecularGlossyMaterial::setFresnelPower(
float fresnelPower)
1923 emit fresnelPowerChanged(m_fresnelPower);
1924 markDirty(SpecularDirty);
1927void QQuick3DSpecularGlossyMaterial::setClearcoatFresnelScaleBiasEnabled(
bool clearcoatFresnelScaleBiasEnabled)
1933 emit clearcoatFresnelScaleBiasEnabledChanged(m_clearcoatFresnelScaleBiasEnabled);
1934 markDirty(ClearcoatDirty);
1937void QQuick3DSpecularGlossyMaterial::setClearcoatFresnelScale(
float clearcoatFresnelScale)
1943 emit clearcoatFresnelScaleChanged(m_clearcoatFresnelScale);
1944 markDirty(ClearcoatDirty);
1947void QQuick3DSpecularGlossyMaterial::setClearcoatFresnelBias(
float clearcoatFresnelBias)
1953 emit clearcoatFresnelBiasChanged(m_clearcoatFresnelBias);
1954 markDirty(ClearcoatDirty);
1957void QQuick3DSpecularGlossyMaterial::setClearcoatFresnelPower(
float clearcoatFresnelPower)
1963 emit clearcoatFresnelPowerChanged(m_clearcoatFresnelPower);
1964 markDirty(ClearcoatDirty);
1967void QQuick3DSpecularGlossyMaterial::setVertexColorsEnabled(
bool vertexColors)
1969 if (m_vertexColorsEnabled == vertexColors)
1972 m_vertexColorsEnabled = vertexColors;
1973 emit vertexColorsEnabledChanged(m_vertexColorsEnabled);
1974 markDirty(VertexColorsDirty);
1979 return m_vertexColorsMaskEnabled;
1982void QQuick3DSpecularGlossyMaterial::setVertexColorsMaskEnabled(
bool vertexColorsMaskEnabled)
1987 emit vertexColorsMaskEnabledChanged();
1988 markDirty(VertexColorsDirty);
1993 return m_vertexColorRedMask;
1996void QQuick3DSpecularGlossyMaterial::setVertexColorRedMask(QQuick3DSpecularGlossyMaterial::VertexColorMaskFlags vertexColorRedMask)
2001 emit vertexColorRedMaskChanged();
2002 markDirty(VertexColorsDirty);
2007 return m_vertexColorGreenMask;
2010void QQuick3DSpecularGlossyMaterial::setVertexColorGreenMask(QQuick3DSpecularGlossyMaterial::VertexColorMaskFlags vertexColorGreenMask)
2015 emit vertexColorGreenMaskChanged();
2016 markDirty(VertexColorsDirty);
2021 return m_vertexColorBlueMask;
2024void QQuick3DSpecularGlossyMaterial::setVertexColorBlueMask(QQuick3DSpecularGlossyMaterial::VertexColorMaskFlags vertexColorBlueMask)
2029 emit vertexColorBlueMaskChanged();
2030 markDirty(VertexColorsDirty);
2035 return m_vertexColorAlphaMask;
2038void QQuick3DSpecularGlossyMaterial::setVertexColorAlphaMask(QQuick3DSpecularGlossyMaterial::VertexColorMaskFlags vertexColorAlphaMask)
2043 emit vertexColorAlphaMaskChanged();
2044 markDirty(VertexColorsDirty);
IOBluetoothL2CAPChannel * channel
The QColor class provides colors based on RGB, HSV or CMYK values.
QSSGRenderGraphObject * updateSpatialNode(QSSGRenderGraphObject *node) override
void refSceneManager(QQuick3DSceneManager &)
static void attachWatcher(Context *context, Setter setter, Object3D *newO, Object3D *oldO)
Attach a object-destroyed-watcher to an object that's not owned.
\qmltype Object3D \inqmlmodule QtQuick3D \instantiates QQuick3DObject \inherits QtObject
virtual void markAllDirty()
void setOpacity(float opacity)
void specularColorChanged()
float clearcoatFresnelPower
QQuick3DMaterial::TextureChannelMapping glossinessChannel
QQuick3DTexture * clearcoatNormalMap
void normalStrengthChanged()
float clearcoatFresnelBias
void setEmissiveFactor(const QVector3D &emissiveFactor)
QQuick3DTexture * albedoMap
void heightChannelChanged()
void clearcoatNormalMapChanged()
void setTransmissionChannel(QQuick3DMaterial::TextureChannelMapping newTransmissionChannel)
QQuick3DTexture * heightMap
void setAlphaMode(QQuick3DSpecularGlossyMaterial::AlphaMode alphaMode)
QQuick3DTexture * clearcoatMap
void opacityChannelChanged()
void clearcoatRoughnessMapChanged()
void setClearcoatMap(QQuick3DTexture *newClearcoatMap)
void setOcclusionMap(QQuick3DTexture *occlusionMap)
QQuick3DTexture * transmissionMap
QQuick3DMaterial::TextureChannelMapping albedoChannel
QQuick3DTexture * emissiveMap
void albedoChannelChanged()
void setClearcoatAmount(float newClearcoatAmount)
QQuick3DMaterial::TextureChannelMapping occlusionChannel
QQuick3DSpecularGlossyMaterial(QQuick3DObject *parent=nullptr)
\qmltype SpecularGlossyMaterial \inherits Material \inqmlmodule QtQuick3D
VertexColorMaskFlags vertexColorAlphaMask
void setSpecularSingleChannelEnabled(bool specularSingleChannelEnabled)
void clearcoatMapChanged()
QQuick3DTexture * glossinessMap
QQuick3DMaterial::TextureChannelMapping specularChannel
void attenuationColorChanged()
void thicknessMapChanged()
void setSpecularColor(const QColor &specular)
QQuick3DMaterial::TextureChannelMapping opacityChannel
bool fresnelScaleBiasEnabled
void glossinessChannelChanged()
QQuick3DTexture * normalMap
void emissiveSingleChannelEnabledChanged()
void setNormalMap(QQuick3DTexture *normalMap)
void setAlbedoColor(const QColor &albedo)
QQuick3DMaterial::TextureChannelMapping transmissionChannel
void itemChange(ItemChange, const ItemChangeData &) override
void occlusionMapChanged()
void albedoSingleChannelEnabledChanged()
void setHeightMap(QQuick3DTexture *heightMap)
void setGlossiness(float glossiness)
void setThicknessChannel(QQuick3DMaterial::TextureChannelMapping newThicknessChannel)
QQuick3DTexture * opacityMap
bool clearcoatFresnelScaleBiasEnabled
void setOpacityChannel(QQuick3DMaterial::TextureChannelMapping channel)
bool vertexColorsMaskEnabled
float attenuationDistance
void setGlossinessMap(QQuick3DTexture *glossinessMap)
void setSpecularChannel(QQuick3DMaterial::TextureChannelMapping channel)
void setMinHeightMapSamples(int samples)
float clearcoatNormalStrength
void setTransmissionMap(QQuick3DTexture *newTransmissionMap)
void setEmissiveMap(QQuick3DTexture *emissiveMap)
void maxHeightMapSamplesChanged()
void setAlphaCutoff(float alphaCutoff)
void occlusionChannelChanged()
void clearcoatAmountChanged()
QQuick3DMaterial::TextureChannelMapping emissiveChannel
void setThicknessMap(QQuick3DTexture *newThicknessMap)
void setThicknessFactor(float newThicknessFactor)
void setNormalStrength(float normalStrength)
void attenuationDistanceChanged()
void thicknessChannelChanged()
void setOpacityMap(QQuick3DTexture *opacityMap)
void emissiveMapChanged()
void glossinessMapChanged()
void setEmissiveChannel(QQuick3DMaterial::TextureChannelMapping channel)
void setMaxHeightMapSamples(int samples)
void clearcoatRoughnessAmountChanged()
void occlusionAmountChanged()
void setOcclusionChannel(QQuick3DMaterial::TextureChannelMapping channel)
void transmissionChannelChanged()
float clearcoatFresnelScale
void emissiveFactorChanged()
void thicknessFactorChanged()
void specularMapChanged()
void specularChannelChanged()
float clearcoatRoughnessAmount
bool specularSingleChannelEnabled
void heightAmountChanged()
QQuick3DTexture * occlusionMap
void emissiveChannelChanged()
void alphaCutoffChanged()
QQuick3DMaterial::TextureChannelMapping thicknessChannel
void setBlendMode(QQuick3DSpecularGlossyMaterial::BlendMode blendMode)
void setAttenuationColor(const QColor &newAttenuationColor)
bool albedoSingleChannelEnabled
void setClearcoatRoughnessMap(QQuick3DTexture *newClearcoatRoughnessMap)
QQuick3DMaterial::TextureChannelMapping clearcoatRoughnessChannel
void transmissionFactorChanged()
bool invertOpacityMapValue
void invertOpacityMapValueChanged()
void setPointSize(float size)
void setAlbedoSingleChannelEnabled(bool albedoSingleChannelEnabled)
QQuick3DTexture * thicknessMap
void setOcclusionAmount(float occlusionAmount)
void setHeightChannel(QQuick3DMaterial::TextureChannelMapping channel)
VertexColorMaskFlags vertexColorBlueMask
void setClearcoatChannel(QQuick3DMaterial::TextureChannelMapping newClearcoatChannel)
void setGlossinessChannel(QQuick3DMaterial::TextureChannelMapping channel)
void setAlbedoMap(QQuick3DTexture *albedoMap)
VertexColorMaskFlags vertexColorGreenMask
VertexColorMaskFlags vertexColorRedMask
void setLineWidth(float width)
void setTransmissionFactor(float newTransmissionFactor)
void specularSingleChannelEnabledChanged()
bool emissiveSingleChannelEnabled
void clearcoatRoughnessChannelChanged()
QQuick3DTexture * clearcoatRoughnessMap
void setSpecularMap(QQuick3DTexture *specularMap)
void setEmissiveSingleChannelEnabled(bool emissiveSingleChannelEnabled)
void clearcoatChannelChanged()
QQuick3DTexture * specularMap
void setAttenuationDistance(float newAttenuationDistance)
QSSGRenderGraphObject * updateSpatialNode(QSSGRenderGraphObject *node) override
void albedoColorChanged()
void setAlbedoChannel(QQuick3DMaterial::TextureChannelMapping channel)
void minHeightMapSamplesChanged()
void setHeightAmount(float heightAmount)
void setClearcoatRoughnessAmount(float newClearcoatRoughnessAmount)
void transmissionMapChanged()
void setClearcoatRoughnessChannel(QQuick3DMaterial::TextureChannelMapping newClearcoatRoughnessChannel)
void setLighting(QQuick3DSpecularGlossyMaterial::Lighting lighting)
void clearcoatNormalStrengthChanged()
void markAllDirty() override
QQuick3DMaterial::TextureChannelMapping clearcoatChannel
~QQuick3DSpecularGlossyMaterial() override
QQuick3DMaterial::TextureChannelMapping heightChannel
void setInvertOpacityMapValue(bool invertOpacityMapValue)
void setClearcoatNormalMap(QQuick3DTexture *newClearcoatNormalMap)
QSSGRenderImage * getRenderImage()
The QVector3D class represents a vector or vertex in 3D space.
constexpr QVector3D toVector3D() const noexcept
Returns the 3D vector form of this 4D vector, dropping the w coordinate.
Combined button and popup list for selecting options.
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
bool qFuzzyCompare(qfloat16 p1, qfloat16 p2) noexcept
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLenum GLenum GLenum GLenum mapping
float clearcoatNormalStrength
QSSGRenderImage * opacityMap
QSSGRenderImage * roughnessMap
QSSGRenderImage * clearcoatMap
TextureChannelMapping baseColorChannel
QSSGRenderImage * transmissionMap
QSSGRenderImage * thicknessMap
QSSGRenderImage * clearcoatNormalMap
QSSGRenderDefaultMaterial::MaterialSpecularModel specularModel
bool invertOpacityMapValue
TextureChannelMapping transmissionChannel
VertexColorMaskFlags vertexColorAlphaMask
float clearcoatFresnelPower
bool emissiveSingleChannelEnabled
bool vertexColorsMaskEnabled
TextureChannelMapping clearcoatChannel
QSSGRenderImage * clearcoatRoughnessMap
bool specularAmountSingleChannelEnabled
VertexColorMaskFlags vertexColorBlueMask
TextureChannelMapping emissiveChannel
QSSGRenderImage * colorMap
float clearcoatRoughnessAmount
TextureChannelMapping heightChannel
float clearcoatFresnelScale
QSSGRenderImage * heightMap
QSSGRenderDefaultMaterial::MaterialBlendMode blendMode
float clearcoatFresnelScaleBiasEnabled
TextureChannelMapping opacityChannel
VertexColorMaskFlags vertexColorGreenMask
MaterialLighting lighting
TextureChannelMapping specularAmountChannel
QSSGRenderImage * occlusionMap
TextureChannelMapping occlusionChannel
float fresnelScaleBiasEnabled
float attenuationDistance
bool baseColorSingleChannelEnabled
TextureChannelMapping thicknessChannel
VertexColorMaskFlags vertexColorRedMask
QVector3D attenuationColor
TextureChannelMapping roughnessChannel
QSSGRenderImage * normalMap
QSSGRenderImage * specularMap
float clearcoatFresnelBias
QSSGRenderDefaultMaterial::MaterialAlphaMode alphaMode
TextureChannelMapping clearcoatRoughnessChannel
QSSGRenderImage * emissiveMap