Qt 6.x
The Qt SDK
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
587inline static float ensureNormalized(float val) { return qBound(0.0f, val, 1.0f); }
588
590 : QQuick3DMaterial(*(new QQuick3DObjectPrivate(QQuick3DObjectPrivate::Type::SpecularGlossyMaterial)), parent)
591{}
592
594{
595}
596
598{
599 return m_lighting;
600}
601
603{
604 return m_blendMode;
605}
606
608{
609 return m_albedo;
610}
611
613{
614 return m_albedoMap;
615}
616
618{
619 return m_emissiveMap;
620}
621
623{
624 return m_emissiveFactor;
625}
626
628{
629 return m_glossiness;
630}
631
633{
634 return m_glossinessMap;
635}
636
638{
639 return m_opacity;
640}
641
643{
644 return m_opacityMap;
645}
646
648{
649 return m_normalMap;
650}
651
653{
654 return m_specular;
655}
656
658{
659 return m_specularMap;
660}
661
663{
664 return m_normalStrength;
665}
666
668{
669 return m_occlusionMap;
670}
671
673{
674 return m_occlusionAmount;
675}
676
678{
679 return m_alphaMode;
680}
681
683{
684 return m_alphaCutoff;
685}
686
688{
689 return m_glossinessChannel;
690}
691
693{
694 return m_opacityChannel;
695}
696
698{
699 return m_occlusionChannel;
700}
701
703{
704 return m_pointSize;
705}
706
708{
709 return m_lineWidth;
710}
711
713{
714 return m_heightMap;
715}
716
718{
719 return m_heightChannel;
720}
721
723{
724 return m_heightAmount;
725}
726
728{
729 return m_minHeightMapSamples;
730}
731
733{
734 return m_maxHeightMapSamples;
735}
736
738{
739 m_dirtyAttributes = 0xffffffff;
741}
742
744{
745 if (m_lighting == lighting)
746 return;
747
748 m_lighting = lighting;
750 markDirty(LightingModeDirty);
751}
752
754{
755 if (m_blendMode == blendMode)
756 return;
757
758 m_blendMode = blendMode;
760 markDirty(BlendModeDirty);
761}
762
764{
765 if (m_albedo == diffuseColor)
766 return;
767
768 m_albedo = diffuseColor;
770 markDirty(AlbedoDirty);
771}
772
774{
775 if (m_albedoMap == albedoMap)
776 return;
777
779
780 m_albedoMap = albedoMap;
782 markDirty(AlbedoDirty);
783}
784
786{
787 if (m_emissiveMap == emissiveMap)
788 return;
789
791
792 m_emissiveMap = emissiveMap;
794 markDirty(EmissiveDirty);
795}
796
798{
799 if (m_emissiveFactor == emissiveFactor)
800 return;
801
802 m_emissiveFactor = emissiveFactor;
804 markDirty(EmissiveDirty);
805}
806
808{
810 if (qFuzzyCompare(m_glossiness, glossiness))
811 return;
812
813 m_glossiness = glossiness;
815 markDirty(GlossyDirty);
816}
817
819{
820 if (m_glossinessMap == glossinessMap)
821 return;
822
824
825 m_glossinessMap = glossinessMap;
827 markDirty(GlossyDirty);
828}
829
831{
833 if (qFuzzyCompare(m_opacity, opacity))
834 return;
835
836 m_opacity = opacity;
838 markDirty(OpacityDirty);
839}
840
842{
843 if (m_opacityMap == opacityMap)
844 return;
845
847
848 m_opacityMap = opacityMap;
850 markDirty(OpacityDirty);
851}
852
854{
855 if (m_normalMap == normalMap)
856 return;
857
859
860 m_normalMap = normalMap;
862 markDirty(NormalDirty);
863}
864
866{
867 if (m_specular == specular)
868 return;
869
870 m_specular = specular;
872 markDirty(SpecularDirty);
873}
874
876{
877 if (m_specularMap == specularMap)
878 return;
879
881
882 m_specularMap = specularMap;
884 markDirty(SpecularDirty);
885}
886
888{
889 factor = ensureNormalized(factor);
890 if (qFuzzyCompare(m_normalStrength, factor))
891 return;
892
893 m_normalStrength = factor;
895 markDirty(NormalDirty);
896}
897
899{
900 if (m_occlusionMap == occlusionMap)
901 return;
902
904
905 m_occlusionMap = occlusionMap;
907 markDirty(OcclusionDirty);
908}
909
911{
912 if (qFuzzyCompare(m_occlusionAmount, occlusionAmount))
913 return;
914
915 m_occlusionAmount = occlusionAmount;
917 markDirty(OcclusionDirty);
918}
919
921{
922 if (m_alphaMode == alphaMode)
923 return;
924
925 m_alphaMode = alphaMode;
927 markDirty(AlphaModeDirty);
928}
929
931{
932 if (qFuzzyCompare(m_alphaCutoff, alphaCutoff))
933 return;
934
935 m_alphaCutoff = alphaCutoff;
937 markDirty(AlphaModeDirty);
938}
939
941{
942 if (m_glossinessChannel == channel)
943 return;
944
945 m_glossinessChannel = channel;
947 markDirty(GlossyDirty);
948}
949
951{
952 if (m_opacityChannel == channel)
953 return;
954
955 m_opacityChannel = channel;
957 markDirty(OpacityDirty);
958}
959
961{
962 if (m_occlusionChannel == channel)
963 return;
964
965 m_occlusionChannel = channel;
967 markDirty(OcclusionDirty);
968}
969
971{
972 if (qFuzzyCompare(m_pointSize, size))
973 return;
974 m_pointSize = size;
976 markDirty(PointSizeDirty);
977}
978
980{
981 if (qFuzzyCompare(m_lineWidth, width))
982 return;
983 m_lineWidth = width;
985 markDirty(LineWidthDirty);
986}
987
989{
990 if (m_heightMap == heightMap)
991 return;
992
994
995 m_heightMap = heightMap;
997 markDirty(HeightDirty);
998}
999
1001{
1002 if (m_heightChannel == channel)
1003 return;
1004
1005 m_heightChannel = channel;
1007 markDirty(HeightDirty);
1008}
1009
1011{
1012 if (qFuzzyCompare(m_heightAmount, heightAmount))
1013 return;
1014
1015 m_heightAmount = heightAmount;
1017 markDirty(HeightDirty);
1018}
1019
1021{
1022 if (m_minHeightMapSamples == samples)
1023 return;
1024
1025 m_minHeightMapSamples = samples;
1027 markDirty(HeightDirty);
1028}
1029
1031{
1032 if (m_maxHeightMapSamples == samples)
1033 return;
1034
1035 m_maxHeightMapSamples = samples;
1037 markDirty(HeightDirty);
1038}
1039
1041{
1042 static const auto channelMapping = [](TextureChannelMapping mapping) {
1044 };
1045
1046 if (!node) {
1047 markAllDirty();
1048 node = new QSSGRenderDefaultMaterial(QSSGRenderGraphObject::Type::SpecularGlossyMaterial);
1049 }
1050
1051 // Set common material properties
1053
1054 QSSGRenderDefaultMaterial *material = static_cast<QSSGRenderDefaultMaterial *>(node);
1055
1057
1058 if (m_dirtyAttributes & LightingModeDirty)
1060
1061 if (m_dirtyAttributes & BlendModeDirty)
1063
1064 if (m_dirtyAttributes & AlbedoDirty) {
1065 if (!m_albedoMap)
1066 material->colorMap = nullptr;
1067 else
1068 material->colorMap = m_albedoMap->getRenderImage();
1069
1070 material->color = color::sRGBToLinear(m_albedo);
1071 }
1072
1073 if (m_dirtyAttributes & EmissiveDirty) {
1074 if (!m_emissiveMap)
1075 material->emissiveMap = nullptr;
1076 else
1077 material->emissiveMap = m_emissiveMap->getRenderImage();
1078
1079 material->emissiveColor = m_emissiveFactor;
1080 }
1081
1082 material->fresnelPower = 5.0f;
1083 material->vertexColorsEnabled = false;
1084
1085 if (m_dirtyAttributes & GlossyDirty) {
1086 if (!m_glossinessMap)
1087 material->roughnessMap = nullptr;
1088 else
1089 material->roughnessMap = m_glossinessMap->getRenderImage();
1090
1091 material->specularRoughness = m_glossiness;
1092 material->roughnessChannel = channelMapping(m_glossinessChannel);
1093 }
1094
1095 if (m_dirtyAttributes & SpecularDirty) {
1096 if (!m_specularMap)
1097 material->specularMap = nullptr;
1098 else
1099 material->specularMap = m_specularMap->getRenderImage();
1100
1101 material->specularTint = color::sRGBToLinear(m_specular).toVector3D();
1102 }
1103
1104 if (m_dirtyAttributes & OpacityDirty) {
1105 if (!m_opacityMap)
1106 material->opacityMap = nullptr;
1107 else
1108 material->opacityMap = m_opacityMap->getRenderImage();
1109
1110 material->opacity = m_opacity;
1111 material->opacityChannel = channelMapping(m_opacityChannel);
1112 }
1113
1114 if (m_dirtyAttributes & NormalDirty) {
1115 if (!m_normalMap)
1116 material->normalMap = nullptr;
1117 else
1118 material->normalMap = m_normalMap->getRenderImage();
1119
1120 material->bumpAmount = m_normalStrength;
1121 }
1122
1123 if (m_dirtyAttributes & OcclusionDirty) {
1124 if (!m_occlusionMap)
1125 material->occlusionMap = nullptr;
1126 else
1127 material->occlusionMap = m_occlusionMap->getRenderImage();
1128 material->occlusionAmount = m_occlusionAmount;
1129 material->occlusionChannel = channelMapping(m_occlusionChannel);
1130 }
1131
1132 if (m_dirtyAttributes & AlphaModeDirty) {
1134 material->alphaCutoff = m_alphaCutoff;
1135 }
1136
1137 if (m_dirtyAttributes & PointSizeDirty)
1138 material->pointSize = m_pointSize;
1139
1140 if (m_dirtyAttributes & LineWidthDirty)
1141 material->lineWidth = m_lineWidth;
1142
1143 if (m_dirtyAttributes & HeightDirty) {
1144 if (!m_heightMap)
1145 material->heightMap = nullptr;
1146 else
1147 material->heightMap = m_heightMap->getRenderImage();
1148 material->heightAmount = m_heightAmount;
1149 material->minHeightSamples = m_minHeightMapSamples;
1150 material->maxHeightSamples = m_maxHeightMapSamples;
1151 material->heightChannel = channelMapping(m_heightChannel);
1152 }
1153
1154 if (m_dirtyAttributes & ClearcoatDirty) {
1155 material->clearcoatAmount = m_clearcoatAmount;
1156 if (!m_clearcoatMap)
1157 material->clearcoatMap = nullptr;
1158 else
1159 material->clearcoatMap = m_clearcoatMap->getRenderImage();
1160 material->clearcoatChannel = channelMapping(m_clearcoatChannel);
1161 material->clearcoatRoughnessAmount = m_clearcoatRoughnessAmount;
1162 if (!m_clearcoatRoughnessMap)
1163 material->clearcoatRoughnessMap = nullptr;
1164 else
1165 material->clearcoatRoughnessMap = m_clearcoatRoughnessMap->getRenderImage();
1166 material->clearcoatRoughnessChannel = channelMapping(m_clearcoatRoughnessChannel);
1167 if (!m_clearcoatNormalMap)
1168 material->clearcoatNormalMap = nullptr;
1169 else
1170 material->clearcoatNormalMap = m_clearcoatNormalMap->getRenderImage();
1171 }
1172
1173 if (m_dirtyAttributes & TransmissionDirty) {
1174 material->transmissionFactor = m_transmissionFactor;
1175 if (!m_transmissionMap)
1176 material->transmissionMap = nullptr;
1177 else
1178 material->transmissionMap = m_transmissionMap->getRenderImage();
1179 material->transmissionChannel = channelMapping(m_transmissionChannel);
1180 }
1181
1182 if (m_dirtyAttributes & VolumeDirty) {
1183 material->thicknessFactor = m_thicknessFactor;
1184 if (!m_thicknessMap)
1185 material->thicknessMap = nullptr;
1186 else
1187 material->thicknessMap = m_thicknessMap->getRenderImage();
1188 material->thicknessChannel = channelMapping(m_thicknessChannel);
1189
1190 material->attenuationDistance = m_attenuationDistance;
1191 material->attenuationColor = color::sRGBToLinear(m_attenuationColor).toVector3D();
1192 }
1193
1194 if (m_dirtyAttributes & VertexColorsDirty)
1195 material->vertexColorsEnabled = m_vertexColorsEnabled;
1196
1197 m_dirtyAttributes = 0;
1198
1199 return node;
1200}
1201
1202void QQuick3DSpecularGlossyMaterial::itemChange(QQuick3DObject::ItemChange change, const QQuick3DObject::ItemChangeData &value)
1203{
1204 if (change == QQuick3DObject::ItemSceneChange)
1205 updateSceneManager(value.sceneManager);
1206}
1207
1208void QQuick3DSpecularGlossyMaterial::updateSceneManager(QQuick3DSceneManager *sceneManager)
1209{
1210 // Check all the resource value's scene manager, and update as necessary.
1211 if (sceneManager) {
1212 QQuick3DObjectPrivate::refSceneManager(m_albedoMap, *sceneManager);
1213 QQuick3DObjectPrivate::refSceneManager(m_emissiveMap, *sceneManager);
1214 QQuick3DObjectPrivate::refSceneManager(m_glossinessMap, *sceneManager);
1215 QQuick3DObjectPrivate::refSceneManager(m_opacityMap, *sceneManager);
1216 QQuick3DObjectPrivate::refSceneManager(m_normalMap, *sceneManager);
1217 QQuick3DObjectPrivate::refSceneManager(m_specularMap, *sceneManager);
1218 QQuick3DObjectPrivate::refSceneManager(m_occlusionMap, *sceneManager);
1219 QQuick3DObjectPrivate::refSceneManager(m_heightMap, *sceneManager);
1220 QQuick3DObjectPrivate::refSceneManager(m_clearcoatMap, *sceneManager);
1221 QQuick3DObjectPrivate::refSceneManager(m_clearcoatRoughnessMap, *sceneManager);
1222 QQuick3DObjectPrivate::refSceneManager(m_clearcoatNormalMap, *sceneManager);
1223 QQuick3DObjectPrivate::refSceneManager(m_transmissionMap, *sceneManager);
1224 QQuick3DObjectPrivate::refSceneManager(m_thicknessMap, *sceneManager);
1225 } else {
1235 QQuick3DObjectPrivate::derefSceneManager(m_clearcoatRoughnessMap);
1236 QQuick3DObjectPrivate::derefSceneManager(m_clearcoatNormalMap);
1239 }
1240}
1241
1242void QQuick3DSpecularGlossyMaterial::markDirty(QQuick3DSpecularGlossyMaterial::DirtyType type)
1243{
1244 if (!(m_dirtyAttributes & quint32(type))) {
1245 m_dirtyAttributes |= quint32(type);
1246 update();
1247 }
1248}
1249
1251{
1252 return m_clearcoatAmount;
1253}
1254
1256{
1257 if (qFuzzyCompare(m_clearcoatAmount, newClearcoatAmount))
1258 return;
1259 m_clearcoatAmount = newClearcoatAmount;
1261 markDirty(ClearcoatDirty);
1262}
1263
1265{
1266 return m_clearcoatMap;
1267}
1268
1270{
1271 if (m_clearcoatMap == newClearcoatMap)
1272 return;
1273
1275
1276 m_clearcoatMap = newClearcoatMap;
1278 markDirty(ClearcoatDirty);
1279}
1280
1282{
1283 return m_clearcoatChannel;
1284}
1285
1287{
1288 if (m_clearcoatChannel == newClearcoatChannel)
1289 return;
1290 m_clearcoatChannel = newClearcoatChannel;
1292 markDirty(ClearcoatDirty);
1293}
1294
1296{
1297 return m_clearcoatRoughnessAmount;
1298}
1299
1301{
1302 if (qFuzzyCompare(m_clearcoatRoughnessAmount, newClearcoatRoughnessAmount))
1303 return;
1304 m_clearcoatRoughnessAmount = newClearcoatRoughnessAmount;
1306 markDirty(ClearcoatDirty);
1307}
1308
1310{
1311 return m_clearcoatRoughnessChannel;
1312}
1313
1315{
1316 if (m_clearcoatRoughnessChannel == newClearcoatRoughnessChannel)
1317 return;
1318 m_clearcoatRoughnessChannel = newClearcoatRoughnessChannel;
1320 markDirty(ClearcoatDirty);
1321}
1322
1324{
1325 return m_clearcoatRoughnessMap;
1326}
1327
1329{
1330 if (m_clearcoatRoughnessMap == newClearcoatRoughnessMap)
1331 return;
1332
1333 QQuick3DObjectPrivate::attachWatcher(this, &QQuick3DSpecularGlossyMaterial::setClearcoatRoughnessMap, newClearcoatRoughnessMap, m_clearcoatRoughnessMap);
1334
1335 m_clearcoatRoughnessMap = newClearcoatRoughnessMap;
1337 markDirty(ClearcoatDirty);
1338}
1339
1341{
1342 return m_clearcoatNormalMap;
1343}
1344
1346{
1347 if (m_clearcoatNormalMap == newClearcoatNormalMap)
1348 return;
1349
1350 QQuick3DObjectPrivate::attachWatcher(this, &QQuick3DSpecularGlossyMaterial::setClearcoatNormalMap, newClearcoatNormalMap, m_clearcoatNormalMap);
1351
1352 m_clearcoatNormalMap = newClearcoatNormalMap;
1354 markDirty(ClearcoatDirty);
1355}
1356
1358{
1359 return m_transmissionFactor;
1360}
1361
1363{
1364 if (qFuzzyCompare(m_transmissionFactor, newTransmissionFactor))
1365 return;
1366 m_transmissionFactor = newTransmissionFactor;
1368 markDirty(TransmissionDirty);
1369}
1370
1372{
1373 return m_transmissionMap;
1374}
1375
1377{
1378 if (m_transmissionMap == newTransmissionMap)
1379 return;
1380
1382
1383 m_transmissionMap = newTransmissionMap;
1385 markDirty(TransmissionDirty);
1386}
1387
1389{
1390 return m_transmissionChannel;
1391}
1392
1394{
1395 if (m_transmissionChannel == newTransmissionChannel)
1396 return;
1397 m_transmissionChannel = newTransmissionChannel;
1399 markDirty(TransmissionDirty);
1400}
1401
1403{
1404 return m_thicknessFactor;
1405}
1406
1408{
1409 if (qFuzzyCompare(m_thicknessFactor, newThicknessFactor))
1410 return;
1411 m_thicknessFactor = newThicknessFactor;
1413 markDirty(VolumeDirty);
1414}
1415
1417{
1418 return m_thicknessMap;
1419}
1420
1422{
1423 if (m_thicknessMap == newThicknessMap)
1424 return;
1425
1427
1428 m_thicknessMap = newThicknessMap;
1430 markDirty(VolumeDirty);
1431}
1432
1434{
1435 return m_thicknessChannel;
1436}
1437
1439{
1440 if (m_thicknessChannel == newThicknessChannel)
1441 return;
1442 m_thicknessChannel = newThicknessChannel;
1444 markDirty(VolumeDirty);
1445}
1446
1448{
1449 return m_attenuationDistance;
1450}
1451
1453{
1454 if (qFuzzyCompare(m_attenuationDistance, newAttenuationDistance))
1455 return;
1456 m_attenuationDistance = newAttenuationDistance;
1458 markDirty(VolumeDirty);
1459}
1460
1462{
1463 return m_attenuationColor;
1464}
1465
1467{
1468 return m_vertexColorsEnabled;
1469}
1470
1472{
1473 if (m_attenuationColor == newAttenuationColor)
1474 return;
1475 m_attenuationColor = newAttenuationColor;
1477 markDirty(VolumeDirty);
1478}
1479
1480void QQuick3DSpecularGlossyMaterial::setVertexColorsEnabled(bool vertexColors)
1481{
1482 if (m_vertexColorsEnabled == vertexColors)
1483 return;
1484
1485 m_vertexColorsEnabled = vertexColors;
1486 emit vertexColorsEnabledChanged(m_vertexColorsEnabled);
1487 markDirty(VertexColorsDirty);
1488}
1489
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)
void setClearcoatAmount(float newClearcoatAmount)
QQuick3DMaterial::TextureChannelMapping occlusionChannel
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 setTransmissionMap(QQuick3DTexture *newTransmissionMap)
void setEmissiveMap(QQuick3DTexture *emissiveMap)
void setThicknessMap(QQuick3DTexture *newThicknessMap)
void setThicknessFactor(float newThicknessFactor)
void setOpacityMap(QQuick3DTexture *opacityMap)
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 setHeightChannel(QQuick3DMaterial::TextureChannelMapping channel)
QQuick3DSpecularGlossyMaterial(QQuick3DObject *parent=nullptr)
void setClearcoatChannel(QQuick3DMaterial::TextureChannelMapping newClearcoatChannel)
void setGlossinessChannel(QQuick3DMaterial::TextureChannelMapping channel)
void setAlbedoMap(QQuick3DTexture *albedoMap)
void setTransmissionFactor(float newTransmissionFactor)
void setSpecularMap(QQuick3DTexture *specularMap)
void setAttenuationDistance(float newAttenuationDistance)
QSSGRenderGraphObject * updateSpatialNode(QSSGRenderGraphObject *node) override
void setClearcoatRoughnessAmount(float newClearcoatRoughnessAmount)
void setClearcoatRoughnessChannel(QQuick3DMaterial::TextureChannelMapping newClearcoatRoughnessChannel)
void setLighting(QQuick3DSpecularGlossyMaterial::Lighting lighting)
QQuick3DMaterial::TextureChannelMapping clearcoatChannel
QQuick3DMaterial::TextureChannelMapping heightChannel
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:287
constexpr const T & qBound(const T &min, const T &val, const T &max)
Definition qminmax.h:44
GLsizei samples
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLint GLsizei width
GLenum type
GLuint GLfloat * val
GLenum GLenum GLenum GLenum mapping
static QT_BEGIN_NAMESPACE float ensureNormalized(float val)
\qmltype PrincipledMaterial \inherits Material \inqmlmodule QtQuick3D
static QT_BEGIN_NAMESPACE float ensureNormalized(float val)
\qmltype SpecularGlossyMaterial \inherits Material \inqmlmodule QtQuick3D
#define emit
unsigned int quint32
Definition qtypes.h:45
QSSGRenderDefaultMaterial::MaterialSpecularModel specularModel
QSSGRenderDefaultMaterial::MaterialBlendMode blendMode
QSSGRenderDefaultMaterial::MaterialAlphaMode alphaMode
TextureChannelMapping clearcoatRoughnessChannel
Definition moc.h:24
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent