9#include <QtQuick3DRuntimeRender/private/qssgrenderdefaultmaterial_p.h>
10#include <QtQuick3DUtils/private/qssgutils_p.h>
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
129
130
131
132
133
134
135
136
137
138
139
142
143
144
145
146
147
150
151
152
153
154
155
156
159
160
161
162
163
164
165
166
167
168
169
170
173
174
175
176
177
178
179
180
181
182
183
184
187
188
189
190
191
194
195
196
197
198
199
200
201
202
203
206
207
208
209
210
211
212
215
216
217
218
219
220
221
222
223
224
225
226
229
230
231
232
233
236
237
238
239
240
241
242
243
244
245
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
277
278
279
280
281
282
283
284
287
288
289
290
291
292
293
296
297
298
299
300
301
302
303
304
305
306
307
310
311
312
313
314
315
318
319
320
321
322
323
324
325
326
327
328
329
332
333
334
335
336
337
338
341
342
343
344
345
348
349
350
351
352
353
354
355
356
357
360
361
362
363
364
367
368
369
370
371
374
375
376
377
378
379
382
383
384
385
386
387
388
389
390
391
394
395
396
397
398
399
400
401
404
405
406
407
410
411
412
413
414
417
418
419
420
421
422
423
424
425
428
429
430
431
432
433
434
435
436
437
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
491
492
493
494
495
496
497
498
499
500
501
502
505
506
507
508
509
510
511
512
513
514
515
518
519
520
521
522
523
524
525
526
527
528
529
530
533
534
535
536
537
538
539
540
543
544
545
546
547
548
549
550
551
552
553
556
557
558
559
560
561
562
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
599
600
601
602
603
604
607
608
609
610
611
612
613
616
617
618
619
620
621
622
623
624
625
626
629
630
631
632
633
636
637
638
639
640
641
642
645
646
647
648
649
650
651
652
653
654
655
656
659
660
661
662
663
664
668
669
670
671
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
695
696
697
698
699
700
701
702
703
704
705
706
707
708
711
712
713
714
715
716
717
718
719
720
721
724
725
726
727
728
729
730
731
732
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
773
774
775
776
777
778
779
780
781
782
783
784
785
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
831
832
833
834
835
836
837
838
839
840
841
842
843
844
847
848
849
850
851
852
853
854
855
856
857
858
859
862
863
864
865
866
867
868
869
870
871
872
873
876
877
878
879
880
881
882
883
884
885
886
887
890
891
892
893
894
895
896
897
898
899
900
901
902
905
906
907
908
909
910
911
912
913
914
915
916
917
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
962
963
964
965
966
967
970
971
972
973
974
975
976
977
980
981
982
983
984
985
986
987
988
989
990
991
994
995
996
997
998
999
1000
1001
1002
1005
1006
1007
1008
1009
1010
1011
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1028
1029
1030
1031
1032
1033
1034
1037
1038
1039
1040
1041
1042
1043
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1081
1082
1083
1084
1085
1088
1089
1090
1091
1092
1093
1094
1097
1098
1099
1100
1101
1102
1103
1106
1107
1108
1109
1110
1111
1114
1115
1116
1117
1118
1121
1122
1123
1124
1125
1126
1127
1130
1131
1132
1133
1134
1135
1136
1139
1140
1141
1142
1143
1144
1147
1148
1149
1150
1151
1152
1153
1156
1157
1158
1159
1160
1161
1162
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1252QQuick3DPrincipledMaterial::QQuick3DPrincipledMaterial(QQuick3DObject *parent)
1253 : QQuick3DMaterial(*(
new QQuick3DObjectPrivate(QQuick3DObjectPrivate::Type::PrincipledMaterial)), parent)
1256QQuick3DPrincipledMaterial::~QQuick3DPrincipledMaterial()
1260QQuick3DPrincipledMaterial::Lighting QQuick3DPrincipledMaterial::lighting()
const
1265QQuick3DPrincipledMaterial::BlendMode QQuick3DPrincipledMaterial::blendMode()
const
1270QColor QQuick3DPrincipledMaterial::baseColor()
const
1275QQuick3DTexture *QQuick3DPrincipledMaterial::baseColorMap()
const
1277 return m_baseColorMap;
1280bool QQuick3DPrincipledMaterial::baseColorSingleChannelEnabled()
const
1282 return m_baseColorSingleChannelEnabled;
1285QQuick3DMaterial::TextureChannelMapping QQuick3DPrincipledMaterial::baseColorChannel()
const
1287 return m_baseColorChannel;
1290bool QQuick3DPrincipledMaterial::specularSingleChannelEnabled()
const
1292 return m_specularSingleChannelEnabled;
1295QQuick3DMaterial::TextureChannelMapping QQuick3DPrincipledMaterial::specularChannel()
const
1297 return m_specularChannel;
1300bool QQuick3DPrincipledMaterial::emissiveSingleChannelEnabled()
const
1302 return m_emissiveSingleChannelEnabled;
1305QQuick3DMaterial::TextureChannelMapping QQuick3DPrincipledMaterial::emissiveChannel()
const
1307 return m_emissiveChannel;
1310QQuick3DTexture *QQuick3DPrincipledMaterial::emissiveMap()
const
1312 return m_emissiveMap;
1315QVector3D QQuick3DPrincipledMaterial::emissiveFactor()
const
1317 return m_emissiveFactor;
1320QQuick3DTexture *QQuick3DPrincipledMaterial::specularReflectionMap()
const
1322 return m_specularReflectionMap;
1325QQuick3DTexture *QQuick3DPrincipledMaterial::specularMap()
const
1327 return m_specularMap;
1330float QQuick3DPrincipledMaterial::specularTint()
const
1332 return m_specularTint;
1335float QQuick3DPrincipledMaterial::specularAmount()
const
1337 return m_specularAmount;
1340float QQuick3DPrincipledMaterial::roughness()
const
1345QQuick3DTexture *QQuick3DPrincipledMaterial::roughnessMap()
const
1347 return m_roughnessMap;
1350bool QQuick3DPrincipledMaterial::invertOpacityMapValue()
const
1352 return m_invertOpacityMapValue;
1355float QQuick3DPrincipledMaterial::opacity()
const
1360QQuick3DTexture *QQuick3DPrincipledMaterial::opacityMap()
const
1362 return m_opacityMap;
1365QQuick3DTexture *QQuick3DPrincipledMaterial::normalMap()
const
1370float QQuick3DPrincipledMaterial::metalness()
const
1372 return m_metalnessAmount;
1375QQuick3DTexture *QQuick3DPrincipledMaterial::metalnessMap()
const
1377 return m_metalnessMap;
1380float QQuick3DPrincipledMaterial::normalStrength()
const
1382 return m_normalStrength;
1385QQuick3DTexture *QQuick3DPrincipledMaterial::occlusionMap()
const
1387 return m_occlusionMap;
1390float QQuick3DPrincipledMaterial::occlusionAmount()
const
1392 return m_occlusionAmount;
1395QQuick3DPrincipledMaterial::AlphaMode QQuick3DPrincipledMaterial::alphaMode()
const
1400float QQuick3DPrincipledMaterial::alphaCutoff()
const
1402 return m_alphaCutoff;
1405QQuick3DMaterial::TextureChannelMapping QQuick3DPrincipledMaterial::roughnessChannel()
const
1407 return m_roughnessChannel;
1410QQuick3DMaterial::TextureChannelMapping QQuick3DPrincipledMaterial::opacityChannel()
const
1412 return m_opacityChannel;
1415QQuick3DMaterial::TextureChannelMapping QQuick3DPrincipledMaterial::metalnessChannel()
const
1417 return m_metalnessChannel;
1420QQuick3DMaterial::TextureChannelMapping QQuick3DPrincipledMaterial::occlusionChannel()
const
1422 return m_occlusionChannel;
1425float QQuick3DPrincipledMaterial::pointSize()
const
1430float QQuick3DPrincipledMaterial::lineWidth()
const
1435QQuick3DTexture *QQuick3DPrincipledMaterial::heightMap()
const
1440QQuick3DMaterial::TextureChannelMapping QQuick3DPrincipledMaterial::heightChannel()
const
1442 return m_heightChannel;
1445float QQuick3DPrincipledMaterial::heightAmount()
const
1447 return m_heightAmount;
1450int QQuick3DPrincipledMaterial::minHeightMapSamples()
const
1452 return m_minHeightMapSamples;
1455int QQuick3DPrincipledMaterial::maxHeightMapSamples()
const
1457 return m_maxHeightMapSamples;
1460void QQuick3DPrincipledMaterial::markAllDirty()
1462 m_dirtyAttributes = 0xffffffff;
1463 QQuick3DMaterial::markAllDirty();
1466void QQuick3DPrincipledMaterial::setLighting(QQuick3DPrincipledMaterial::Lighting lighting)
1468 if (m_lighting == lighting)
1471 m_lighting = lighting;
1472 emit lightingChanged(m_lighting);
1473 markDirty(LightingModeDirty);
1476void QQuick3DPrincipledMaterial::setBlendMode(QQuick3DPrincipledMaterial::BlendMode blendMode)
1478 if (m_blendMode == blendMode)
1481 m_blendMode = blendMode;
1482 emit blendModeChanged(m_blendMode);
1483 markDirty(BlendModeDirty);
1486void QQuick3DPrincipledMaterial::setBaseColor(QColor diffuseColor)
1488 if (m_baseColor == diffuseColor)
1491 m_baseColor = diffuseColor;
1492 emit baseColorChanged(m_baseColor);
1493 markDirty(BaseColorDirty);
1496void QQuick3DPrincipledMaterial::setBaseColorMap(QQuick3DTexture *baseColorMap)
1498 if (m_baseColorMap == baseColorMap)
1501 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DPrincipledMaterial::setBaseColorMap, baseColorMap, m_baseColorMap);
1503 m_baseColorMap = baseColorMap;
1504 emit baseColorMapChanged(m_baseColorMap);
1505 markDirty(BaseColorDirty);
1508void QQuick3DPrincipledMaterial::setBaseColorSingleChannelEnabled(
bool baseColorSingleChannelEnabled)
1510 if (m_baseColorSingleChannelEnabled == baseColorSingleChannelEnabled)
1513 m_baseColorSingleChannelEnabled = baseColorSingleChannelEnabled;
1514 emit baseColorSingleChannelEnabledChanged(baseColorSingleChannelEnabled);
1515 markDirty(BaseColorDirty);
1518void QQuick3DPrincipledMaterial::setBaseColorChannel(TextureChannelMapping channel)
1520 if (m_baseColorChannel == channel)
1523 m_baseColorChannel = channel;
1524 emit baseColorChannelChanged(channel);
1525 markDirty(BaseColorDirty);
1528void QQuick3DPrincipledMaterial::setSpecularSingleChannelEnabled(
bool specularSingleChannelEnabled)
1530 if (m_specularSingleChannelEnabled == specularSingleChannelEnabled)
1533 m_specularSingleChannelEnabled = specularSingleChannelEnabled;
1534 emit specularSingleChannelEnabledChanged(specularSingleChannelEnabled);
1535 markDirty(SpecularDirty);
1538void QQuick3DPrincipledMaterial::setSpecularChannel(TextureChannelMapping channel)
1540 if (m_specularChannel == channel)
1543 m_specularChannel = channel;
1544 emit specularChannelChanged(channel);
1545 markDirty(SpecularDirty);
1548void QQuick3DPrincipledMaterial::setEmissiveSingleChannelEnabled(
bool emissiveSingleChannelEnabled)
1550 if (m_emissiveSingleChannelEnabled == emissiveSingleChannelEnabled)
1553 m_emissiveSingleChannelEnabled = emissiveSingleChannelEnabled;
1554 emit emissiveSingleChannelEnabledChanged(emissiveSingleChannelEnabled);
1555 markDirty(EmissiveDirty);
1558void QQuick3DPrincipledMaterial::setEmissiveChannel(TextureChannelMapping channel)
1560 if (m_emissiveChannel == channel)
1563 m_emissiveChannel = channel;
1564 emit emissiveChannelChanged(channel);
1565 markDirty(EmissiveDirty);
1568void QQuick3DPrincipledMaterial::setEmissiveMap(QQuick3DTexture *emissiveMap)
1570 if (m_emissiveMap == emissiveMap)
1573 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DPrincipledMaterial::setEmissiveMap, emissiveMap, m_emissiveMap);
1575 m_emissiveMap = emissiveMap;
1576 emit emissiveMapChanged(m_emissiveMap);
1577 markDirty(EmissiveDirty);
1580void QQuick3DPrincipledMaterial::setEmissiveFactor(QVector3D emissiveFactor)
1582 if (m_emissiveFactor == emissiveFactor)
1585 m_emissiveFactor = emissiveFactor;
1586 emit emissiveFactorChanged(m_emissiveFactor);
1587 markDirty(EmissiveDirty);
1590void QQuick3DPrincipledMaterial::setSpecularReflectionMap(QQuick3DTexture *specularReflectionMap)
1592 if (m_specularReflectionMap == specularReflectionMap)
1595 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DPrincipledMaterial::setSpecularReflectionMap, specularReflectionMap, m_specularReflectionMap);
1597 m_specularReflectionMap = specularReflectionMap;
1598 emit specularReflectionMapChanged(m_specularReflectionMap);
1599 markDirty(SpecularDirty);
1602void QQuick3DPrincipledMaterial::setSpecularMap(QQuick3DTexture *specularMap)
1604 if (m_specularMap == specularMap)
1607 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DPrincipledMaterial::setSpecularMap, specularMap, m_specularMap);
1609 m_specularMap = specularMap;
1610 emit specularMapChanged(m_specularMap);
1611 markDirty(SpecularDirty);
1614void QQuick3DPrincipledMaterial::setSpecularTint(
float specularTint)
1616 specularTint = ensureNormalized(specularTint);
1617 if (qFuzzyCompare(m_specularTint, specularTint))
1620 m_specularTint = specularTint;
1621 emit specularTintChanged(m_specularTint);
1622 markDirty(SpecularDirty);
1625void QQuick3DPrincipledMaterial::setSpecularAmount(
float specularAmount)
1627 specularAmount = ensureNormalized(specularAmount);
1628 if (qFuzzyCompare(m_specularAmount, specularAmount))
1631 m_specularAmount = specularAmount;
1632 emit specularAmountChanged(m_specularAmount);
1633 markDirty(SpecularDirty);
1636void QQuick3DPrincipledMaterial::setRoughness(
float roughness)
1638 roughness = ensureNormalized(roughness);
1639 if (qFuzzyCompare(m_roughness, roughness))
1642 m_roughness = roughness;
1643 emit roughnessChanged(m_roughness);
1644 markDirty(RoughnessDirty);
1647void QQuick3DPrincipledMaterial::setRoughnessMap(QQuick3DTexture *roughnessMap)
1649 if (m_roughnessMap == roughnessMap)
1652 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DPrincipledMaterial::setRoughnessMap, roughnessMap, m_roughnessMap);
1654 m_roughnessMap = roughnessMap;
1655 emit roughnessMapChanged(m_roughnessMap);
1656 markDirty(RoughnessDirty);
1659void QQuick3DPrincipledMaterial::setInvertOpacityMapValue(
bool invertOpacityMapValue)
1661 if (invertOpacityMapValue == m_invertOpacityMapValue)
1664 m_invertOpacityMapValue = invertOpacityMapValue;
1665 emit invertOpacityMapValueChanged(m_invertOpacityMapValue);
1666 markDirty(OpacityDirty);
1669void QQuick3DPrincipledMaterial::setOpacity(
float opacity)
1671 opacity = ensureNormalized(opacity);
1672 if (qFuzzyCompare(m_opacity, opacity))
1675 m_opacity = opacity;
1676 emit opacityChanged(m_opacity);
1677 markDirty(OpacityDirty);
1680void QQuick3DPrincipledMaterial::setOpacityMap(QQuick3DTexture *opacityMap)
1682 if (m_opacityMap == opacityMap)
1685 QQuick3DObjectPrivate::attachWatcher(
this, &::QQuick3DPrincipledMaterial::setOpacityMap, opacityMap, m_opacityMap);
1687 m_opacityMap = opacityMap;
1688 emit opacityMapChanged(m_opacityMap);
1689 markDirty(OpacityDirty);
1692void QQuick3DPrincipledMaterial::setNormalMap(QQuick3DTexture *normalMap)
1694 if (m_normalMap == normalMap)
1697 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DPrincipledMaterial::setNormalMap, normalMap, m_normalMap);
1699 m_normalMap = normalMap;
1700 emit normalMapChanged(m_normalMap);
1701 markDirty(NormalDirty);
1704void QQuick3DPrincipledMaterial::setMetalness(
float metalnessAmount)
1706 metalnessAmount = ensureNormalized(metalnessAmount);
1707 if (qFuzzyCompare(m_metalnessAmount, metalnessAmount))
1710 m_metalnessAmount = metalnessAmount;
1711 emit metalnessChanged(m_metalnessAmount);
1712 markDirty(MetalnessDirty);
1715void QQuick3DPrincipledMaterial::setMetalnessMap(QQuick3DTexture *metallicMap)
1717 if (m_metalnessMap == metallicMap)
1720 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DPrincipledMaterial::setMetalnessMap, metallicMap, m_metalnessMap);
1722 m_metalnessMap = metallicMap;
1723 emit metalnessMapChanged(m_metalnessMap);
1724 markDirty(MetalnessDirty);
1727void QQuick3DPrincipledMaterial::setNormalStrength(
float factor)
1729 factor = ensureNormalized(factor);
1730 if (qFuzzyCompare(m_normalStrength, factor))
1733 m_normalStrength = factor;
1734 emit normalStrengthChanged(m_normalStrength);
1735 markDirty(NormalDirty);
1738void QQuick3DPrincipledMaterial::setOcclusionMap(QQuick3DTexture *occlusionMap)
1740 if (m_occlusionMap == occlusionMap)
1743 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DPrincipledMaterial::setOcclusionMap, occlusionMap, m_occlusionMap);
1745 m_occlusionMap = occlusionMap;
1746 emit occlusionMapChanged(m_occlusionMap);
1747 markDirty(OcclusionDirty);
1750void QQuick3DPrincipledMaterial::setOcclusionAmount(
float occlusionAmount)
1752 if (qFuzzyCompare(m_occlusionAmount, occlusionAmount))
1755 m_occlusionAmount = occlusionAmount;
1756 emit occlusionAmountChanged(m_occlusionAmount);
1757 markDirty(OcclusionDirty);
1760void QQuick3DPrincipledMaterial::setAlphaMode(QQuick3DPrincipledMaterial::AlphaMode alphaMode)
1762 if (m_alphaMode == alphaMode)
1765 m_alphaMode = alphaMode;
1766 emit alphaModeChanged(m_alphaMode);
1767 markDirty(AlphaModeDirty);
1770void QQuick3DPrincipledMaterial::setAlphaCutoff(
float alphaCutoff)
1772 if (qFuzzyCompare(m_alphaCutoff, alphaCutoff))
1775 m_alphaCutoff = alphaCutoff;
1776 emit alphaCutoffChanged(m_alphaCutoff);
1777 markDirty(AlphaModeDirty);
1780void QQuick3DPrincipledMaterial::setMetalnessChannel(TextureChannelMapping channel)
1782 if (m_metalnessChannel == channel)
1785 m_metalnessChannel = channel;
1786 emit metalnessChannelChanged(channel);
1787 markDirty(MetalnessDirty);
1790void QQuick3DPrincipledMaterial::setRoughnessChannel(TextureChannelMapping channel)
1792 if (m_roughnessChannel == channel)
1795 m_roughnessChannel = channel;
1796 emit roughnessChannelChanged(channel);
1797 markDirty(RoughnessDirty);
1800void QQuick3DPrincipledMaterial::setOpacityChannel(TextureChannelMapping channel)
1802 if (m_opacityChannel == channel)
1805 m_opacityChannel = channel;
1806 emit opacityChannelChanged(channel);
1807 markDirty(OpacityDirty);
1810void QQuick3DPrincipledMaterial::setOcclusionChannel(TextureChannelMapping channel)
1812 if (m_occlusionChannel == channel)
1815 m_occlusionChannel = channel;
1816 emit occlusionChannelChanged(channel);
1817 markDirty(OcclusionDirty);
1820void QQuick3DPrincipledMaterial::setPointSize(
float size)
1822 if (qFuzzyCompare(m_pointSize, size))
1825 emit pointSizeChanged();
1826 markDirty(PointSizeDirty);
1829void QQuick3DPrincipledMaterial::setLineWidth(
float width)
1831 if (qFuzzyCompare(m_lineWidth, width))
1833 m_lineWidth = width;
1834 emit lineWidthChanged();
1835 markDirty(LineWidthDirty);
1838void QQuick3DPrincipledMaterial::setHeightMap(QQuick3DTexture *heightMap)
1840 if (m_heightMap == heightMap)
1843 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DPrincipledMaterial::setHeightMap, heightMap, m_heightMap);
1845 m_heightMap = heightMap;
1846 emit heightMapChanged(m_heightMap);
1847 markDirty(HeightDirty);
1850void QQuick3DPrincipledMaterial::setHeightChannel(QQuick3DMaterial::TextureChannelMapping channel)
1852 if (m_heightChannel == channel)
1855 m_heightChannel = channel;
1856 emit heightChannelChanged(m_heightChannel);
1857 markDirty(HeightDirty);
1860void QQuick3DPrincipledMaterial::setHeightAmount(
float heightAmount)
1862 if (m_heightAmount == heightAmount)
1865 m_heightAmount = heightAmount;
1866 emit heightAmountChanged(m_heightAmount);
1867 markDirty(HeightDirty);
1870void QQuick3DPrincipledMaterial::setMinHeightMapSamples(
int samples)
1872 if (m_minHeightMapSamples == samples)
1875 m_minHeightMapSamples = samples;
1876 emit minHeightMapSamplesChanged(samples);
1877 markDirty(HeightDirty);
1880void QQuick3DPrincipledMaterial::setMaxHeightMapSamples(
int samples)
1882 if (m_maxHeightMapSamples == samples)
1885 m_maxHeightMapSamples = samples;
1886 emit maxHeightMapSamplesChanged(samples);
1887 markDirty(HeightDirty);
1890QSSGRenderGraphObject *QQuick3DPrincipledMaterial::updateSpatialNode(QSSGRenderGraphObject *node)
1892 static const auto channelMapping = [](TextureChannelMapping mapping) {
1893 return QSSGRenderDefaultMaterial::TextureChannelMapping(mapping);
1898 node =
new QSSGRenderDefaultMaterial(QSSGRenderGraphObject::Type::PrincipledMaterial);
1902 QQuick3DMaterial::updateSpatialNode(node);
1904 QSSGRenderDefaultMaterial *material =
static_cast<QSSGRenderDefaultMaterial *>(node);
1906 material->specularModel = QSSGRenderDefaultMaterial::MaterialSpecularModel::SchlickGGX;
1908 if (m_dirtyAttributes & LightingModeDirty)
1909 material->lighting = QSSGRenderDefaultMaterial::MaterialLighting(m_lighting);
1911 if (m_dirtyAttributes & BlendModeDirty)
1912 material->blendMode = QSSGRenderDefaultMaterial::MaterialBlendMode(m_blendMode);
1914 if (m_dirtyAttributes & BaseColorDirty) {
1915 if (!m_baseColorMap)
1916 material->colorMap =
nullptr;
1918 material->colorMap = m_baseColorMap->getRenderImage();
1920 material->color = QSSGUtils::color::sRGBToLinear(m_baseColor);
1921 material->baseColorSingleChannelEnabled = m_baseColorSingleChannelEnabled;
1922 material->baseColorChannel = channelMapping(m_baseColorChannel);
1925 if (m_dirtyAttributes & EmissiveDirty) {
1927 material->emissiveMap =
nullptr;
1929 material->emissiveMap = m_emissiveMap->getRenderImage();
1931 material->emissiveColor = m_emissiveFactor;
1932 material->emissiveSingleChannelEnabled = m_emissiveSingleChannelEnabled;
1933 material->emissiveChannel = channelMapping(m_emissiveChannel);
1936 if (m_dirtyAttributes & RoughnessDirty) {
1937 if (!m_roughnessMap)
1938 material->roughnessMap =
nullptr;
1940 material->roughnessMap = m_roughnessMap->getRenderImage();
1942 material->specularRoughness = m_roughness;
1943 material->roughnessChannel = channelMapping(m_roughnessChannel);
1946 if (m_dirtyAttributes & MetalnessDirty) {
1947 if (!m_metalnessMap)
1948 material->metalnessMap =
nullptr;
1950 material->metalnessMap = m_metalnessMap->getRenderImage();
1952 material->metalnessAmount = m_metalnessAmount;
1953 material->metalnessChannel = channelMapping(m_metalnessChannel);
1957 if (m_dirtyAttributes & SpecularDirty) {
1958 if (!m_specularReflectionMap)
1959 material->specularReflection =
nullptr;
1961 material->specularReflection = m_specularReflectionMap->getRenderImage();
1963 if (!m_specularMap) {
1964 material->specularMap =
nullptr;
1966 material->specularMap = m_specularMap->getRenderImage();
1969 material->specularAmount = m_specularAmount;
1970 material->specularTint = QVector3D(m_specularTint, m_specularTint, m_specularTint);
1971 material->ior = m_indexOfRefraction;
1972 material->fresnelScaleBiasEnabled = m_fresnelScaleBiasEnabled;
1973 material->fresnelScale = m_fresnelScale;
1974 material->fresnelBias = m_fresnelBias;
1975 material->fresnelPower = m_fresnelPower;
1976 material->specularAmountSingleChannelEnabled = m_specularSingleChannelEnabled;
1977 material->specularAmountChannel = channelMapping(m_specularChannel);
1980 if (m_dirtyAttributes & OpacityDirty) {
1981 material->opacity = m_opacity;
1983 material->opacityMap =
nullptr;
1985 material->opacityMap = m_opacityMap->getRenderImage();
1987 material->invertOpacityMapValue = m_invertOpacityMapValue;
1988 material->opacity = m_opacity;
1989 material->opacityChannel = channelMapping(m_opacityChannel);
1992 if (m_dirtyAttributes & NormalDirty) {
1994 material->normalMap =
nullptr;
1996 material->normalMap = m_normalMap->getRenderImage();
1998 material->bumpAmount = m_normalStrength;
2001 if (m_dirtyAttributes & OcclusionDirty) {
2002 if (!m_occlusionMap)
2003 material->occlusionMap =
nullptr;
2005 material->occlusionMap = m_occlusionMap->getRenderImage();
2006 material->occlusionAmount = m_occlusionAmount;
2007 material->occlusionChannel = channelMapping(m_occlusionChannel);
2010 if (m_dirtyAttributes & AlphaModeDirty) {
2011 material->alphaMode = QSSGRenderDefaultMaterial::MaterialAlphaMode(m_alphaMode);
2012 material->alphaCutoff = m_alphaCutoff;
2015 if (m_dirtyAttributes & PointSizeDirty)
2016 material->pointSize = m_pointSize;
2018 if (m_dirtyAttributes & LineWidthDirty)
2019 material->lineWidth = m_lineWidth;
2021 if (m_dirtyAttributes & HeightDirty) {
2023 material->heightMap =
nullptr;
2025 material->heightMap = m_heightMap->getRenderImage();
2026 material->heightAmount = m_heightAmount;
2027 material->minHeightSamples = m_minHeightMapSamples;
2028 material->maxHeightSamples = m_maxHeightMapSamples;
2029 material->heightChannel = channelMapping(m_heightChannel);
2032 if (m_dirtyAttributes & ClearcoatDirty) {
2033 material->clearcoatAmount = m_clearcoatAmount;
2034 if (!m_clearcoatMap)
2035 material->clearcoatMap =
nullptr;
2037 material->clearcoatMap = m_clearcoatMap->getRenderImage();
2038 material->clearcoatChannel = channelMapping(m_clearcoatChannel);
2039 material->clearcoatRoughnessAmount = m_clearcoatRoughnessAmount;
2040 if (!m_clearcoatRoughnessMap)
2041 material->clearcoatRoughnessMap =
nullptr;
2043 material->clearcoatRoughnessMap = m_clearcoatRoughnessMap->getRenderImage();
2044 material->clearcoatRoughnessChannel = channelMapping(m_clearcoatRoughnessChannel);
2045 if (!m_clearcoatNormalMap)
2046 material->clearcoatNormalMap =
nullptr;
2048 material->clearcoatNormalMap = m_clearcoatNormalMap->getRenderImage();
2049 material->clearcoatNormalStrength = m_clearcoatNormalStrength;
2050 material->clearcoatFresnelScaleBiasEnabled = m_clearcoatFresnelScaleBiasEnabled;
2051 material->clearcoatFresnelScale = m_clearcoatFresnelScale;
2052 material->clearcoatFresnelBias = m_clearcoatFresnelBias;
2053 material->clearcoatFresnelPower = m_clearcoatFresnelPower;
2056 if (m_dirtyAttributes & SheenDirty) {
2057 material->sheenColor = QSSGUtils::color::sRGBToLinear(m_sheenColor).toVector3D();
2058 if (!m_sheenColorMap)
2059 material->sheenColorMap =
nullptr;
2061 material->sheenColorMap = m_sheenColorMap->getRenderImage();
2062 material->sheenRoughness = m_sheenRoughness;
2063 if (!m_sheenRoughnessMap)
2064 material->sheenRoughnessMap =
nullptr;
2066 material->sheenRoughnessMap = m_sheenRoughnessMap->getRenderImage();
2067 material->sheenRoughnessChannel = channelMapping(m_sheenRoughnessChannel);
2070 if (m_dirtyAttributes & AnisotropyDirty) {
2071 material->anisotropyStrength = m_anisotropyStrength;
2073 material->anisotropyRotation = qDegreesToRadians(m_anisotropyRotation);
2074 if (!m_anisotropyMap)
2075 material->anisotropyMap =
nullptr;
2077 material->anisotropyMap = m_anisotropyMap->getRenderImage();
2080 if (m_dirtyAttributes & IridescenceDirty) {
2081 material->iridescenceFactor = m_iridescenceFactor;
2082 if (!m_iridescenceMap)
2083 material->iridescenceMap =
nullptr;
2085 material->iridescenceMap = m_iridescenceMap->getRenderImage();
2086 material->iridescenceChannel = channelMapping(m_iridescenceChannel);
2087 material->iridescenceIndexOfRefraction = m_iridescenceIndexOfRefraction;
2088 material->iridescenceThicknessMinimum = m_iridescenceThicknessMinimum;
2089 material->iridescenceThicknessMaximum = m_iridescenceThicknessMaximum;
2090 if (!m_iridescenceThicknessMap)
2091 material->iridescenceThicknessMap =
nullptr;
2093 material->iridescenceThicknessMap = m_iridescenceThicknessMap->getRenderImage();
2094 material->iridescenceThicknessChannel = channelMapping(m_iridescenceThicknessChannel);
2097 if (m_dirtyAttributes & DispersionDirty)
2098 material->dispersion = m_dispersion;
2100 if (m_dirtyAttributes & TransmissionDirty) {
2101 material->transmissionFactor = m_transmissionFactor;
2102 if (!m_transmissionMap)
2103 material->transmissionMap =
nullptr;
2105 material->transmissionMap = m_transmissionMap->getRenderImage();
2106 material->transmissionChannel = channelMapping(m_transmissionChannel);
2109 if (m_dirtyAttributes & VolumeDirty) {
2110 material->thicknessFactor = m_thicknessFactor;
2111 if (!m_thicknessMap)
2112 material->thicknessMap =
nullptr;
2114 material->thicknessMap = m_thicknessMap->getRenderImage();
2115 material->thicknessChannel = channelMapping(m_thicknessChannel);
2117 material->attenuationDistance = m_attenuationDistance;
2118 material->attenuationColor = QSSGUtils::color::sRGBToLinear(m_attenuationColor).toVector3D();
2121 if (m_dirtyAttributes & VertexColorsDirty) {
2122 material->vertexColorsEnabled = m_vertexColorsEnabled;
2123 material->vertexColorsMaskEnabled = m_vertexColorsMaskEnabled;
2124 material->vertexColorRedMask = QSSGRenderDefaultMaterial::VertexColorMaskFlags::fromInt(m_vertexColorRedMask);
2125 material->vertexColorGreenMask = QSSGRenderDefaultMaterial::VertexColorMaskFlags::fromInt(m_vertexColorGreenMask);
2126 material->vertexColorBlueMask = QSSGRenderDefaultMaterial::VertexColorMaskFlags::fromInt(m_vertexColorBlueMask);
2127 material->vertexColorAlphaMask = QSSGRenderDefaultMaterial::VertexColorMaskFlags::fromInt(m_vertexColorAlphaMask);
2130 m_dirtyAttributes = 0;
2135void QQuick3DPrincipledMaterial::itemChange(QQuick3DObject::ItemChange change,
const QQuick3DObject::ItemChangeData &value)
2137 if (change == QQuick3DObject::ItemSceneChange)
2138 updateSceneManager(value.sceneManager);
2141void QQuick3DPrincipledMaterial::updateSceneManager(QQuick3DSceneManager *sceneManager)
2145 QQuick3DObjectPrivate::refSceneManager(m_baseColorMap, *sceneManager);
2146 QQuick3DObjectPrivate::refSceneManager(m_emissiveMap, *sceneManager);
2147 QQuick3DObjectPrivate::refSceneManager(m_specularReflectionMap, *sceneManager);
2148 QQuick3DObjectPrivate::refSceneManager(m_specularMap, *sceneManager);
2149 QQuick3DObjectPrivate::refSceneManager(m_roughnessMap, *sceneManager);
2150 QQuick3DObjectPrivate::refSceneManager(m_opacityMap, *sceneManager);
2151 QQuick3DObjectPrivate::refSceneManager(m_normalMap, *sceneManager);
2152 QQuick3DObjectPrivate::refSceneManager(m_metalnessMap, *sceneManager);
2153 QQuick3DObjectPrivate::refSceneManager(m_occlusionMap, *sceneManager);
2154 QQuick3DObjectPrivate::refSceneManager(m_heightMap, *sceneManager);
2155 QQuick3DObjectPrivate::refSceneManager(m_clearcoatMap, *sceneManager);
2156 QQuick3DObjectPrivate::refSceneManager(m_clearcoatRoughnessMap, *sceneManager);
2157 QQuick3DObjectPrivate::refSceneManager(m_clearcoatNormalMap, *sceneManager);
2158 QQuick3DObjectPrivate::refSceneManager(m_sheenColorMap, *sceneManager);
2159 QQuick3DObjectPrivate::refSceneManager(m_sheenRoughnessMap, *sceneManager);
2160 QQuick3DObjectPrivate::refSceneManager(m_anisotropyMap, *sceneManager);
2161 QQuick3DObjectPrivate::refSceneManager(m_iridescenceMap, *sceneManager);
2162 QQuick3DObjectPrivate::refSceneManager(m_iridescenceThicknessMap, *sceneManager);
2163 QQuick3DObjectPrivate::refSceneManager(m_transmissionMap, *sceneManager);
2164 QQuick3DObjectPrivate::refSceneManager(m_thicknessMap, *sceneManager);
2166 QQuick3DObjectPrivate::derefSceneManager(m_baseColorMap);
2167 QQuick3DObjectPrivate::derefSceneManager(m_emissiveMap);
2168 QQuick3DObjectPrivate::derefSceneManager(m_specularReflectionMap);
2169 QQuick3DObjectPrivate::derefSceneManager(m_specularMap);
2170 QQuick3DObjectPrivate::derefSceneManager(m_roughnessMap);
2171 QQuick3DObjectPrivate::derefSceneManager(m_opacityMap);
2172 QQuick3DObjectPrivate::derefSceneManager(m_normalMap);
2173 QQuick3DObjectPrivate::derefSceneManager(m_metalnessMap);
2174 QQuick3DObjectPrivate::derefSceneManager(m_occlusionMap);
2175 QQuick3DObjectPrivate::derefSceneManager(m_heightMap);
2176 QQuick3DObjectPrivate::derefSceneManager(m_clearcoatMap);
2177 QQuick3DObjectPrivate::derefSceneManager(m_clearcoatRoughnessMap);
2178 QQuick3DObjectPrivate::derefSceneManager(m_clearcoatNormalMap);
2179 QQuick3DObjectPrivate::derefSceneManager(m_sheenColorMap);
2180 QQuick3DObjectPrivate::derefSceneManager(m_sheenRoughnessMap);
2181 QQuick3DObjectPrivate::derefSceneManager(m_anisotropyMap);
2182 QQuick3DObjectPrivate::derefSceneManager(m_iridescenceMap);
2183 QQuick3DObjectPrivate::derefSceneManager(m_iridescenceThicknessMap);
2184 QQuick3DObjectPrivate::derefSceneManager(m_transmissionMap);
2185 QQuick3DObjectPrivate::derefSceneManager(m_thicknessMap);
2189void QQuick3DPrincipledMaterial::markDirty(QQuick3DPrincipledMaterial::DirtyType type)
2191 if (!(m_dirtyAttributes & quint32(type))) {
2192 m_dirtyAttributes |= quint32(type);
2197float QQuick3DPrincipledMaterial::clearcoatAmount()
const
2199 return m_clearcoatAmount;
2202void QQuick3DPrincipledMaterial::setClearcoatAmount(
float newClearcoatAmount)
2204 if (qFuzzyCompare(m_clearcoatAmount, newClearcoatAmount))
2206 m_clearcoatAmount = newClearcoatAmount;
2207 emit clearcoatAmountChanged(m_clearcoatAmount);
2208 markDirty(ClearcoatDirty);
2211QQuick3DTexture *QQuick3DPrincipledMaterial::clearcoatMap()
const
2213 return m_clearcoatMap;
2216void QQuick3DPrincipledMaterial::setClearcoatMap(QQuick3DTexture *newClearcoatMap)
2218 if (m_clearcoatMap == newClearcoatMap)
2221 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DPrincipledMaterial::setClearcoatMap, newClearcoatMap, m_clearcoatMap);
2223 m_clearcoatMap = newClearcoatMap;
2224 emit clearcoatMapChanged(m_clearcoatMap);
2225 markDirty(ClearcoatDirty);
2228QQuick3DMaterial::TextureChannelMapping QQuick3DPrincipledMaterial::clearcoatChannel()
const
2230 return m_clearcoatChannel;
2233void QQuick3DPrincipledMaterial::setClearcoatChannel(QQuick3DMaterial::TextureChannelMapping newClearcoatChannel)
2235 if (m_clearcoatChannel == newClearcoatChannel)
2237 m_clearcoatChannel = newClearcoatChannel;
2238 emit clearcoatChannelChanged(m_clearcoatChannel);
2239 markDirty(ClearcoatDirty);
2242float QQuick3DPrincipledMaterial::clearcoatRoughnessAmount()
const
2244 return m_clearcoatRoughnessAmount;
2247void QQuick3DPrincipledMaterial::setClearcoatRoughnessAmount(
float newClearcoatRoughnessAmount)
2249 if (qFuzzyCompare(m_clearcoatRoughnessAmount, newClearcoatRoughnessAmount))
2251 m_clearcoatRoughnessAmount = newClearcoatRoughnessAmount;
2252 emit clearcoatRoughnessAmountChanged(m_clearcoatRoughnessAmount);
2253 markDirty(ClearcoatDirty);
2256QQuick3DMaterial::TextureChannelMapping QQuick3DPrincipledMaterial::clearcoatRoughnessChannel()
const
2258 return m_clearcoatRoughnessChannel;
2261void QQuick3DPrincipledMaterial::setClearcoatRoughnessChannel(QQuick3DMaterial::TextureChannelMapping newClearcoatRoughnessChannel)
2263 if (m_clearcoatRoughnessChannel == newClearcoatRoughnessChannel)
2265 m_clearcoatRoughnessChannel = newClearcoatRoughnessChannel;
2266 emit clearcoatRoughnessChannelChanged(m_clearcoatRoughnessChannel);
2267 markDirty(ClearcoatDirty);
2270QQuick3DTexture *QQuick3DPrincipledMaterial::clearcoatRoughnessMap()
const
2272 return m_clearcoatRoughnessMap;
2275void QQuick3DPrincipledMaterial::setClearcoatRoughnessMap(QQuick3DTexture *newClearcoatRoughnessMap)
2277 if (m_clearcoatRoughnessMap == newClearcoatRoughnessMap)
2280 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DPrincipledMaterial::setClearcoatRoughnessMap, newClearcoatRoughnessMap, m_clearcoatRoughnessMap);
2282 m_clearcoatRoughnessMap = newClearcoatRoughnessMap;
2283 emit clearcoatRoughnessMapChanged(m_clearcoatRoughnessMap);
2284 markDirty(ClearcoatDirty);
2287QQuick3DTexture *QQuick3DPrincipledMaterial::clearcoatNormalMap()
const
2289 return m_clearcoatNormalMap;
2292void QQuick3DPrincipledMaterial::setClearcoatNormalMap(QQuick3DTexture *newClearcoatNormalMap)
2294 if (m_clearcoatNormalMap == newClearcoatNormalMap)
2297 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DPrincipledMaterial::setClearcoatNormalMap, newClearcoatNormalMap, m_clearcoatNormalMap);
2299 m_clearcoatNormalMap = newClearcoatNormalMap;
2300 emit clearcoatNormalMapChanged(m_clearcoatNormalMap);
2301 markDirty(ClearcoatDirty);
2305float QQuick3DPrincipledMaterial::clearcoatNormalStrength()
const
2307 return m_clearcoatNormalStrength;
2310void QQuick3DPrincipledMaterial::setClearcoatNormalStrength(
float newClearcoatNormalStrength)
2312 if (qFuzzyCompare(m_clearcoatNormalStrength, newClearcoatNormalStrength))
2315 m_clearcoatNormalStrength = newClearcoatNormalStrength;
2316 emit clearcoatNormalStrengthChanged(m_clearcoatNormalStrength);
2317 markDirty(ClearcoatDirty);
2320const QColor &QQuick3DPrincipledMaterial::sheenColor()
const
2322 return m_sheenColor;
2325void QQuick3DPrincipledMaterial::setSheenColor(
const QColor &newSheenColor)
2327 if (m_sheenColor == newSheenColor)
2330 m_sheenColor = newSheenColor;
2331 emit sheenColorChanged(m_sheenColor);
2332 markDirty(SheenDirty);
2335QQuick3DTexture *QQuick3DPrincipledMaterial::sheenColorMap()
const
2337 return m_sheenColorMap;
2340void QQuick3DPrincipledMaterial::setSheenColorMap(QQuick3DTexture *newSheenColorMap)
2342 if (m_sheenColorMap == newSheenColorMap)
2345 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DPrincipledMaterial::setSheenColorMap, newSheenColorMap, m_sheenColorMap);
2347 m_sheenColorMap = newSheenColorMap;
2348 emit sheenColorMapChanged(m_sheenColorMap);
2349 markDirty(SheenDirty);
2352float QQuick3DPrincipledMaterial::sheenRoughness()
const
2354 return m_sheenRoughness;
2357void QQuick3DPrincipledMaterial::setSheenRoughness(
float newSheenRoughness)
2359 newSheenRoughness = ensureNormalized(newSheenRoughness);
2360 if (qFuzzyCompare(m_sheenRoughness, newSheenRoughness))
2363 m_sheenRoughness = newSheenRoughness;
2364 emit sheenRoughnessChanged(m_sheenRoughness);
2365 markDirty(SheenDirty);
2368QQuick3DTexture *QQuick3DPrincipledMaterial::sheenRoughnessMap()
const
2370 return m_sheenRoughnessMap;
2373void QQuick3DPrincipledMaterial::setSheenRoughnessMap(QQuick3DTexture *newSheenRoughnessMap)
2375 if (m_sheenRoughnessMap == newSheenRoughnessMap)
2378 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DPrincipledMaterial::setSheenRoughnessMap, newSheenRoughnessMap, m_sheenRoughnessMap);
2380 m_sheenRoughnessMap = newSheenRoughnessMap;
2381 emit sheenRoughnessMapChanged(m_sheenRoughnessMap);
2382 markDirty(SheenDirty);
2385QQuick3DMaterial::TextureChannelMapping QQuick3DPrincipledMaterial::sheenRoughnessChannel()
const
2387 return m_sheenRoughnessChannel;
2390void QQuick3DPrincipledMaterial::setSheenRoughnessChannel(QQuick3DMaterial::TextureChannelMapping newSheenRoughnessChannel)
2392 if (m_sheenRoughnessChannel == newSheenRoughnessChannel)
2395 m_sheenRoughnessChannel = newSheenRoughnessChannel;
2396 emit sheenRoughnessChannelChanged(m_sheenRoughnessChannel);
2397 markDirty(SheenDirty);
2400float QQuick3DPrincipledMaterial::anisotropyStrength()
const
2402 return m_anisotropyStrength;
2405void QQuick3DPrincipledMaterial::setAnisotropyStrength(
float newAnisotropyStrength)
2407 newAnisotropyStrength = ensureNormalized(newAnisotropyStrength);
2408 if (qFuzzyCompare(m_anisotropyStrength, newAnisotropyStrength))
2411 m_anisotropyStrength = newAnisotropyStrength;
2412 emit anisotropyStrengthChanged(m_anisotropyStrength);
2413 markDirty(AnisotropyDirty);
2416float QQuick3DPrincipledMaterial::anisotropyRotation()
const
2418 return m_anisotropyRotation;
2421void QQuick3DPrincipledMaterial::setAnisotropyRotation(
float newAnisotropyRotation)
2423 if (qFuzzyCompare(m_anisotropyRotation, newAnisotropyRotation))
2427 m_anisotropyRotation = newAnisotropyRotation;
2428 emit anisotropyRotationChanged(m_anisotropyRotation);
2429 markDirty(AnisotropyDirty);
2432QQuick3DTexture *QQuick3DPrincipledMaterial::anisotropyMap()
const
2434 return m_anisotropyMap;
2437void QQuick3DPrincipledMaterial::setAnisotropyMap(QQuick3DTexture *newAnisotropyMap)
2439 if (m_anisotropyMap == newAnisotropyMap)
2442 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DPrincipledMaterial::setAnisotropyMap, newAnisotropyMap, m_anisotropyMap);
2444 m_anisotropyMap = newAnisotropyMap;
2445 emit anisotropyMapChanged(m_anisotropyMap);
2446 markDirty(AnisotropyDirty);
2449float QQuick3DPrincipledMaterial::iridescenceFactor()
const
2451 return m_iridescenceFactor;
2454void QQuick3DPrincipledMaterial::setIridescenceFactor(
float newIridescenceFactor)
2456 newIridescenceFactor = ensureNormalized(newIridescenceFactor);
2457 if (qFuzzyCompare(m_iridescenceFactor, newIridescenceFactor))
2460 m_iridescenceFactor = newIridescenceFactor;
2461 emit iridescenceFactorChanged(m_iridescenceFactor);
2462 markDirty(IridescenceDirty);
2465QQuick3DTexture *QQuick3DPrincipledMaterial::iridescenceMap()
const
2467 return m_iridescenceMap;
2470void QQuick3DPrincipledMaterial::setIridescenceMap(QQuick3DTexture *newIridescenceMap)
2472 if (m_iridescenceMap == newIridescenceMap)
2475 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DPrincipledMaterial::setIridescenceMap, newIridescenceMap, m_iridescenceMap);
2477 m_iridescenceMap = newIridescenceMap;
2478 emit iridescenceMapChanged(m_iridescenceMap);
2479 markDirty(IridescenceDirty);
2482QQuick3DMaterial::TextureChannelMapping QQuick3DPrincipledMaterial::iridescenceChannel()
const
2484 return m_iridescenceChannel;
2487void QQuick3DPrincipledMaterial::setIridescenceChannel(QQuick3DMaterial::TextureChannelMapping newIridescenceChannel)
2489 if (m_iridescenceChannel == newIridescenceChannel)
2492 m_iridescenceChannel = newIridescenceChannel;
2493 emit iridescenceChannelChanged(m_iridescenceChannel);
2494 markDirty(IridescenceDirty);
2497float QQuick3DPrincipledMaterial::iridescenceIndexOfRefraction()
const
2499 return m_iridescenceIndexOfRefraction;
2502void QQuick3DPrincipledMaterial::setIridescenceIndexOfRefraction(
float newIridescenceIndexOfRefraction)
2504 if (qFuzzyCompare(m_iridescenceIndexOfRefraction, newIridescenceIndexOfRefraction))
2507 m_iridescenceIndexOfRefraction = newIridescenceIndexOfRefraction;
2508 emit iridescenceIndexOfRefractionChanged(m_iridescenceIndexOfRefraction);
2509 markDirty(IridescenceDirty);
2512float QQuick3DPrincipledMaterial::iridescenceThicknessMinimum()
const
2514 return m_iridescenceThicknessMinimum;
2517void QQuick3DPrincipledMaterial::setIridescenceThicknessMinimum(
float newIridescenceThicknessMinimum)
2519 if (qFuzzyCompare(m_iridescenceThicknessMinimum, newIridescenceThicknessMinimum))
2522 m_iridescenceThicknessMinimum = newIridescenceThicknessMinimum;
2523 emit iridescenceThicknessMinimumChanged(m_iridescenceThicknessMinimum);
2524 markDirty(IridescenceDirty);
2527float QQuick3DPrincipledMaterial::iridescenceThicknessMaximum()
const
2529 return m_iridescenceThicknessMaximum;
2532void QQuick3DPrincipledMaterial::setIridescenceThicknessMaximum(
float newIridescenceThicknessMaximum)
2534 if (qFuzzyCompare(m_iridescenceThicknessMaximum, newIridescenceThicknessMaximum))
2537 m_iridescenceThicknessMaximum = newIridescenceThicknessMaximum;
2538 emit iridescenceThicknessMaximumChanged(m_iridescenceThicknessMaximum);
2539 markDirty(IridescenceDirty);
2542QQuick3DTexture *QQuick3DPrincipledMaterial::iridescenceThicknessMap()
const
2544 return m_iridescenceThicknessMap;
2547void QQuick3DPrincipledMaterial::setIridescenceThicknessMap(QQuick3DTexture *newIridescenceThicknessMap)
2549 if (m_iridescenceThicknessMap == newIridescenceThicknessMap)
2552 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DPrincipledMaterial::setIridescenceThicknessMap, newIridescenceThicknessMap, m_iridescenceThicknessMap);
2554 m_iridescenceThicknessMap = newIridescenceThicknessMap;
2555 emit iridescenceThicknessMapChanged(m_iridescenceThicknessMap);
2556 markDirty(IridescenceDirty);
2559QQuick3DMaterial::TextureChannelMapping QQuick3DPrincipledMaterial::iridescenceThicknessChannel()
const
2561 return m_iridescenceThicknessChannel;
2564void QQuick3DPrincipledMaterial::setIridescenceThicknessChannel(QQuick3DMaterial::TextureChannelMapping newIridescenceThicknessChannel)
2566 if (m_iridescenceThicknessChannel == newIridescenceThicknessChannel)
2569 m_iridescenceThicknessChannel = newIridescenceThicknessChannel;
2570 emit iridescenceThicknessChannelChanged(m_iridescenceThicknessChannel);
2571 markDirty(IridescenceDirty);
2574float QQuick3DPrincipledMaterial::dispersion()
const
2576 return m_dispersion;
2579void QQuick3DPrincipledMaterial::setDispersion(
float newDispersion)
2582 newDispersion = qMax(0.0f, newDispersion);
2583 if (qFuzzyCompare(m_dispersion, newDispersion))
2586 m_dispersion = newDispersion;
2587 emit dispersionChanged(m_dispersion);
2588 markDirty(DispersionDirty);
2591float QQuick3DPrincipledMaterial::transmissionFactor()
const
2593 return m_transmissionFactor;
2596void QQuick3DPrincipledMaterial::setTransmissionFactor(
float newTransmissionFactor)
2598 if (qFuzzyCompare(m_transmissionFactor, newTransmissionFactor))
2600 m_transmissionFactor = newTransmissionFactor;
2601 emit transmissionFactorChanged(m_transmissionFactor);
2602 markDirty(TransmissionDirty);
2605QQuick3DTexture *QQuick3DPrincipledMaterial::transmissionMap()
const
2607 return m_transmissionMap;
2610void QQuick3DPrincipledMaterial::setTransmissionMap(QQuick3DTexture *newTransmissionMap)
2612 if (m_transmissionMap == newTransmissionMap)
2615 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DPrincipledMaterial::setTransmissionMap, newTransmissionMap, m_transmissionMap);
2617 m_transmissionMap = newTransmissionMap;
2618 emit transmissionMapChanged(m_transmissionMap);
2619 markDirty(TransmissionDirty);
2622QQuick3DMaterial::TextureChannelMapping QQuick3DPrincipledMaterial::transmissionChannel()
const
2624 return m_transmissionChannel;
2627float QQuick3DPrincipledMaterial::indexOfRefraction()
const
2629 return m_indexOfRefraction;
2632bool QQuick3DPrincipledMaterial::fresnelScaleBiasEnabled()
const
2634 return m_fresnelScaleBiasEnabled;
2637float QQuick3DPrincipledMaterial::fresnelScale()
const
2639 return m_fresnelScale;
2642float QQuick3DPrincipledMaterial::fresnelBias()
const
2644 return m_fresnelBias;
2647float QQuick3DPrincipledMaterial::fresnelPower()
const
2649 return m_fresnelPower;
2652bool QQuick3DPrincipledMaterial::clearcoatFresnelScaleBiasEnabled()
const
2654 return m_clearcoatFresnelScaleBiasEnabled;
2657float QQuick3DPrincipledMaterial::clearcoatFresnelScale()
const
2659 return m_clearcoatFresnelScale;
2662float QQuick3DPrincipledMaterial::clearcoatFresnelBias()
const
2664 return m_clearcoatFresnelBias;
2667float QQuick3DPrincipledMaterial::clearcoatFresnelPower()
const
2669 return m_clearcoatFresnelPower;
2672bool QQuick3DPrincipledMaterial::vertexColorsEnabled()
const
2674 return m_vertexColorsEnabled;
2677void QQuick3DPrincipledMaterial::setTransmissionChannel(QQuick3DMaterial::TextureChannelMapping newTransmissionChannel)
2679 if (m_transmissionChannel == newTransmissionChannel)
2681 m_transmissionChannel = newTransmissionChannel;
2682 emit transmissionChannelChanged(m_transmissionChannel);
2683 markDirty(TransmissionDirty);
2686float QQuick3DPrincipledMaterial::thicknessFactor()
const
2688 return m_thicknessFactor;
2691void QQuick3DPrincipledMaterial::setThicknessFactor(
float newThicknessFactor)
2693 if (qFuzzyCompare(m_thicknessFactor, newThicknessFactor))
2695 m_thicknessFactor = newThicknessFactor;
2696 emit thicknessFactorChanged(m_thicknessFactor);
2697 markDirty(VolumeDirty);
2700QQuick3DTexture *QQuick3DPrincipledMaterial::thicknessMap()
const
2702 return m_thicknessMap;
2705void QQuick3DPrincipledMaterial::setThicknessMap(QQuick3DTexture *newThicknessMap)
2707 if (m_thicknessMap == newThicknessMap)
2710 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DPrincipledMaterial::setThicknessMap, newThicknessMap, m_thicknessMap);
2712 m_thicknessMap = newThicknessMap;
2713 emit thicknessMapChanged(m_thicknessMap);
2714 markDirty(VolumeDirty);
2717const QQuick3DMaterial::TextureChannelMapping &QQuick3DPrincipledMaterial::thicknessChannel()
const
2719 return m_thicknessChannel;
2722void QQuick3DPrincipledMaterial::setThicknessChannel(
const QQuick3DMaterial::TextureChannelMapping &newThicknessChannel)
2724 if (m_thicknessChannel == newThicknessChannel)
2726 m_thicknessChannel = newThicknessChannel;
2727 emit thicknessChannelChanged(m_thicknessChannel);
2728 markDirty(VolumeDirty);
2731float QQuick3DPrincipledMaterial::attenuationDistance()
const
2733 return m_attenuationDistance;
2736void QQuick3DPrincipledMaterial::setAttenuationDistance(
float newAttenuationDistance)
2738 if (qFuzzyCompare(m_attenuationDistance, newAttenuationDistance))
2740 m_attenuationDistance = newAttenuationDistance;
2741 emit attenuationDistanceChanged(m_attenuationDistance);
2742 markDirty(VolumeDirty);
2745const QColor &QQuick3DPrincipledMaterial::attenuationColor()
const
2747 return m_attenuationColor;
2750void QQuick3DPrincipledMaterial::setAttenuationColor(
const QColor &newAttenuationColor)
2752 if (m_attenuationColor == newAttenuationColor)
2754 m_attenuationColor = newAttenuationColor;
2755 emit attenuationColorChanged(m_attenuationColor);
2756 markDirty(VolumeDirty);
2759void QQuick3DPrincipledMaterial::setIndexOfRefraction(
float indexOfRefraction)
2761 if (qFuzzyCompare(m_indexOfRefraction, indexOfRefraction))
2764 m_indexOfRefraction = indexOfRefraction;
2765 emit indexOfRefractionChanged(m_indexOfRefraction);
2766 markDirty(SpecularDirty);
2769void QQuick3DPrincipledMaterial::setFresnelScaleBiasEnabled(
bool fresnelScaleBiasEnabled)
2771 if (m_fresnelScaleBiasEnabled == fresnelScaleBiasEnabled)
2774 m_fresnelScaleBiasEnabled = fresnelScaleBiasEnabled;
2775 emit fresnelScaleBiasEnabledChanged(m_fresnelScaleBiasEnabled);
2776 markDirty(SpecularDirty);
2779void QQuick3DPrincipledMaterial::setFresnelScale(
float fresnelScale)
2781 if (qFuzzyCompare(m_fresnelScale, fresnelScale))
2784 m_fresnelScale = fresnelScale;
2785 emit fresnelScaleChanged(m_fresnelScale);
2786 markDirty(SpecularDirty);
2789void QQuick3DPrincipledMaterial::setFresnelBias(
float fresnelBias)
2791 if (qFuzzyCompare(m_fresnelBias, fresnelBias))
2794 m_fresnelBias = fresnelBias;
2795 emit fresnelBiasChanged(m_fresnelBias);
2796 markDirty(SpecularDirty);
2799void QQuick3DPrincipledMaterial::setFresnelPower(
float fresnelPower)
2801 if (qFuzzyCompare(m_fresnelPower, fresnelPower))
2804 m_fresnelPower = fresnelPower;
2805 emit fresnelPowerChanged(m_fresnelPower);
2806 markDirty(SpecularDirty);
2809void QQuick3DPrincipledMaterial::setClearcoatFresnelScaleBiasEnabled(
bool clearcoatFresnelScaleBiasEnabled)
2811 if (m_clearcoatFresnelScaleBiasEnabled == clearcoatFresnelScaleBiasEnabled)
2814 m_clearcoatFresnelScaleBiasEnabled = clearcoatFresnelScaleBiasEnabled;
2815 emit clearcoatFresnelScaleBiasEnabledChanged(m_clearcoatFresnelScaleBiasEnabled);
2816 markDirty(ClearcoatDirty);
2819void QQuick3DPrincipledMaterial::setClearcoatFresnelScale(
float clearcoatFresnelScale)
2821 if (qFuzzyCompare(m_clearcoatFresnelScale, clearcoatFresnelScale))
2824 m_clearcoatFresnelScale = clearcoatFresnelScale;
2825 emit clearcoatFresnelScaleChanged(m_clearcoatFresnelScale);
2826 markDirty(ClearcoatDirty);
2829void QQuick3DPrincipledMaterial::setClearcoatFresnelBias(
float clearcoatFresnelBias)
2831 if (qFuzzyCompare(m_clearcoatFresnelBias, clearcoatFresnelBias))
2834 m_clearcoatFresnelBias = clearcoatFresnelBias;
2835 emit clearcoatFresnelBiasChanged(m_clearcoatFresnelBias);
2836 markDirty(ClearcoatDirty);
2839void QQuick3DPrincipledMaterial::setClearcoatFresnelPower(
float clearcoatFresnelPower)
2841 if (qFuzzyCompare(m_clearcoatFresnelPower, clearcoatFresnelPower))
2844 m_clearcoatFresnelPower = clearcoatFresnelPower;
2845 emit clearcoatFresnelPowerChanged(m_clearcoatFresnelPower);
2846 markDirty(ClearcoatDirty);
2849void QQuick3DPrincipledMaterial::setVertexColorsEnabled(
bool vertexColors)
2851 if (m_vertexColorsEnabled == vertexColors)
2854 m_vertexColorsEnabled = vertexColors;
2855 emit vertexColorsEnabledChanged(m_vertexColorsEnabled);
2856 markDirty(VertexColorsDirty);
2859bool QQuick3DPrincipledMaterial::vertexColorsMaskEnabled()
const
2861 return m_vertexColorsMaskEnabled;
2864void QQuick3DPrincipledMaterial::setVertexColorsMaskEnabled(
bool vertexColorsMaskEnabled)
2866 if (m_vertexColorsMaskEnabled == vertexColorsMaskEnabled)
2868 m_vertexColorsMaskEnabled = vertexColorsMaskEnabled;
2869 emit vertexColorsMaskEnabledChanged();
2870 markDirty(VertexColorsDirty);
2873QQuick3DPrincipledMaterial::VertexColorMaskFlags QQuick3DPrincipledMaterial::vertexColorRedMask()
const
2875 return m_vertexColorRedMask;
2878void QQuick3DPrincipledMaterial::setVertexColorRedMask(QQuick3DPrincipledMaterial::VertexColorMaskFlags vertexColorRedMask)
2880 if (m_vertexColorRedMask == vertexColorRedMask)
2882 m_vertexColorRedMask = vertexColorRedMask;
2883 emit vertexColorRedMaskChanged();
2884 markDirty(VertexColorsDirty);
2887QQuick3DPrincipledMaterial::VertexColorMaskFlags QQuick3DPrincipledMaterial::vertexColorGreenMask()
const
2889 return m_vertexColorGreenMask;
2892void QQuick3DPrincipledMaterial::setVertexColorGreenMask(QQuick3DPrincipledMaterial::VertexColorMaskFlags vertexColorGreenMask)
2894 if (m_vertexColorGreenMask == vertexColorGreenMask)
2896 m_vertexColorGreenMask = vertexColorGreenMask;
2897 emit vertexColorGreenMaskChanged();
2898 markDirty(VertexColorsDirty);
2901QQuick3DPrincipledMaterial::VertexColorMaskFlags QQuick3DPrincipledMaterial::vertexColorBlueMask()
const
2903 return m_vertexColorBlueMask;
2906void QQuick3DPrincipledMaterial::setVertexColorBlueMask(QQuick3DPrincipledMaterial::VertexColorMaskFlags vertexColorBlueMask)
2908 if (m_vertexColorBlueMask == vertexColorBlueMask)
2910 m_vertexColorBlueMask = vertexColorBlueMask;
2911 emit vertexColorBlueMaskChanged();
2912 markDirty(VertexColorsDirty);
2915QQuick3DPrincipledMaterial::VertexColorMaskFlags QQuick3DPrincipledMaterial::vertexColorAlphaMask()
const
2917 return m_vertexColorAlphaMask;
2920void QQuick3DPrincipledMaterial::setVertexColorAlphaMask(QQuick3DPrincipledMaterial::VertexColorMaskFlags vertexColorAlphaMask)
2922 if (m_vertexColorAlphaMask == vertexColorAlphaMask)
2924 m_vertexColorAlphaMask = vertexColorAlphaMask;
2925 emit vertexColorAlphaMaskChanged();
2926 markDirty(VertexColorsDirty);
Combined button and popup list for selecting options.