@@ -1311,8 +1311,8 @@ void LLToolDragAndDrop::dropMaterialOneFace(LLViewerObject* hit_obj,
1311
1311
1312
1312
if (tep && asset_id.notNull ())
1313
1313
{
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
1316
1316
LLGLTFMaterial* existing_override = tep->getGLTFMaterialOverride ();
1317
1317
if (existing_override)
1318
1318
{
@@ -1324,50 +1324,48 @@ void LLToolDragAndDrop::dropMaterialOneFace(LLViewerObject* hit_obj,
1324
1324
existing_transform.mOffset != default_transform.mOffset ||
1325
1325
existing_transform.mRotation != default_transform.mRotation )
1326
1326
{
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
+ }
1333
1335
should_preserve_transforms = true ;
1334
1336
}
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
1346
1338
}
1347
1339
else
1348
1340
{
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;
1350
1344
tep->getScale (&existing_scale_s, &existing_scale_t );
1351
1345
tep->getOffset (&existing_offset_s, &existing_offset_t );
1352
1346
existing_rotation = tep->getRotation ();
1353
1347
1354
- // Only preserve if texture entry transforms are non-default
1355
1348
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 )
1367
1352
{
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 ;
1371
1369
}
1372
1370
}
1373
1371
}
@@ -1455,7 +1453,36 @@ void LLToolDragAndDrop::dropMaterialAllFaces(LLViewerObject* hit_obj,
1455
1453
}
1456
1454
should_preserve = true ;
1457
1455
}
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
+ }
1459
1486
}
1460
1487
else
1461
1488
{
@@ -1475,9 +1502,16 @@ void LLToolDragAndDrop::dropMaterialAllFaces(LLViewerObject* hit_obj,
1475
1502
preserved_override = new LLGLTFMaterial ();
1476
1503
for (U32 i = 0 ; i < LLGLTFMaterial::GLTF_TEXTURE_INFO_COUNT; ++i)
1477
1504
{
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;
1481
1515
}
1482
1516
should_preserve = true ;
1483
1517
}
0 commit comments