@@ -1311,8 +1311,8 @@ void LLToolDragAndDrop::dropMaterialOneFace(LLViewerObject* hit_obj,
13111311
13121312 if (tep && asset_id.notNull ())
13131313 {
1314- // Check if we have non-default texture transforms to preserve
1315- // First check GLTF material override, then fall back to texture entry
1314+ // Only preserve transforms from existing GLTF material override
1315+ // Do not fall back to texture entry transforms when switching between PBR materials
13161316 LLGLTFMaterial* existing_override = tep->getGLTFMaterialOverride ();
13171317 if (existing_override)
13181318 {
@@ -1324,50 +1324,48 @@ void LLToolDragAndDrop::dropMaterialOneFace(LLViewerObject* hit_obj,
13241324 existing_transform.mOffset != default_transform.mOffset ||
13251325 existing_transform.mRotation != default_transform.mRotation )
13261326 {
1327- // Read from existing GLTF material override
1328- existing_scale_s = existing_transform.mScale .mV [0 ];
1329- existing_scale_t = existing_transform.mScale .mV [1 ];
1330- existing_offset_s = existing_transform.mOffset .mV [0 ];
1331- existing_offset_t = existing_transform.mOffset .mV [1 ];
1332- existing_rotation = existing_transform.mRotation ;
1327+ // Preserve non-default transforms from current PBR material
1328+ preserved_override = new LLGLTFMaterial ();
1329+ for (U32 i = 0 ; i < LLGLTFMaterial::GLTF_TEXTURE_INFO_COUNT; ++i)
1330+ {
1331+ preserved_override->mTextureTransform [i].mScale = existing_transform.mScale ;
1332+ preserved_override->mTextureTransform [i].mOffset = existing_transform.mOffset ;
1333+ preserved_override->mTextureTransform [i].mRotation = existing_transform.mRotation ;
1334+ }
13331335 should_preserve_transforms = true ;
13341336 }
1335- else
1336- {
1337- // Existing override has default transforms, fall back to texture entry
1338- tep->getScale (&existing_scale_s, &existing_scale_t );
1339- tep->getOffset (&existing_offset_s, &existing_offset_t );
1340- existing_rotation = tep->getRotation ();
1341-
1342- should_preserve_transforms = (existing_scale_s != default_transform.mScale .mV [0 ] || existing_scale_t != default_transform.mScale .mV [1 ] ||
1343- existing_offset_s != default_transform.mOffset .mV [0 ] || existing_offset_t != default_transform.mOffset .mV [1 ] ||
1344- existing_rotation != default_transform.mRotation );
1345- }
1337+ // If existing override has default transforms, don't preserve anything
13461338 }
13471339 else
13481340 {
1349- // No existing override, check texture entry transforms
1341+ // No existing PBR material override - check texture entry transforms
1342+ // This handles the case of switching from Blinn-Phong to PBR material
1343+ F32 existing_scale_s, existing_scale_t , existing_offset_s, existing_offset_t , existing_rotation;
13501344 tep->getScale (&existing_scale_s, &existing_scale_t );
13511345 tep->getOffset (&existing_offset_s, &existing_offset_t );
13521346 existing_rotation = tep->getRotation ();
13531347
1354- // Only preserve if texture entry transforms are non-default
13551348 const LLGLTFMaterial::TextureTransform& default_transform = LLGLTFMaterial::TextureTransform ();
1356- should_preserve_transforms = (existing_scale_s != default_transform.mScale .mV [0 ] || existing_scale_t != default_transform.mScale .mV [1 ] ||
1357- existing_offset_s != default_transform.mOffset .mV [0 ] || existing_offset_t != default_transform.mOffset .mV [1 ] ||
1358- existing_rotation != default_transform.mRotation );
1359- }
1360-
1361- // Create override material with preserved transforms if needed
1362- if (should_preserve_transforms)
1363- {
1364- preserved_override = new LLGLTFMaterial ();
1365- // Transfer texture entry transforms to all PBR texture channels
1366- for (U32 i = 0 ; i < LLGLTFMaterial::GLTF_TEXTURE_INFO_COUNT; ++i)
1349+ if (existing_scale_s != default_transform.mScale .mV [0 ] || existing_scale_t != default_transform.mScale .mV [1 ] ||
1350+ existing_offset_s != default_transform.mOffset .mV [0 ] || existing_offset_t != default_transform.mOffset .mV [1 ] ||
1351+ existing_rotation != default_transform.mRotation )
13671352 {
1368- preserved_override->mTextureTransform [i].mScale .set (existing_scale_s, existing_scale_t );
1369- preserved_override->mTextureTransform [i].mOffset .set (existing_offset_s, existing_offset_t );
1370- preserved_override->mTextureTransform [i].mRotation = existing_rotation;
1353+ // Preserve non-default transforms from texture entry
1354+ preserved_override = new LLGLTFMaterial ();
1355+ for (U32 i = 0 ; i < LLGLTFMaterial::GLTF_TEXTURE_INFO_COUNT; ++i)
1356+ {
1357+ LLVector2 pbr_scale, pbr_offset;
1358+ F32 pbr_rotation;
1359+ LLGLTFMaterial::convertTextureTransformToPBR (
1360+ existing_scale_s, existing_scale_t ,
1361+ existing_offset_s, existing_offset_t ,
1362+ existing_rotation,
1363+ pbr_scale, pbr_offset, pbr_rotation);
1364+ preserved_override->mTextureTransform [i].mScale = pbr_scale;
1365+ preserved_override->mTextureTransform [i].mOffset = pbr_offset;
1366+ preserved_override->mTextureTransform [i].mRotation = pbr_rotation;
1367+ }
1368+ should_preserve_transforms = true ;
13711369 }
13721370 }
13731371 }
@@ -1455,7 +1453,36 @@ void LLToolDragAndDrop::dropMaterialAllFaces(LLViewerObject* hit_obj,
14551453 }
14561454 should_preserve = true ;
14571455 }
1458- // If existing override has default transforms, don't preserve anything
1456+ else
1457+ {
1458+ // Existing override has default transforms, fall back to texture entry
1459+ F32 existing_scale_s, existing_scale_t , existing_offset_s, existing_offset_t , existing_rotation;
1460+ tep->getScale (&existing_scale_s, &existing_scale_t );
1461+ tep->getOffset (&existing_offset_s, &existing_offset_t );
1462+ existing_rotation = tep->getRotation ();
1463+
1464+ if (existing_scale_s != default_transform.mScale .mV [0 ] || existing_scale_t != default_transform.mScale .mV [1 ] ||
1465+ existing_offset_s != default_transform.mOffset .mV [0 ] || existing_offset_t != default_transform.mOffset .mV [1 ] ||
1466+ existing_rotation != default_transform.mRotation )
1467+ {
1468+ // Preserve non-default transforms from texture entry
1469+ preserved_override = new LLGLTFMaterial ();
1470+ for (U32 i = 0 ; i < LLGLTFMaterial::GLTF_TEXTURE_INFO_COUNT; ++i)
1471+ {
1472+ LLVector2 pbr_scale, pbr_offset;
1473+ F32 pbr_rotation;
1474+ LLGLTFMaterial::convertTextureTransformToPBR (
1475+ existing_scale_s, existing_scale_t ,
1476+ existing_offset_s, existing_offset_t ,
1477+ existing_rotation,
1478+ pbr_scale, pbr_offset, pbr_rotation);
1479+ preserved_override->mTextureTransform [i].mScale = pbr_scale;
1480+ preserved_override->mTextureTransform [i].mOffset = pbr_offset;
1481+ preserved_override->mTextureTransform [i].mRotation = pbr_rotation;
1482+ }
1483+ should_preserve = true ;
1484+ }
1485+ }
14591486 }
14601487 else
14611488 {
@@ -1475,9 +1502,16 @@ void LLToolDragAndDrop::dropMaterialAllFaces(LLViewerObject* hit_obj,
14751502 preserved_override = new LLGLTFMaterial ();
14761503 for (U32 i = 0 ; i < LLGLTFMaterial::GLTF_TEXTURE_INFO_COUNT; ++i)
14771504 {
1478- preserved_override->mTextureTransform [i].mScale .set (existing_scale_s, existing_scale_t );
1479- preserved_override->mTextureTransform [i].mOffset .set (existing_offset_s, existing_offset_t );
1480- preserved_override->mTextureTransform [i].mRotation = existing_rotation;
1505+ LLVector2 pbr_scale, pbr_offset;
1506+ F32 pbr_rotation;
1507+ LLGLTFMaterial::convertTextureTransformToPBR (
1508+ existing_scale_s, existing_scale_t ,
1509+ existing_offset_s, existing_offset_t ,
1510+ existing_rotation,
1511+ pbr_scale, pbr_offset, pbr_rotation);
1512+ preserved_override->mTextureTransform [i].mScale = pbr_scale;
1513+ preserved_override->mTextureTransform [i].mOffset = pbr_offset;
1514+ preserved_override->mTextureTransform [i].mRotation = pbr_rotation;
14811515 }
14821516 should_preserve = true ;
14831517 }
0 commit comments