607void QQuick3DDefaultMaterial::setEmissiveMap(QQuick3DTexture *emissiveMap)
609 if (m_emissiveMap == emissiveMap)
612 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DDefaultMaterial::setEmissiveMap, emissiveMap, m_emissiveMap);
614 m_emissiveMap = emissiveMap;
615 emit emissiveMapChanged(m_emissiveMap);
616 markDirty(EmissiveDirty);
619void QQuick3DDefaultMaterial::setSpecularReflectionMap(QQuick3DTexture *specularReflectionMap)
621 if (m_specularReflectionMap == specularReflectionMap)
624 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DDefaultMaterial::setSpecularReflectionMap, specularReflectionMap, m_specularReflectionMap);
626 m_specularReflectionMap = specularReflectionMap;
627 emit specularReflectionMapChanged(m_specularReflectionMap);
628 markDirty(SpecularDirty);
631void QQuick3DDefaultMaterial::setSpecularMap(QQuick3DTexture *specularMap)
633 if (m_specularMap == specularMap)
636 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DDefaultMaterial::setSpecularMap, specularMap, m_specularMap);
638 m_specularMap = specularMap;
639 emit specularMapChanged(m_specularMap);
640 markDirty(SpecularDirty);
703void QQuick3DDefaultMaterial::setRoughnessMap(QQuick3DTexture *roughnessMap)
705 if (m_roughnessMap == roughnessMap)
708 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DDefaultMaterial::setRoughnessMap, roughnessMap, m_roughnessMap);
710 m_roughnessMap = roughnessMap;
711 emit roughnessMapChanged(m_roughnessMap);
712 markDirty(SpecularDirty);
777void QQuick3DDefaultMaterial::setTranslucencyMap(QQuick3DTexture *translucencyMap)
779 if (m_translucencyMap == translucencyMap)
782 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DDefaultMaterial::setTranslucencyMap, translucencyMap, m_translucencyMap);
784 m_translucencyMap = translucencyMap;
785 emit translucencyMapChanged(m_translucencyMap);
786 markDirty(TranslucencyDirty);
864QSSGRenderGraphObject *QQuick3DDefaultMaterial::updateSpatialNode(QSSGRenderGraphObject *node)
868 node =
new QSSGRenderDefaultMaterial(QSSGRenderGraphObject::Type::DefaultMaterial);
871 static const auto channelMapping = [](TextureChannelMapping mapping) {
872 return QSSGRenderDefaultMaterial::TextureChannelMapping(mapping);
876 QQuick3DMaterial::updateSpatialNode(node);
878 QSSGRenderDefaultMaterial *material =
static_cast<QSSGRenderDefaultMaterial *>(node);
880 if (m_dirtyAttributes & LightingModeDirty) {
881 material->lighting = QSSGRenderDefaultMaterial::MaterialLighting(m_lighting);
883 m_dirtyAttributes |= EmissiveDirty;
886 if (m_dirtyAttributes & BlendModeDirty)
887 material->blendMode = QSSGRenderDefaultMaterial::MaterialBlendMode(m_blendMode);
889 if (m_dirtyAttributes & DiffuseDirty) {
890 material->color = QSSGUtils::color::sRGBToLinear(m_diffuseColor);
892 material->colorMap =
nullptr;
894 material->colorMap = m_diffuseMap->getRenderImage();
896 material->diffuseLightWrap = m_diffuseLightWrap;
897 material->diffuseModel = QSSGRenderDefaultMaterial::MaterialDiffuseModel::Lambert;
900 if (m_dirtyAttributes & EmissiveDirty) {
902 material->emissiveMap =
nullptr;
904 material->emissiveMap = m_emissiveMap->getRenderImage();
906 material->emissiveColor = m_emissiveFactor;
909 if (m_dirtyAttributes & SpecularDirty) {
910 if (!m_specularReflectionMap)
911 material->specularReflection =
nullptr;
913 material->specularReflection = m_specularReflectionMap->getRenderImage();
916 material->specularMap =
nullptr;
918 material->specularMap = m_specularMap->getRenderImage();
920 material->specularModel = QSSGRenderDefaultMaterial::MaterialSpecularModel(m_specularModel);
921 material->specularTint = QSSGUtils::color::sRGBToLinear(m_specularTint).toVector3D();
922 material->ior = m_indexOfRefraction;
923 material->fresnelPower = m_fresnelPower;
924 material->specularAmount = m_specularAmount;
925 material->specularRoughness = m_specularRoughness;
926 material->roughnessChannel = channelMapping(m_roughnessChannel);
929 material->roughnessMap =
nullptr;
931 material->roughnessMap = m_roughnessMap->getRenderImage();
934 if (m_dirtyAttributes & OpacityDirty) {
935 material->opacity = m_opacity;
936 material->opacityChannel = channelMapping(m_opacityChannel);
938 material->opacityMap =
nullptr;
940 material->opacityMap = m_opacityMap->getRenderImage();
943 if (m_dirtyAttributes & BumpDirty) {
945 material->bumpMap =
nullptr;
947 material->bumpMap = m_bumpMap->getRenderImage();
948 material->bumpAmount = m_bumpAmount;
951 if (m_dirtyAttributes & NormalDirty) {
953 material->normalMap =
nullptr;
955 material->normalMap = m_normalMap->getRenderImage();
958 if (m_dirtyAttributes & TranslucencyDirty) {
959 if (!m_translucencyMap)
960 material->translucencyMap =
nullptr;
962 material->translucencyMap = m_translucencyMap->getRenderImage();
963 material->translucentFalloff = m_translucentFalloff;
964 material->translucencyChannel = channelMapping(m_translucencyChannel);
967 if (m_dirtyAttributes & VertexColorsDirty)
968 material->vertexColorsEnabled = m_vertexColorsEnabled;
970 if (m_dirtyAttributes & PointSizeDirty)
971 material->pointSize = m_pointSize;
973 if (m_dirtyAttributes & LineWidthDirty)
974 material->lineWidth = m_lineWidth;
976 m_dirtyAttributes = 0;