Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qquick3dspecularglossymaterial.cpp
Go to the documentation of this file.
1// Copyright (C) 2022 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
5#include "qquick3dobject_p.h"
6
7#include <QtQuick3DRuntimeRender/private/qssgrenderdefaultmaterial_p.h>
8#include <QtQuick3DUtils/private/qssgutils_p.h>
9#include <QtQuick3D/private/qquick3dviewport_p.h>
10
12
820
824
829
834
836{
837 return m_albedo;
838}
839
841{
842 return m_albedoMap;
843}
844
846{
847 return m_albedoSingleChannelEnabled;
848}
849
854
856{
857 return m_specularSingleChannelEnabled;
858}
859
864
866{
867 return m_emissiveSingleChannelEnabled;
868}
869
874
876{
877 return m_emissiveMap;
878}
879
881{
882 return m_emissiveFactor;
883}
884
886{
887 return m_glossiness;
888}
889
891{
892 return m_glossinessMap;
893}
894
896{
897 return m_invertOpacityMapValue;
898}
899
901{
902 return m_opacity;
903}
904
906{
907 return m_opacityMap;
908}
909
911{
912 return m_normalMap;
913}
914
916{
917 return m_specular;
918}
919
921{
922 return m_specularMap;
923}
924
926{
927 return m_normalStrength;
928}
929
931{
932 return m_occlusionMap;
933}
934
936{
937 return m_occlusionAmount;
938}
939
944
946{
947 return m_alphaCutoff;
948}
949
954
959
964
966{
967 return m_pointSize;
968}
969
971{
972 return m_lineWidth;
973}
974
976{
977 return m_heightMap;
978}
979
984
986{
987 return m_heightAmount;
988}
989
991{
992 return m_minHeightMapSamples;
993}
994
996{
997 return m_maxHeightMapSamples;
998}
999
1001{
1002 m_dirtyAttributes = 0xffffffff;
1004}
1005
1007{
1008 if (m_lighting == lighting)
1009 return;
1010
1011 m_lighting = lighting;
1013 markDirty(LightingModeDirty);
1014}
1015
1017{
1018 if (m_blendMode == blendMode)
1019 return;
1020
1021 m_blendMode = blendMode;
1023 markDirty(BlendModeDirty);
1024}
1025
1027{
1028 if (m_albedo == diffuseColor)
1029 return;
1030
1031 m_albedo = diffuseColor;
1033 markDirty(AlbedoDirty);
1034}
1035
1037{
1038 if (m_albedoMap == albedoMap)
1039 return;
1040
1042
1043 m_albedoMap = albedoMap;
1045 markDirty(AlbedoDirty);
1046}
1047
1049{
1050 if (m_albedoSingleChannelEnabled == albedoSingleChannelEnabled)
1051 return;
1052
1053 m_albedoSingleChannelEnabled = albedoSingleChannelEnabled;
1055 markDirty(AlbedoDirty);
1056}
1057
1059{
1060 if (m_albedoChannel == channel)
1061 return;
1062
1063 m_albedoChannel = channel;
1065 markDirty(AlbedoDirty);
1066}
1067
1069{
1070 if (m_specularSingleChannelEnabled == specularSingleChannelEnabled)
1071 return;
1072
1073 m_specularSingleChannelEnabled = specularSingleChannelEnabled;
1075 markDirty(SpecularDirty);
1076}
1077
1079{
1080 if (m_specularChannel == channel)
1081 return;
1082
1083 m_specularChannel = channel;
1085 markDirty(SpecularDirty);
1086}
1087
1089{
1090 if (m_emissiveSingleChannelEnabled == emissiveSingleChannelEnabled)
1091 return;
1092
1093 m_emissiveSingleChannelEnabled = emissiveSingleChannelEnabled;
1095 markDirty(EmissiveDirty);
1096}
1097
1099{
1100 if (m_emissiveChannel == channel)
1101 return;
1102
1103 m_emissiveChannel = channel;
1105 markDirty(EmissiveDirty);
1106}
1107
1109{
1110 if (m_emissiveMap == emissiveMap)
1111 return;
1112
1114
1115 m_emissiveMap = emissiveMap;
1117 markDirty(EmissiveDirty);
1118}
1119
1121{
1122 if (m_emissiveFactor == emissiveFactor)
1123 return;
1124
1125 m_emissiveFactor = emissiveFactor;
1127 markDirty(EmissiveDirty);
1128}
1129
1131{
1132 glossiness = ensureNormalized(glossiness);
1133 if (qFuzzyCompare(m_glossiness, glossiness))
1134 return;
1135
1136 m_glossiness = glossiness;
1138 markDirty(GlossyDirty);
1139}
1140
1142{
1143 if (m_glossinessMap == glossinessMap)
1144 return;
1145
1147
1148 m_glossinessMap = glossinessMap;
1150 markDirty(GlossyDirty);
1151}
1152
1154{
1155 if (invertOpacityMapValue == m_invertOpacityMapValue)
1156 return;
1157
1158 m_invertOpacityMapValue = invertOpacityMapValue;
1160 markDirty(OpacityDirty);
1161}
1162
1164{
1165 opacity = ensureNormalized(opacity);
1166 if (qFuzzyCompare(m_opacity, opacity))
1167 return;
1168
1169 m_opacity = opacity;
1171 markDirty(OpacityDirty);
1172}
1173
1175{
1176 if (m_opacityMap == opacityMap)
1177 return;
1178
1180
1181 m_opacityMap = opacityMap;
1183 markDirty(OpacityDirty);
1184}
1185
1187{
1188 if (m_normalMap == normalMap)
1189 return;
1190
1192
1193 m_normalMap = normalMap;
1195 markDirty(NormalDirty);
1196}
1197
1199{
1200 if (m_specular == specular)
1201 return;
1202
1203 m_specular = specular;
1205 markDirty(SpecularDirty);
1206}
1207
1209{
1210 if (m_specularMap == specularMap)
1211 return;
1212
1214
1215 m_specularMap = specularMap;
1217 markDirty(SpecularDirty);
1218}
1219
1221{
1222 factor = ensureNormalized(factor);
1223 if (qFuzzyCompare(m_normalStrength, factor))
1224 return;
1225
1226 m_normalStrength = factor;
1228 markDirty(NormalDirty);
1229}
1230
1232{
1233 if (m_occlusionMap == occlusionMap)
1234 return;
1235
1237
1238 m_occlusionMap = occlusionMap;
1240 markDirty(OcclusionDirty);
1241}
1242
1244{
1245 if (qFuzzyCompare(m_occlusionAmount, occlusionAmount))
1246 return;
1247
1248 m_occlusionAmount = occlusionAmount;
1250 markDirty(OcclusionDirty);
1251}
1252
1254{
1255 if (m_alphaMode == alphaMode)
1256 return;
1257
1258 m_alphaMode = alphaMode;
1260 markDirty(AlphaModeDirty);
1261}
1262
1264{
1265 if (qFuzzyCompare(m_alphaCutoff, alphaCutoff))
1266 return;
1267
1268 m_alphaCutoff = alphaCutoff;
1270 markDirty(AlphaModeDirty);
1271}
1272
1274{
1275 if (m_glossinessChannel == channel)
1276 return;
1277
1278 m_glossinessChannel = channel;
1280 markDirty(GlossyDirty);
1281}
1282
1284{
1285 if (m_opacityChannel == channel)
1286 return;
1287
1288 m_opacityChannel = channel;
1290 markDirty(OpacityDirty);
1291}
1292
1294{
1295 if (m_occlusionChannel == channel)
1296 return;
1297
1298 m_occlusionChannel = channel;
1300 markDirty(OcclusionDirty);
1301}
1302
1304{
1305 if (qFuzzyCompare(m_pointSize, size))
1306 return;
1307 m_pointSize = size;
1309 markDirty(PointSizeDirty);
1310}
1311
1313{
1314 if (qFuzzyCompare(m_lineWidth, width))
1315 return;
1316 m_lineWidth = width;
1318 markDirty(LineWidthDirty);
1319}
1320
1322{
1323 if (m_heightMap == heightMap)
1324 return;
1325
1327
1328 m_heightMap = heightMap;
1330 markDirty(HeightDirty);
1331}
1332
1334{
1335 if (m_heightChannel == channel)
1336 return;
1337
1338 m_heightChannel = channel;
1340 markDirty(HeightDirty);
1341}
1342
1344{
1345 if (qFuzzyCompare(m_heightAmount, heightAmount))
1346 return;
1347
1348 m_heightAmount = heightAmount;
1350 markDirty(HeightDirty);
1351}
1352
1354{
1355 if (m_minHeightMapSamples == samples)
1356 return;
1357
1358 m_minHeightMapSamples = samples;
1360 markDirty(HeightDirty);
1361}
1362
1364{
1365 if (m_maxHeightMapSamples == samples)
1366 return;
1367
1368 m_maxHeightMapSamples = samples;
1370 markDirty(HeightDirty);
1371}
1372
1374{
1375 static const auto channelMapping = [](TextureChannelMapping mapping) {
1377 };
1378
1379 if (!node) {
1380 markAllDirty();
1381 node = new QSSGRenderDefaultMaterial(QSSGRenderGraphObject::Type::SpecularGlossyMaterial);
1382 }
1383
1384 // Set common material properties
1386
1387 QSSGRenderDefaultMaterial *material = static_cast<QSSGRenderDefaultMaterial *>(node);
1388
1390
1391 if (m_dirtyAttributes & LightingModeDirty)
1393
1394 if (m_dirtyAttributes & BlendModeDirty)
1396
1397 if (m_dirtyAttributes & AlbedoDirty) {
1398 if (!m_albedoMap)
1399 material->colorMap = nullptr;
1400 else
1401 material->colorMap = m_albedoMap->getRenderImage();
1402
1403 material->color = QSSGUtils::color::sRGBToLinear(m_albedo);
1404 material->baseColorSingleChannelEnabled = m_albedoSingleChannelEnabled;
1405 material->baseColorChannel = channelMapping(m_albedoChannel);
1406 }
1407
1408 if (m_dirtyAttributes & EmissiveDirty) {
1409 if (!m_emissiveMap)
1410 material->emissiveMap = nullptr;
1411 else
1412 material->emissiveMap = m_emissiveMap->getRenderImage();
1413
1414 material->emissiveColor = m_emissiveFactor;
1415 material->emissiveSingleChannelEnabled = m_emissiveSingleChannelEnabled;
1416 material->emissiveChannel = channelMapping(m_emissiveChannel);
1417 }
1418
1419 if (m_dirtyAttributes & GlossyDirty) {
1420 if (!m_glossinessMap)
1421 material->roughnessMap = nullptr;
1422 else
1423 material->roughnessMap = m_glossinessMap->getRenderImage();
1424
1425 material->specularRoughness = m_glossiness;
1426 material->roughnessChannel = channelMapping(m_glossinessChannel);
1427 }
1428
1429 if (m_dirtyAttributes & SpecularDirty) {
1430 if (!m_specularMap)
1431 material->specularMap = nullptr;
1432 else
1433 material->specularMap = m_specularMap->getRenderImage();
1434
1435 material->specularTint = QSSGUtils::color::sRGBToLinear(m_specular).toVector3D();
1436 material->fresnelScaleBiasEnabled = m_fresnelScaleBiasEnabled;
1437 material->fresnelScale = m_fresnelScale;
1438 material->fresnelBias = m_fresnelBias;
1439 material->fresnelPower = m_fresnelPower;
1440 material->specularAmountSingleChannelEnabled = m_specularSingleChannelEnabled;
1441 material->specularAmountChannel = channelMapping(m_specularChannel);
1442 }
1443
1444 if (m_dirtyAttributes & OpacityDirty) {
1445 if (!m_opacityMap)
1446 material->opacityMap = nullptr;
1447 else
1448 material->opacityMap = m_opacityMap->getRenderImage();
1449
1450 material->invertOpacityMapValue = m_invertOpacityMapValue;
1451 material->opacity = m_opacity;
1452 material->opacityChannel = channelMapping(m_opacityChannel);
1453 }
1454
1455 if (m_dirtyAttributes & NormalDirty) {
1456 if (!m_normalMap)
1457 material->normalMap = nullptr;
1458 else
1459 material->normalMap = m_normalMap->getRenderImage();
1460
1461 material->bumpAmount = m_normalStrength;
1462 }
1463
1464 if (m_dirtyAttributes & OcclusionDirty) {
1465 if (!m_occlusionMap)
1466 material->occlusionMap = nullptr;
1467 else
1468 material->occlusionMap = m_occlusionMap->getRenderImage();
1469 material->occlusionAmount = m_occlusionAmount;
1470 material->occlusionChannel = channelMapping(m_occlusionChannel);
1471 }
1472
1473 if (m_dirtyAttributes & AlphaModeDirty) {
1475 material->alphaCutoff = m_alphaCutoff;
1476 }
1477
1478 if (m_dirtyAttributes & PointSizeDirty)
1479 material->pointSize = m_pointSize;
1480
1481 if (m_dirtyAttributes & LineWidthDirty)
1482 material->lineWidth = m_lineWidth;
1483
1484 if (m_dirtyAttributes & HeightDirty) {
1485 if (!m_heightMap)
1486 material->heightMap = nullptr;
1487 else
1488 material->heightMap = m_heightMap->getRenderImage();
1489 material->heightAmount = m_heightAmount;
1490 material->minHeightSamples = m_minHeightMapSamples;
1491 material->maxHeightSamples = m_maxHeightMapSamples;
1492 material->heightChannel = channelMapping(m_heightChannel);
1493 }
1494
1495 if (m_dirtyAttributes & ClearcoatDirty) {
1496 material->clearcoatAmount = m_clearcoatAmount;
1497 if (!m_clearcoatMap)
1498 material->clearcoatMap = nullptr;
1499 else
1500 material->clearcoatMap = m_clearcoatMap->getRenderImage();
1501 material->clearcoatChannel = channelMapping(m_clearcoatChannel);
1502 material->clearcoatRoughnessAmount = m_clearcoatRoughnessAmount;
1503 if (!m_clearcoatRoughnessMap)
1504 material->clearcoatRoughnessMap = nullptr;
1505 else
1506 material->clearcoatRoughnessMap = m_clearcoatRoughnessMap->getRenderImage();
1507 material->clearcoatRoughnessChannel = channelMapping(m_clearcoatRoughnessChannel);
1508 if (!m_clearcoatNormalMap)
1509 material->clearcoatNormalMap = nullptr;
1510 else
1511 material->clearcoatNormalMap = m_clearcoatNormalMap->getRenderImage();
1512 material->clearcoatNormalStrength = m_clearcoatNormalStrength;
1513 material->clearcoatFresnelScaleBiasEnabled = m_clearcoatFresnelScaleBiasEnabled;
1514 material->clearcoatFresnelScale = m_clearcoatFresnelScale;
1515 material->clearcoatFresnelBias = m_clearcoatFresnelBias;
1516 material->clearcoatFresnelPower = m_clearcoatFresnelPower;
1517 }
1518
1519 if (m_dirtyAttributes & TransmissionDirty) {
1520 material->transmissionFactor = m_transmissionFactor;
1521 if (!m_transmissionMap)
1522 material->transmissionMap = nullptr;
1523 else
1524 material->transmissionMap = m_transmissionMap->getRenderImage();
1525 material->transmissionChannel = channelMapping(m_transmissionChannel);
1526 }
1527
1528 if (m_dirtyAttributes & VolumeDirty) {
1529 material->thicknessFactor = m_thicknessFactor;
1530 if (!m_thicknessMap)
1531 material->thicknessMap = nullptr;
1532 else
1533 material->thicknessMap = m_thicknessMap->getRenderImage();
1534 material->thicknessChannel = channelMapping(m_thicknessChannel);
1535
1536 material->attenuationDistance = m_attenuationDistance;
1537 material->attenuationColor = QSSGUtils::color::sRGBToLinear(m_attenuationColor).toVector3D();
1538 }
1539
1540 if (m_dirtyAttributes & VertexColorsDirty) {
1541 material->vertexColorsEnabled = m_vertexColorsEnabled;
1542 material->vertexColorsMaskEnabled = m_vertexColorsMaskEnabled;
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);
1547 }
1548
1549 m_dirtyAttributes = 0;
1550
1551 return node;
1552}
1553
1554void QQuick3DSpecularGlossyMaterial::itemChange(QQuick3DObject::ItemChange change, const QQuick3DObject::ItemChangeData &value)
1555{
1556 if (change == QQuick3DObject::ItemSceneChange)
1557 updateSceneManager(value.sceneManager);
1558}
1559
1560void QQuick3DSpecularGlossyMaterial::updateSceneManager(QQuick3DSceneManager *sceneManager)
1561{
1562 // Check all the resource value's scene manager, and update as necessary.
1563 if (sceneManager) {
1564 QQuick3DObjectPrivate::refSceneManager(m_albedoMap, *sceneManager);
1565 QQuick3DObjectPrivate::refSceneManager(m_emissiveMap, *sceneManager);
1566 QQuick3DObjectPrivate::refSceneManager(m_glossinessMap, *sceneManager);
1567 QQuick3DObjectPrivate::refSceneManager(m_opacityMap, *sceneManager);
1568 QQuick3DObjectPrivate::refSceneManager(m_normalMap, *sceneManager);
1569 QQuick3DObjectPrivate::refSceneManager(m_specularMap, *sceneManager);
1570 QQuick3DObjectPrivate::refSceneManager(m_occlusionMap, *sceneManager);
1571 QQuick3DObjectPrivate::refSceneManager(m_heightMap, *sceneManager);
1572 QQuick3DObjectPrivate::refSceneManager(m_clearcoatMap, *sceneManager);
1573 QQuick3DObjectPrivate::refSceneManager(m_clearcoatRoughnessMap, *sceneManager);
1574 QQuick3DObjectPrivate::refSceneManager(m_clearcoatNormalMap, *sceneManager);
1575 QQuick3DObjectPrivate::refSceneManager(m_transmissionMap, *sceneManager);
1576 QQuick3DObjectPrivate::refSceneManager(m_thicknessMap, *sceneManager);
1577 } else {
1587 QQuick3DObjectPrivate::derefSceneManager(m_clearcoatRoughnessMap);
1588 QQuick3DObjectPrivate::derefSceneManager(m_clearcoatNormalMap);
1591 }
1592}
1593
1594void QQuick3DSpecularGlossyMaterial::markDirty(QQuick3DSpecularGlossyMaterial::DirtyType type)
1595{
1596 if (!(m_dirtyAttributes & quint32(type))) {
1597 m_dirtyAttributes |= quint32(type);
1598 update();
1599 }
1600}
1601
1603{
1604 return m_clearcoatAmount;
1605}
1606
1608{
1609 if (qFuzzyCompare(m_clearcoatAmount, newClearcoatAmount))
1610 return;
1611 m_clearcoatAmount = newClearcoatAmount;
1613 markDirty(ClearcoatDirty);
1614}
1615
1617{
1618 return m_clearcoatMap;
1619}
1620
1622{
1623 if (m_clearcoatMap == newClearcoatMap)
1624 return;
1625
1627
1628 m_clearcoatMap = newClearcoatMap;
1630 markDirty(ClearcoatDirty);
1631}
1632
1637
1639{
1640 if (m_clearcoatChannel == newClearcoatChannel)
1641 return;
1642 m_clearcoatChannel = newClearcoatChannel;
1644 markDirty(ClearcoatDirty);
1645}
1646
1648{
1649 return m_clearcoatRoughnessAmount;
1650}
1651
1653{
1654 if (qFuzzyCompare(m_clearcoatRoughnessAmount, newClearcoatRoughnessAmount))
1655 return;
1656 m_clearcoatRoughnessAmount = newClearcoatRoughnessAmount;
1658 markDirty(ClearcoatDirty);
1659}
1660
1665
1667{
1668 if (m_clearcoatRoughnessChannel == newClearcoatRoughnessChannel)
1669 return;
1670 m_clearcoatRoughnessChannel = newClearcoatRoughnessChannel;
1672 markDirty(ClearcoatDirty);
1673}
1674
1676{
1677 return m_clearcoatRoughnessMap;
1678}
1679
1681{
1682 if (m_clearcoatRoughnessMap == newClearcoatRoughnessMap)
1683 return;
1684
1685 QQuick3DObjectPrivate::attachWatcher(this, &QQuick3DSpecularGlossyMaterial::setClearcoatRoughnessMap, newClearcoatRoughnessMap, m_clearcoatRoughnessMap);
1686
1687 m_clearcoatRoughnessMap = newClearcoatRoughnessMap;
1689 markDirty(ClearcoatDirty);
1690}
1691
1693{
1694 return m_clearcoatNormalMap;
1695}
1696
1698{
1699 if (m_clearcoatNormalMap == newClearcoatNormalMap)
1700 return;
1701
1702 QQuick3DObjectPrivate::attachWatcher(this, &QQuick3DSpecularGlossyMaterial::setClearcoatNormalMap, newClearcoatNormalMap, m_clearcoatNormalMap);
1703
1704 m_clearcoatNormalMap = newClearcoatNormalMap;
1706 markDirty(ClearcoatDirty);
1707}
1708
1710{
1711 return m_clearcoatNormalStrength;
1712}
1713
1714
1715void QQuick3DSpecularGlossyMaterial::setClearcoatNormalStrength(float newClearcoatNormalStrength)
1716{
1717 if (qFuzzyCompare(m_clearcoatNormalStrength, newClearcoatNormalStrength))
1718 return;
1719 m_clearcoatNormalStrength = newClearcoatNormalStrength;
1721 markDirty(ClearcoatDirty);
1722}
1723
1725{
1726 return m_transmissionFactor;
1727}
1728
1730{
1731 if (qFuzzyCompare(m_transmissionFactor, newTransmissionFactor))
1732 return;
1733 m_transmissionFactor = newTransmissionFactor;
1735 markDirty(TransmissionDirty);
1736}
1737
1739{
1740 return m_transmissionMap;
1741}
1742
1744{
1745 if (m_transmissionMap == newTransmissionMap)
1746 return;
1747
1749
1750 m_transmissionMap = newTransmissionMap;
1752 markDirty(TransmissionDirty);
1753}
1754
1759
1761{
1762 if (m_transmissionChannel == newTransmissionChannel)
1763 return;
1764 m_transmissionChannel = newTransmissionChannel;
1766 markDirty(TransmissionDirty);
1767}
1768
1770{
1771 return m_thicknessFactor;
1772}
1773
1775{
1776 if (qFuzzyCompare(m_thicknessFactor, newThicknessFactor))
1777 return;
1778 m_thicknessFactor = newThicknessFactor;
1780 markDirty(VolumeDirty);
1781}
1782
1784{
1785 return m_thicknessMap;
1786}
1787
1789{
1790 if (m_thicknessMap == newThicknessMap)
1791 return;
1792
1794
1795 m_thicknessMap = newThicknessMap;
1797 markDirty(VolumeDirty);
1798}
1799
1804
1806{
1807 if (m_thicknessChannel == newThicknessChannel)
1808 return;
1809 m_thicknessChannel = newThicknessChannel;
1811 markDirty(VolumeDirty);
1812}
1813
1815{
1816 return m_attenuationDistance;
1817}
1818
1820{
1821 if (qFuzzyCompare(m_attenuationDistance, newAttenuationDistance))
1822 return;
1823 m_attenuationDistance = newAttenuationDistance;
1825 markDirty(VolumeDirty);
1826}
1827
1829{
1830 return m_attenuationColor;
1831}
1832
1834{
1835 return m_fresnelScaleBiasEnabled;
1836}
1837
1839{
1840 return m_fresnelScale;
1841}
1842
1844{
1845 return m_fresnelBias;
1846}
1847
1849{
1850 return m_fresnelPower;
1851}
1852
1854{
1855 return m_clearcoatFresnelScaleBiasEnabled;
1856}
1857
1859{
1860 return m_clearcoatFresnelScale;
1861}
1862
1864{
1865 return m_clearcoatFresnelBias;
1866}
1867
1869{
1870 return m_clearcoatFresnelPower;
1871}
1872
1874{
1875 return m_vertexColorsEnabled;
1876}
1877
1879{
1880 if (m_attenuationColor == newAttenuationColor)
1881 return;
1882 m_attenuationColor = newAttenuationColor;
1884 markDirty(VolumeDirty);
1885}
1886
1887void QQuick3DSpecularGlossyMaterial::setFresnelScaleBiasEnabled(bool fresnelScaleBiasEnabled)
1888{
1889 if (m_fresnelScaleBiasEnabled == fresnelScaleBiasEnabled)
1890 return;
1891
1892 m_fresnelScaleBiasEnabled = fresnelScaleBiasEnabled;
1893 emit fresnelScaleBiasEnabledChanged(m_fresnelScaleBiasEnabled);
1894 markDirty(SpecularDirty);
1895}
1896
1897void QQuick3DSpecularGlossyMaterial::setFresnelScale(float fresnelScale)
1898{
1899 if (qFuzzyCompare(m_fresnelScale, fresnelScale))
1900 return;
1901
1902 m_fresnelScale = fresnelScale;
1903 emit fresnelScaleChanged(m_fresnelScale);
1904 markDirty(SpecularDirty);
1905}
1906
1907void QQuick3DSpecularGlossyMaterial::setFresnelBias(float fresnelBias)
1908{
1909 if (qFuzzyCompare(m_fresnelBias, fresnelBias))
1910 return;
1911
1912 m_fresnelBias = fresnelBias;
1913 emit fresnelBiasChanged(m_fresnelBias);
1914 markDirty(SpecularDirty);
1915}
1916
1917void QQuick3DSpecularGlossyMaterial::setFresnelPower(float fresnelPower)
1918{
1919 if (qFuzzyCompare(m_fresnelPower, fresnelPower))
1920 return;
1921
1922 m_fresnelPower = fresnelPower;
1923 emit fresnelPowerChanged(m_fresnelPower);
1924 markDirty(SpecularDirty);
1925}
1926
1927void QQuick3DSpecularGlossyMaterial::setClearcoatFresnelScaleBiasEnabled(bool clearcoatFresnelScaleBiasEnabled)
1928{
1929 if (m_clearcoatFresnelScaleBiasEnabled == clearcoatFresnelScaleBiasEnabled)
1930 return;
1931
1932 m_clearcoatFresnelScaleBiasEnabled = clearcoatFresnelScaleBiasEnabled;
1933 emit clearcoatFresnelScaleBiasEnabledChanged(m_clearcoatFresnelScaleBiasEnabled);
1934 markDirty(ClearcoatDirty);
1935}
1936
1937void QQuick3DSpecularGlossyMaterial::setClearcoatFresnelScale(float clearcoatFresnelScale)
1938{
1939 if (qFuzzyCompare(m_clearcoatFresnelScale, clearcoatFresnelScale))
1940 return;
1941
1942 m_clearcoatFresnelScale = clearcoatFresnelScale;
1943 emit clearcoatFresnelScaleChanged(m_clearcoatFresnelScale);
1944 markDirty(ClearcoatDirty);
1945}
1946
1947void QQuick3DSpecularGlossyMaterial::setClearcoatFresnelBias(float clearcoatFresnelBias)
1948{
1949 if (qFuzzyCompare(m_clearcoatFresnelBias, clearcoatFresnelBias))
1950 return;
1951
1952 m_clearcoatFresnelBias = clearcoatFresnelBias;
1953 emit clearcoatFresnelBiasChanged(m_clearcoatFresnelBias);
1954 markDirty(ClearcoatDirty);
1955}
1956
1957void QQuick3DSpecularGlossyMaterial::setClearcoatFresnelPower(float clearcoatFresnelPower)
1958{
1959 if (qFuzzyCompare(m_clearcoatFresnelPower, clearcoatFresnelPower))
1960 return;
1961
1962 m_clearcoatFresnelPower = clearcoatFresnelPower;
1963 emit clearcoatFresnelPowerChanged(m_clearcoatFresnelPower);
1964 markDirty(ClearcoatDirty);
1965}
1966
1967void QQuick3DSpecularGlossyMaterial::setVertexColorsEnabled(bool vertexColors)
1968{
1969 if (m_vertexColorsEnabled == vertexColors)
1970 return;
1971
1972 m_vertexColorsEnabled = vertexColors;
1973 emit vertexColorsEnabledChanged(m_vertexColorsEnabled);
1974 markDirty(VertexColorsDirty);
1975}
1976
1978{
1979 return m_vertexColorsMaskEnabled;
1980}
1981
1982void QQuick3DSpecularGlossyMaterial::setVertexColorsMaskEnabled(bool vertexColorsMaskEnabled)
1983{
1984 if (m_vertexColorsMaskEnabled == vertexColorsMaskEnabled)
1985 return;
1986 m_vertexColorsMaskEnabled = vertexColorsMaskEnabled;
1987 emit vertexColorsMaskEnabledChanged();
1988 markDirty(VertexColorsDirty);
1989}
1990
1991QQuick3DSpecularGlossyMaterial::VertexColorMaskFlags QQuick3DSpecularGlossyMaterial::vertexColorRedMask() const
1992{
1993 return m_vertexColorRedMask;
1994}
1995
1996void QQuick3DSpecularGlossyMaterial::setVertexColorRedMask(QQuick3DSpecularGlossyMaterial::VertexColorMaskFlags vertexColorRedMask)
1997{
1998 if (m_vertexColorRedMask == vertexColorRedMask)
1999 return;
2000 m_vertexColorRedMask = vertexColorRedMask;
2001 emit vertexColorRedMaskChanged();
2002 markDirty(VertexColorsDirty);
2003}
2004
2005QQuick3DSpecularGlossyMaterial::VertexColorMaskFlags QQuick3DSpecularGlossyMaterial::vertexColorGreenMask() const
2006{
2007 return m_vertexColorGreenMask;
2008}
2009
2010void QQuick3DSpecularGlossyMaterial::setVertexColorGreenMask(QQuick3DSpecularGlossyMaterial::VertexColorMaskFlags vertexColorGreenMask)
2011{
2012 if (m_vertexColorGreenMask == vertexColorGreenMask)
2013 return;
2014 m_vertexColorGreenMask = vertexColorGreenMask;
2015 emit vertexColorGreenMaskChanged();
2016 markDirty(VertexColorsDirty);
2017}
2018
2019QQuick3DSpecularGlossyMaterial::VertexColorMaskFlags QQuick3DSpecularGlossyMaterial::vertexColorBlueMask() const
2020{
2021 return m_vertexColorBlueMask;
2022}
2023
2024void QQuick3DSpecularGlossyMaterial::setVertexColorBlueMask(QQuick3DSpecularGlossyMaterial::VertexColorMaskFlags vertexColorBlueMask)
2025{
2026 if (m_vertexColorBlueMask == vertexColorBlueMask)
2027 return;
2028 m_vertexColorBlueMask = vertexColorBlueMask;
2029 emit vertexColorBlueMaskChanged();
2030 markDirty(VertexColorsDirty);
2031}
2032
2033QQuick3DSpecularGlossyMaterial::VertexColorMaskFlags QQuick3DSpecularGlossyMaterial::vertexColorAlphaMask() const
2034{
2035 return m_vertexColorAlphaMask;
2036}
2037
2038void QQuick3DSpecularGlossyMaterial::setVertexColorAlphaMask(QQuick3DSpecularGlossyMaterial::VertexColorMaskFlags vertexColorAlphaMask)
2039{
2040 if (m_vertexColorAlphaMask == vertexColorAlphaMask)
2041 return;
2042 m_vertexColorAlphaMask = vertexColorAlphaMask;
2043 emit vertexColorAlphaMaskChanged();
2044 markDirty(VertexColorsDirty);
2045}
2046
IOBluetoothL2CAPChannel * channel
The QColor class provides colors based on RGB, HSV or CMYK values.
Definition qcolor.h:31
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()
QQuick3DMaterial::TextureChannelMapping glossinessChannel
void setEmissiveFactor(const QVector3D &emissiveFactor)
void setTransmissionChannel(QQuick3DMaterial::TextureChannelMapping newTransmissionChannel)
void setAlphaMode(QQuick3DSpecularGlossyMaterial::AlphaMode alphaMode)
void setClearcoatMap(QQuick3DTexture *newClearcoatMap)
void setOcclusionMap(QQuick3DTexture *occlusionMap)
QQuick3DMaterial::TextureChannelMapping albedoChannel
void setClearcoatAmount(float newClearcoatAmount)
QQuick3DMaterial::TextureChannelMapping occlusionChannel
QQuick3DSpecularGlossyMaterial(QQuick3DObject *parent=nullptr)
\qmltype SpecularGlossyMaterial \inherits Material \inqmlmodule QtQuick3D
void setSpecularSingleChannelEnabled(bool specularSingleChannelEnabled)
QQuick3DMaterial::TextureChannelMapping specularChannel
QQuick3DMaterial::TextureChannelMapping opacityChannel
void setNormalMap(QQuick3DTexture *normalMap)
QQuick3DMaterial::TextureChannelMapping transmissionChannel
void itemChange(ItemChange, const ItemChangeData &) override
void setHeightMap(QQuick3DTexture *heightMap)
void setThicknessChannel(QQuick3DMaterial::TextureChannelMapping newThicknessChannel)
void setOpacityChannel(QQuick3DMaterial::TextureChannelMapping channel)
void setGlossinessMap(QQuick3DTexture *glossinessMap)
void setSpecularChannel(QQuick3DMaterial::TextureChannelMapping channel)
void setTransmissionMap(QQuick3DTexture *newTransmissionMap)
void setEmissiveMap(QQuick3DTexture *emissiveMap)
QQuick3DMaterial::TextureChannelMapping emissiveChannel
void setThicknessMap(QQuick3DTexture *newThicknessMap)
void setThicknessFactor(float newThicknessFactor)
void setOpacityMap(QQuick3DTexture *opacityMap)
void setEmissiveChannel(QQuick3DMaterial::TextureChannelMapping channel)
void setOcclusionChannel(QQuick3DMaterial::TextureChannelMapping channel)
QQuick3DMaterial::TextureChannelMapping thicknessChannel
void setBlendMode(QQuick3DSpecularGlossyMaterial::BlendMode blendMode)
void setAttenuationColor(const QColor &newAttenuationColor)
void setClearcoatRoughnessMap(QQuick3DTexture *newClearcoatRoughnessMap)
QQuick3DMaterial::TextureChannelMapping clearcoatRoughnessChannel
void setAlbedoSingleChannelEnabled(bool albedoSingleChannelEnabled)
void setHeightChannel(QQuick3DMaterial::TextureChannelMapping channel)
void setClearcoatChannel(QQuick3DMaterial::TextureChannelMapping newClearcoatChannel)
void setGlossinessChannel(QQuick3DMaterial::TextureChannelMapping channel)
void setAlbedoMap(QQuick3DTexture *albedoMap)
void setTransmissionFactor(float newTransmissionFactor)
void setSpecularMap(QQuick3DTexture *specularMap)
void setEmissiveSingleChannelEnabled(bool emissiveSingleChannelEnabled)
void setAttenuationDistance(float newAttenuationDistance)
QSSGRenderGraphObject * updateSpatialNode(QSSGRenderGraphObject *node) override
void setAlbedoChannel(QQuick3DMaterial::TextureChannelMapping channel)
void setClearcoatRoughnessAmount(float newClearcoatRoughnessAmount)
void setClearcoatRoughnessChannel(QQuick3DMaterial::TextureChannelMapping newClearcoatRoughnessChannel)
void setLighting(QQuick3DSpecularGlossyMaterial::Lighting lighting)
QQuick3DMaterial::TextureChannelMapping clearcoatChannel
QQuick3DMaterial::TextureChannelMapping heightChannel
void setInvertOpacityMapValue(bool invertOpacityMapValue)
void setClearcoatNormalMap(QQuick3DTexture *newClearcoatNormalMap)
QSSGRenderImage * getRenderImage()
The QVector3D class represents a vector or vertex in 3D space.
Definition qvectornd.h:171
constexpr QVector3D toVector3D() const noexcept
Returns the 3D vector form of this 4D vector, dropping the w coordinate.
Definition qvectornd.h:1011
Combined button and popup list for selecting options.
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
bool qFuzzyCompare(qfloat16 p1, qfloat16 p2) noexcept
Definition qfloat16.h:333
GLsizei samples
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLint GLsizei width
GLenum type
GLenum GLenum GLenum GLenum mapping
#define emit
unsigned int quint32
Definition qtypes.h:50
QSSGRenderDefaultMaterial::MaterialSpecularModel specularModel
QSSGRenderDefaultMaterial::MaterialBlendMode blendMode
TextureChannelMapping specularAmountChannel
QSSGRenderDefaultMaterial::MaterialAlphaMode alphaMode
TextureChannelMapping clearcoatRoughnessChannel
Definition moc.h:23