diff options
Diffstat (limited to 'indra/newview')
-rw-r--r-- | indra/newview/lltooldraganddrop.cpp | 54 |
1 files changed, 49 insertions, 5 deletions
diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index 3f45d4f0da..5c4f7f75bf 100644 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -1047,6 +1047,20 @@ void LLToolDragAndDrop::dropTextureAllFaces(LLViewerObject* hit_obj, LL_WARNS() << "LLToolDragAndDrop::dropTextureAllFaces no texture item." << LL_ENDL; return; } + S32 num_faces = hit_obj->getNumTEs(); + bool has_non_pbr_faces = false; + for (S32 face = 0; face < num_faces; face++) + { + if (hit_obj->getRenderMaterialID(face).isNull()) + { + has_non_pbr_faces = true; + break; + } + } + if (!has_non_pbr_faces) + { + return; + } LLUUID asset_id = item->getAssetUUID(); BOOL success = handleDropMaterialProtections(hit_obj, item, source, src_id); if (!success) @@ -1055,13 +1069,14 @@ void LLToolDragAndDrop::dropTextureAllFaces(LLViewerObject* hit_obj, } LLViewerTexture* image = LLViewerTextureManager::getFetchedTexture(asset_id); add(LLStatViewer::EDIT_TEXTURE, 1); - S32 num_faces = hit_obj->getNumTEs(); for( S32 face = 0; face < num_faces; face++ ) { - - // update viewer side image in anticipation of update from simulator - hit_obj->setTEImage(face, image); - dialog_refresh_all(); + if (hit_obj->getRenderMaterialID(face).isNull()) + { + // update viewer side image in anticipation of update from simulator + hit_obj->setTEImage(face, image); + dialog_refresh_all(); + } } // send the update to the simulator hit_obj->sendTEUpdate(); @@ -1167,6 +1182,10 @@ void LLToolDragAndDrop::dropTextureOneFace(LLViewerObject* hit_obj, LL_WARNS() << "LLToolDragAndDrop::dropTextureOneFace no texture item." << LL_ENDL; return; } + if (hit_obj->getRenderMaterialID(hit_face).notNull()) + { + return; + } LLUUID asset_id = item->getAssetUUID(); BOOL success = handleDropMaterialProtections(hit_obj, item, source, src_id); if (!success) @@ -2032,6 +2051,31 @@ EAcceptance LLToolDragAndDrop::dad3dApplyToObject( return ACCEPT_NO; } + if (cargo_type == DAD_TEXTURE) + { + if ((mask & MASK_SHIFT)) + { + S32 num_faces = obj->getNumTEs(); + bool has_non_pbr_faces = false; + for (S32 face = 0; face < num_faces; face++) + { + if (obj->getRenderMaterialID(face).isNull()) + { + has_non_pbr_faces = true; + break; + } + } + if (!has_non_pbr_faces) + { + return ACCEPT_NO; + } + } + else if (obj->getRenderMaterialID(face).notNull()) + { + return ACCEPT_NO; + } + } + if(drop && (ACCEPT_YES_SINGLE <= rv)) { if (cargo_type == DAD_TEXTURE) |