609void QQuick3DDefaultMaterial::setEmissiveMap(QQuick3DTexture *emissiveMap)
611 if (m_emissiveMap == emissiveMap)
614 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DDefaultMaterial::setEmissiveMap, emissiveMap, m_emissiveMap);
616 m_emissiveMap = emissiveMap;
617 emit emissiveMapChanged(m_emissiveMap);
618 markDirty(EmissiveDirty);
621void QQuick3DDefaultMaterial::setSpecularReflectionMap(QQuick3DTexture *specularReflectionMap)
623 if (m_specularReflectionMap == specularReflectionMap)
626 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DDefaultMaterial::setSpecularReflectionMap, specularReflectionMap, m_specularReflectionMap);
628 m_specularReflectionMap = specularReflectionMap;
629 emit specularReflectionMapChanged(m_specularReflectionMap);
630 markDirty(SpecularDirty);
633void QQuick3DDefaultMaterial::setSpecularMap(QQuick3DTexture *specularMap)
635 if (m_specularMap == specularMap)
638 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DDefaultMaterial::setSpecularMap, specularMap, m_specularMap);
640 m_specularMap = specularMap;
641 emit specularMapChanged(m_specularMap);
642 markDirty(SpecularDirty);
705void QQuick3DDefaultMaterial::setRoughnessMap(QQuick3DTexture *roughnessMap)
707 if (m_roughnessMap == roughnessMap)
710 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DDefaultMaterial::setRoughnessMap, roughnessMap, m_roughnessMap);
712 m_roughnessMap = roughnessMap;
713 emit roughnessMapChanged(m_roughnessMap);
714 markDirty(SpecularDirty);
779void QQuick3DDefaultMaterial::setTranslucencyMap(QQuick3DTexture *translucencyMap)
781 if (m_translucencyMap == translucencyMap)
784 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DDefaultMaterial::setTranslucencyMap, translucencyMap, m_translucencyMap);
786 m_translucencyMap = translucencyMap;
787 emit translucencyMapChanged(m_translucencyMap);
788 markDirty(TranslucencyDirty);
866QSSGRenderGraphObject *QQuick3DDefaultMaterial::updateSpatialNode(QSSGRenderGraphObject *node)
870 node =
new QSSGRenderDefaultMaterial(QSSGRenderGraphObject::Type::DefaultMaterial);
873 static const auto channelMapping = [](TextureChannelMapping mapping) {
874 return QSSGRenderDefaultMaterial::TextureChannelMapping(mapping);
878 QQuick3DMaterial::updateSpatialNode(node);
880 QSSGRenderDefaultMaterial *material =
static_cast<QSSGRenderDefaultMaterial *>(node);
882 if (m_dirtyAttributes & LightingModeDirty) {
883 material->lighting = QSSGRenderDefaultMaterial::MaterialLighting(m_lighting);
885 m_dirtyAttributes |= EmissiveDirty;
888 if (m_dirtyAttributes & BlendModeDirty)
889 material->blendMode = QSSGRenderDefaultMaterial::MaterialBlendMode(m_blendMode);
891 if (m_dirtyAttributes & DiffuseDirty) {
892 material->color = QSSGUtils::color::sRGBToLinear(m_diffuseColor);
894 material->colorMap =
nullptr;
896 material->colorMap = m_diffuseMap->getRenderImage();
898 material->diffuseLightWrap = m_diffuseLightWrap;
899 material->diffuseModel = QSSGRenderDefaultMaterial::MaterialDiffuseModel::Lambert;
902 if (m_dirtyAttributes & EmissiveDirty) {
904 material->emissiveMap =
nullptr;
906 material->emissiveMap = m_emissiveMap->getRenderImage();
908 material->emissiveColor = m_emissiveFactor;
911 if (m_dirtyAttributes & SpecularDirty) {
912 if (!m_specularReflectionMap)
913 material->specularReflection =
nullptr;
915 material->specularReflection = m_specularReflectionMap->getRenderImage();
918 material->specularMap =
nullptr;
920 material->specularMap = m_specularMap->getRenderImage();
922 material->specularModel = QSSGRenderDefaultMaterial::MaterialSpecularModel(m_specularModel);
923 material->specularTint = QSSGUtils::color::sRGBToLinear(m_specularTint).toVector3D();
924 material->ior = m_indexOfRefraction;
925 material->fresnelPower = m_fresnelPower;
926 material->specularAmount = m_specularAmount;
927 material->specularRoughness = m_specularRoughness;
928 material->roughnessChannel = channelMapping(m_roughnessChannel);
931 material->roughnessMap =
nullptr;
933 material->roughnessMap = m_roughnessMap->getRenderImage();
936 if (m_dirtyAttributes & OpacityDirty) {
937 material->opacity = m_opacity;
938 material->opacityChannel = channelMapping(m_opacityChannel);
940 material->opacityMap =
nullptr;
942 material->opacityMap = m_opacityMap->getRenderImage();
945 if (m_dirtyAttributes & BumpDirty) {
947 material->bumpMap =
nullptr;
949 material->bumpMap = m_bumpMap->getRenderImage();
950 material->bumpAmount = m_bumpAmount;
953 if (m_dirtyAttributes & NormalDirty) {
955 material->normalMap =
nullptr;
957 material->normalMap = m_normalMap->getRenderImage();
960 if (m_dirtyAttributes & TranslucencyDirty) {
961 if (!m_translucencyMap)
962 material->translucencyMap =
nullptr;
964 material->translucencyMap = m_translucencyMap->getRenderImage();
965 material->translucentFalloff = m_translucentFalloff;
966 material->translucencyChannel = channelMapping(m_translucencyChannel);
969 if (m_dirtyAttributes & VertexColorsDirty)
970 material->vertexColorsEnabled = m_vertexColorsEnabled;
972 if (m_dirtyAttributes & PointSizeDirty)
973 material->pointSize = m_pointSize;
975 if (m_dirtyAttributes & LineWidthDirty)
976 material->lineWidth = m_lineWidth;
978 m_dirtyAttributes = 0;