SL-20523 Local textures not updating on PBR Materials #1
Update editor in which texture changed to localmeow-7.2.2
parent
89e4e6993f
commit
dc63dfc0dd
|
|
@ -222,6 +222,10 @@ public:
|
|||
virtual void addTextureEntry(LLTextureEntry* te) {};
|
||||
virtual void removeTextureEntry(LLTextureEntry* te) {};
|
||||
|
||||
// For local textures so that editor will know to track changes
|
||||
void setHasLocalTextures(bool val) { mHasLocalTextures = val; }
|
||||
bool hasLocalTextures() { return mHasLocalTextures; }
|
||||
|
||||
protected:
|
||||
static LLVector2 vec2FromJson(const std::map<std::string, tinygltf::Value>& object, const char* key, const LLVector2& default_value);
|
||||
static F32 floatFromJson(const std::map<std::string, tinygltf::Value>& object, const char* key, const F32 default_value);
|
||||
|
|
@ -238,4 +242,6 @@ protected:
|
|||
void writeToTexture(tinygltf::Model& model, T& texture_info, TextureInfo texture_info_id, bool force_write = false) const;
|
||||
template<typename T>
|
||||
static void writeToTexture(tinygltf::Model& model, T& texture_info, const LLUUID& texture_id, const TextureTransform& transform, bool force_write = false);
|
||||
|
||||
bool mHasLocalTextures;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -760,7 +760,7 @@ void LLFloaterChangeItemThumbnail::showTexturePicker(const LLUUID &thumbnail_id)
|
|||
{
|
||||
//texture_floaterp->setTextureSelectedCallback();
|
||||
//texture_floaterp->setOnUpdateImageStatsCallback();
|
||||
texture_floaterp->setOnFloaterCommitCallback([this](LLTextureCtrl::ETexturePickOp op, LLPickerSource, const LLUUID&, const LLUUID&)
|
||||
texture_floaterp->setOnFloaterCommitCallback([this](LLTextureCtrl::ETexturePickOp op, LLPickerSource, const LLUUID&, const LLUUID&, const LLUUID&)
|
||||
{
|
||||
if (op == LLTextureCtrl::TEXTURE_SELECT)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -142,27 +142,27 @@ LLLocalBitmap::~LLLocalBitmap()
|
|||
}
|
||||
|
||||
/* accessors */
|
||||
std::string LLLocalBitmap::getFilename()
|
||||
std::string LLLocalBitmap::getFilename() const
|
||||
{
|
||||
return mFilename;
|
||||
}
|
||||
|
||||
std::string LLLocalBitmap::getShortName()
|
||||
std::string LLLocalBitmap::getShortName() const
|
||||
{
|
||||
return mShortName;
|
||||
}
|
||||
|
||||
LLUUID LLLocalBitmap::getTrackingID()
|
||||
LLUUID LLLocalBitmap::getTrackingID() const
|
||||
{
|
||||
return mTrackingID;
|
||||
}
|
||||
|
||||
LLUUID LLLocalBitmap::getWorldID()
|
||||
LLUUID LLLocalBitmap::getWorldID() const
|
||||
{
|
||||
return mWorldID;
|
||||
}
|
||||
|
||||
bool LLLocalBitmap::getValid()
|
||||
bool LLLocalBitmap::getValid() const
|
||||
{
|
||||
return mValid;
|
||||
}
|
||||
|
|
@ -273,6 +273,11 @@ bool LLLocalBitmap::updateSelf(EUpdateType optional_firstupdate)
|
|||
return updated;
|
||||
}
|
||||
|
||||
boost::signals2::connection LLLocalBitmap::setChangedCallback(const LLLocalTextureCallback& cb)
|
||||
{
|
||||
return mChangedSignal.connect(cb);
|
||||
}
|
||||
|
||||
bool LLLocalBitmap::decodeBitmap(LLPointer<LLImageRaw> rawimg)
|
||||
{
|
||||
bool decode_successful = false;
|
||||
|
|
@ -340,7 +345,7 @@ bool LLLocalBitmap::decodeBitmap(LLPointer<LLImageRaw> rawimg)
|
|||
return decode_successful;
|
||||
}
|
||||
|
||||
void LLLocalBitmap::replaceIDs(LLUUID old_id, LLUUID new_id)
|
||||
void LLLocalBitmap::replaceIDs(const LLUUID& old_id, LLUUID new_id)
|
||||
{
|
||||
// checking for misuse.
|
||||
if (old_id == new_id)
|
||||
|
|
@ -350,6 +355,8 @@ void LLLocalBitmap::replaceIDs(LLUUID old_id, LLUUID new_id)
|
|||
return;
|
||||
}
|
||||
|
||||
mChangedSignal(old_id, new_id);
|
||||
|
||||
// processing updates per channel; makes the process scalable.
|
||||
// the only actual difference is in SetTE* call i.e. SetTETexture, SetTENormal, etc.
|
||||
updateUserPrims(old_id, new_id, LLRender::DIFFUSE_MAP);
|
||||
|
|
@ -381,6 +388,9 @@ void LLLocalBitmap::replaceIDs(LLUUID old_id, LLUUID new_id)
|
|||
updateUserLayers(old_id, new_id, LLWearableType::WT_UNIVERSAL);
|
||||
updateUserLayers(old_id, new_id, LLWearableType::WT_UNDERPANTS);
|
||||
updateUserLayers(old_id, new_id, LLWearableType::WT_UNDERSHIRT);
|
||||
|
||||
// Go over any local material
|
||||
|
||||
}
|
||||
|
||||
// this function sorts the faces from a getFaceList[getNumFaces] into a list of objects
|
||||
|
|
@ -1020,11 +1030,11 @@ void LLLocalBitmapMgr::delUnit(LLUUID tracking_id)
|
|||
}
|
||||
}
|
||||
|
||||
LLUUID LLLocalBitmapMgr::getWorldID(LLUUID tracking_id)
|
||||
LLUUID LLLocalBitmapMgr::getWorldID(const LLUUID &tracking_id) const
|
||||
{
|
||||
LLUUID world_id = LLUUID::null;
|
||||
|
||||
for (local_list_iter iter = mBitmapList.begin(); iter != mBitmapList.end(); iter++)
|
||||
for (local_list_citer iter = mBitmapList.begin(); iter != mBitmapList.end(); iter++)
|
||||
{
|
||||
LLLocalBitmap* unit = *iter;
|
||||
if (unit->getTrackingID() == tracking_id)
|
||||
|
|
@ -1036,9 +1046,9 @@ LLUUID LLLocalBitmapMgr::getWorldID(LLUUID tracking_id)
|
|||
return world_id;
|
||||
}
|
||||
|
||||
bool LLLocalBitmapMgr::isLocal(const LLUUID world_id)
|
||||
bool LLLocalBitmapMgr::isLocal(const LLUUID &world_id) const
|
||||
{
|
||||
for (local_list_iter iter = mBitmapList.begin(); iter != mBitmapList.end(); iter++)
|
||||
for (local_list_citer iter = mBitmapList.begin(); iter != mBitmapList.end(); iter++)
|
||||
{
|
||||
LLLocalBitmap* unit = *iter;
|
||||
if (unit->getWorldID() == world_id)
|
||||
|
|
@ -1049,11 +1059,11 @@ bool LLLocalBitmapMgr::isLocal(const LLUUID world_id)
|
|||
return false;
|
||||
}
|
||||
|
||||
std::string LLLocalBitmapMgr::getFilename(LLUUID tracking_id)
|
||||
std::string LLLocalBitmapMgr::getFilename(const LLUUID &tracking_id) const
|
||||
{
|
||||
std::string filename = "";
|
||||
|
||||
for (local_list_iter iter = mBitmapList.begin(); iter != mBitmapList.end(); iter++)
|
||||
for (local_list_citer iter = mBitmapList.begin(); iter != mBitmapList.end(); iter++)
|
||||
{
|
||||
LLLocalBitmap* unit = *iter;
|
||||
if (unit->getTrackingID() == tracking_id)
|
||||
|
|
@ -1065,6 +1075,20 @@ std::string LLLocalBitmapMgr::getFilename(LLUUID tracking_id)
|
|||
return filename;
|
||||
}
|
||||
|
||||
boost::signals2::connection LLLocalBitmapMgr::setOnChangedCallback(const LLUUID tracking_id, const LLLocalBitmap::LLLocalTextureCallback &cb)
|
||||
{
|
||||
for (local_list_iter iter = mBitmapList.begin(); iter != mBitmapList.end(); iter++)
|
||||
{
|
||||
LLLocalBitmap* unit = *iter;
|
||||
if (unit->getTrackingID() == tracking_id)
|
||||
{
|
||||
unit->setChangedCallback(cb);
|
||||
}
|
||||
}
|
||||
|
||||
return boost::signals2::connection();
|
||||
}
|
||||
|
||||
void LLLocalBitmapMgr::feedScrollList(LLScrollListCtrl* ctrl)
|
||||
{
|
||||
if (ctrl)
|
||||
|
|
|
|||
|
|
@ -44,11 +44,11 @@ class LLLocalBitmap
|
|||
~LLLocalBitmap();
|
||||
|
||||
public: /* accessors */
|
||||
std::string getFilename();
|
||||
std::string getShortName();
|
||||
LLUUID getTrackingID();
|
||||
LLUUID getWorldID();
|
||||
bool getValid();
|
||||
std::string getFilename() const;
|
||||
std::string getShortName() const;
|
||||
LLUUID getTrackingID() const;
|
||||
LLUUID getWorldID() const;
|
||||
bool getValid() const;
|
||||
|
||||
public: /* self update public section */
|
||||
enum EUpdateType
|
||||
|
|
@ -59,9 +59,14 @@ class LLLocalBitmap
|
|||
|
||||
bool updateSelf(EUpdateType = UT_REGUPDATE);
|
||||
|
||||
typedef boost::signals2::signal<void(const LLUUID& old_id,
|
||||
const LLUUID& new_id)> LLLocalTextureChangedSignal;
|
||||
typedef LLLocalTextureChangedSignal::slot_type LLLocalTextureCallback;
|
||||
boost::signals2::connection setChangedCallback(const LLLocalTextureCallback& cb);
|
||||
|
||||
private: /* self update private section */
|
||||
bool decodeBitmap(LLPointer<LLImageRaw> raw);
|
||||
void replaceIDs(LLUUID old_id, LLUUID new_id);
|
||||
void replaceIDs(const LLUUID &old_id, LLUUID new_id);
|
||||
std::vector<LLViewerObject*> prepUpdateObjects(LLUUID old_id, U32 channel);
|
||||
void updateUserPrims(LLUUID old_id, LLUUID new_id, U32 channel);
|
||||
void updateUserVolumes(LLUUID old_id, LLUUID new_id, U32 channel);
|
||||
|
|
@ -93,6 +98,7 @@ class LLLocalBitmap
|
|||
EExtension mExtension;
|
||||
ELinkStatus mLinkStatus;
|
||||
S32 mUpdateRetries;
|
||||
LLLocalTextureChangedSignal mChangedSignal;
|
||||
|
||||
};
|
||||
|
||||
|
|
@ -120,10 +126,11 @@ public:
|
|||
void delUnit(LLUUID tracking_id);
|
||||
bool checkTextureDimensions(std::string filename);
|
||||
|
||||
LLUUID getWorldID(LLUUID tracking_id);
|
||||
bool isLocal(LLUUID world_id);
|
||||
std::string getFilename(LLUUID tracking_id);
|
||||
|
||||
LLUUID getWorldID(const LLUUID &tracking_id) const;
|
||||
bool isLocal(const LLUUID& world_id) const;
|
||||
std::string getFilename(const LLUUID &tracking_id) const;
|
||||
boost::signals2::connection setOnChangedCallback(const LLUUID tracking_id, const LLLocalBitmap::LLLocalTextureCallback& cb);
|
||||
|
||||
void feedScrollList(LLScrollListCtrl* ctrl);
|
||||
void doUpdates();
|
||||
void setNeedsRebake();
|
||||
|
|
@ -134,6 +141,7 @@ private:
|
|||
LLLocalBitmapTimer mTimer;
|
||||
bool mNeedsRebake;
|
||||
typedef std::list<LLLocalBitmap*>::iterator local_list_iter;
|
||||
typedef std::list<LLLocalBitmap*>::const_iterator local_list_citer;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -532,6 +532,11 @@ void LLMaterialEditor::onClose(bool app_quitting)
|
|||
mSelectionUpdateSlot.disconnect();
|
||||
}
|
||||
|
||||
for (boost::signals2::connection& cn : mTextureChangesUpdates)
|
||||
{
|
||||
cn.disconnect();
|
||||
}
|
||||
|
||||
LLPreview::onClose(app_quitting);
|
||||
}
|
||||
|
||||
|
|
@ -861,6 +866,47 @@ void LLMaterialEditor::setEnableEditing(bool can_modify)
|
|||
mNormalTextureCtrl->setEnabled(can_modify);
|
||||
}
|
||||
|
||||
void LLMaterialEditor::replaceTexture(const LLUUID& old_id, const LLUUID& new_id)
|
||||
{
|
||||
// todo: might be a good idea to set mBaseColorTextureUploadId here
|
||||
// and when texturectrl picks a local texture
|
||||
if (getBaseColorId() == old_id)
|
||||
{
|
||||
mBaseColorTextureCtrl->setValue(new_id);
|
||||
}
|
||||
if (mBaseColorTextureCtrl->getDefaultImageAssetID() == old_id)
|
||||
{
|
||||
mBaseColorTextureCtrl->setDefaultImageAssetID(new_id);
|
||||
}
|
||||
|
||||
if (getMetallicRoughnessId() == old_id)
|
||||
{
|
||||
mMetallicTextureCtrl->setValue(new_id);
|
||||
}
|
||||
if (mMetallicTextureCtrl->getDefaultImageAssetID() == old_id)
|
||||
{
|
||||
mMetallicTextureCtrl->setDefaultImageAssetID(new_id);
|
||||
}
|
||||
|
||||
if (getEmissiveId() == old_id)
|
||||
{
|
||||
mEmissiveTextureCtrl->setValue(new_id);
|
||||
}
|
||||
if (mEmissiveTextureCtrl->getDefaultImageAssetID() == old_id)
|
||||
{
|
||||
mEmissiveTextureCtrl->setDefaultImageAssetID(new_id);
|
||||
}
|
||||
|
||||
if (getNormalId() == old_id)
|
||||
{
|
||||
mNormalTextureCtrl->setValue(new_id);
|
||||
}
|
||||
if (mNormalTextureCtrl->getDefaultImageAssetID() == old_id)
|
||||
{
|
||||
mNormalTextureCtrl->setDefaultImageAssetID(new_id);
|
||||
}
|
||||
}
|
||||
|
||||
void LLMaterialEditor::onCommitTexture(LLUICtrl* ctrl, const LLSD& data, S32 dirty_flag)
|
||||
{
|
||||
if (!mIsOverride)
|
||||
|
|
@ -911,6 +957,20 @@ void LLMaterialEditor::onCommitTexture(LLUICtrl* ctrl, const LLSD& data, S32 dir
|
|||
// the texture that is not in use
|
||||
childSetValue(upload_fee_ctrl_name, getString("no_upload_fee_string"));
|
||||
}
|
||||
|
||||
LLTextureCtrl* tex_ctrl = (LLTextureCtrl*)ctrl;
|
||||
if (tex_ctrl->isImageLocal())
|
||||
{
|
||||
// Theoretically LLSD should be smart enough to not need this, but for extra safety
|
||||
LLSD key = llsd_clone(getKey());
|
||||
// Subscribe material editor to local texture updates
|
||||
mTextureChangesUpdates.push_back(
|
||||
LLLocalBitmapMgr::getInstance()->setOnChangedCallback(tex_ctrl->getLocalTrackingID(),
|
||||
[this](const LLUUID &old_id, const LLUUID& new_id)
|
||||
{
|
||||
replaceTexture(old_id, new_id);
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
markChangesUnsaved(dirty_flag);
|
||||
|
|
@ -923,6 +983,17 @@ void LLMaterialEditor::onCancelCtrl(LLUICtrl* ctrl, const LLSD& data, S32 dirty_
|
|||
applyToSelection();
|
||||
}
|
||||
|
||||
void update_local_texture(LLUICtrl* ctrl, LLGLTFMaterial* mat)
|
||||
{
|
||||
LLTextureCtrl* tex_ctrl = (LLTextureCtrl*)ctrl;
|
||||
if (tex_ctrl->isImageLocal())
|
||||
{
|
||||
mat->setHasLocalTextures(true);
|
||||
// Todo: subscrive material for an update
|
||||
// tex_ctrl->getLocalTrackingID();
|
||||
}
|
||||
}
|
||||
|
||||
void LLMaterialEditor::onSelectCtrl(LLUICtrl* ctrl, const LLSD& data, S32 dirty_flag)
|
||||
{
|
||||
mUnsavedChanges |= dirty_flag;
|
||||
|
|
@ -958,21 +1029,25 @@ void LLMaterialEditor::onSelectCtrl(LLUICtrl* ctrl, const LLSD& data, S32 dirty_
|
|||
case MATERIAL_BASE_COLOR_TEX_DIRTY:
|
||||
{
|
||||
nodep->mSavedGLTFOverrideMaterials[te]->setBaseColorId(mCtrl->getValue().asUUID(), true);
|
||||
update_local_texture(mCtrl, nodep->mSavedGLTFOverrideMaterials[te].get());
|
||||
break;
|
||||
}
|
||||
case MATERIAL_METALLIC_ROUGHTNESS_TEX_DIRTY:
|
||||
{
|
||||
nodep->mSavedGLTFOverrideMaterials[te]->setOcclusionRoughnessMetallicId(mCtrl->getValue().asUUID(), true);
|
||||
update_local_texture(mCtrl, nodep->mSavedGLTFOverrideMaterials[te].get());
|
||||
break;
|
||||
}
|
||||
case MATERIAL_EMISIVE_TEX_DIRTY:
|
||||
{
|
||||
nodep->mSavedGLTFOverrideMaterials[te]->setEmissiveId(mCtrl->getValue().asUUID(), true);
|
||||
update_local_texture(mCtrl, nodep->mSavedGLTFOverrideMaterials[te].get());
|
||||
break;
|
||||
}
|
||||
case MATERIAL_NORMAL_TEX_DIRTY:
|
||||
{
|
||||
nodep->mSavedGLTFOverrideMaterials[te]->setNormalId(mCtrl->getValue().asUUID(), true);
|
||||
update_local_texture(mCtrl, nodep->mSavedGLTFOverrideMaterials[te].get());
|
||||
break;
|
||||
}
|
||||
// Colors
|
||||
|
|
|
|||
|
|
@ -219,6 +219,7 @@ class LLMaterialEditor : public LLPreview, public LLVOInventoryListener
|
|||
void setCanSave(bool value);
|
||||
void setEnableEditing(bool can_modify);
|
||||
|
||||
void replaceTexture(const LLUUID& old_id, const LLUUID& new_id); // Local texture support
|
||||
void onCommitTexture(LLUICtrl* ctrl, const LLSD& data, S32 dirty_flag);
|
||||
void onCancelCtrl(LLUICtrl* ctrl, const LLSD& data, S32 dirty_flag);
|
||||
void onSelectCtrl(LLUICtrl* ctrl, const LLSD& data, S32 dirty_flag);
|
||||
|
|
@ -306,5 +307,6 @@ private:
|
|||
static bool mOverrideInProgress;
|
||||
static bool mSelectionNeedsUpdate;
|
||||
boost::signals2::connection mSelectionUpdateSlot;
|
||||
std::list <boost::signals2::connection> mTextureChangesUpdates;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1959,7 +1959,7 @@ void LLPanelProfileSecondLife::onShowTexturePicker()
|
|||
|
||||
mFloaterTexturePickerHandle = texture_floaterp->getHandle();
|
||||
|
||||
texture_floaterp->setOnFloaterCommitCallback([this](LLTextureCtrl::ETexturePickOp op, LLPickerSource source, const LLUUID& asset_id, const LLUUID&)
|
||||
texture_floaterp->setOnFloaterCommitCallback([this](LLTextureCtrl::ETexturePickOp op, LLPickerSource source, const LLUUID& asset_id, const LLUUID&, const LLUUID&)
|
||||
{
|
||||
if (op == LLTextureCtrl::TEXTURE_SELECT)
|
||||
{
|
||||
|
|
@ -2285,7 +2285,7 @@ void LLPanelProfileFirstLife::onChangePhoto()
|
|||
|
||||
mFloaterTexturePickerHandle = texture_floaterp->getHandle();
|
||||
|
||||
texture_floaterp->setOnFloaterCommitCallback([this](LLTextureCtrl::ETexturePickOp op, LLPickerSource source, const LLUUID& asset_id, const LLUUID&)
|
||||
texture_floaterp->setOnFloaterCommitCallback([this](LLTextureCtrl::ETexturePickOp op, LLPickerSource source, const LLUUID& asset_id, const LLUUID&, const LLUUID&)
|
||||
{
|
||||
if (op == LLTextureCtrl::TEXTURE_SELECT)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -846,6 +846,7 @@ void LLFloaterTexturePicker::commitCallback(LLTextureCtrl::ETexturePickOp op)
|
|||
}
|
||||
LLUUID asset_id = mImageAssetID;
|
||||
LLUUID inventory_id;
|
||||
LLUUID tracking_id;
|
||||
LLPickerSource mode = (LLPickerSource)mModeSelector->getValue().asInteger();
|
||||
|
||||
switch (mode)
|
||||
|
|
@ -886,16 +887,16 @@ void LLFloaterTexturePicker::commitCallback(LLTextureCtrl::ETexturePickOp op)
|
|||
if (!mLocalScrollCtrl->getAllSelected().empty())
|
||||
{
|
||||
LLSD data = mLocalScrollCtrl->getFirstSelected()->getValue();
|
||||
LLUUID temp_id = data["id"];
|
||||
tracking_id = data["id"];
|
||||
S32 asset_type = data["type"].asInteger();
|
||||
|
||||
if (LLAssetType::AT_MATERIAL == asset_type)
|
||||
{
|
||||
asset_id = LLLocalGLTFMaterialMgr::getInstance()->getWorldID(temp_id);
|
||||
asset_id = LLLocalGLTFMaterialMgr::getInstance()->getWorldID(tracking_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
asset_id = LLLocalBitmapMgr::getInstance()->getWorldID(temp_id);
|
||||
asset_id = LLLocalBitmapMgr::getInstance()->getWorldID(tracking_id);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -912,13 +913,13 @@ void LLFloaterTexturePicker::commitCallback(LLTextureCtrl::ETexturePickOp op)
|
|||
break;
|
||||
}
|
||||
|
||||
mOnFloaterCommitCallback(op, mode, asset_id, inventory_id);
|
||||
mOnFloaterCommitCallback(op, mode, asset_id, inventory_id, tracking_id);
|
||||
}
|
||||
void LLFloaterTexturePicker::commitCancel()
|
||||
{
|
||||
if (!mNoCopyTextureSelected && mOnFloaterCommitCallback && mCanApply)
|
||||
{
|
||||
mOnFloaterCommitCallback(LLTextureCtrl::TEXTURE_CANCEL, PICKER_UNKNOWN, mOriginalImageAssetID, LLUUID::null);
|
||||
mOnFloaterCommitCallback(LLTextureCtrl::TEXTURE_CANCEL, PICKER_UNKNOWN, mOriginalImageAssetID, LLUUID::null, LLUUID::null);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -972,7 +973,7 @@ void LLFloaterTexturePicker::onBtnCancel(void* userdata)
|
|||
self->setImageID( self->mOriginalImageAssetID );
|
||||
if (self->mOnFloaterCommitCallback)
|
||||
{
|
||||
self->mOnFloaterCommitCallback(LLTextureCtrl::TEXTURE_CANCEL, PICKER_UNKNOWN, self->mOriginalImageAssetID, LLUUID::null);
|
||||
self->mOnFloaterCommitCallback(LLTextureCtrl::TEXTURE_CANCEL, PICKER_UNKNOWN, self->mOriginalImageAssetID, LLUUID::null, LLUUID::null);
|
||||
}
|
||||
self->mViewModel->resetDirty();
|
||||
self->closeFloater();
|
||||
|
|
@ -1177,7 +1178,7 @@ void LLFloaterTexturePicker::onLocalScrollCommit(LLUICtrl* ctrl, void* userdata)
|
|||
{
|
||||
if (self->mOnFloaterCommitCallback)
|
||||
{
|
||||
self->mOnFloaterCommitCallback(LLTextureCtrl::TEXTURE_CHANGE, PICKER_LOCAL, inworld_id, LLUUID::null);
|
||||
self->mOnFloaterCommitCallback(LLTextureCtrl::TEXTURE_CHANGE, PICKER_LOCAL, inworld_id, LLUUID::null, tracking_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1804,7 +1805,7 @@ void LLTextureCtrl::showPicker(BOOL take_focus)
|
|||
}
|
||||
if (texture_floaterp)
|
||||
{
|
||||
texture_floaterp->setOnFloaterCommitCallback(boost::bind(&LLTextureCtrl::onFloaterCommit, this, _1, _2, _3, _4));
|
||||
texture_floaterp->setOnFloaterCommitCallback(boost::bind(&LLTextureCtrl::onFloaterCommit, this, _1, _2, _3, _4, _5));
|
||||
}
|
||||
if (texture_floaterp)
|
||||
{
|
||||
|
|
@ -1928,7 +1929,7 @@ void LLTextureCtrl::onFloaterClose()
|
|||
mFloaterHandle.markDead();
|
||||
}
|
||||
|
||||
void LLTextureCtrl::onFloaterCommit(ETexturePickOp op, LLPickerSource source, const LLUUID& asset_id, const LLUUID& inv_id)
|
||||
void LLTextureCtrl::onFloaterCommit(ETexturePickOp op, LLPickerSource source, const LLUUID& asset_id, const LLUUID& inv_id, const LLUUID& tracking_id)
|
||||
{
|
||||
LLFloaterTexturePicker* floaterp = (LLFloaterTexturePicker*)mFloaterHandle.get();
|
||||
|
||||
|
|
@ -1951,16 +1952,23 @@ void LLTextureCtrl::onFloaterCommit(ETexturePickOp op, LLPickerSource source, co
|
|||
case PICKER_INVENTORY:
|
||||
mImageItemID = inv_id;
|
||||
mImageAssetID = asset_id;
|
||||
mLocalTrackingID.setNull();
|
||||
break;
|
||||
case PICKER_BAKE:
|
||||
mImageItemID = LLUUID::null;
|
||||
mImageAssetID = asset_id;
|
||||
mLocalTrackingID.setNull();
|
||||
break;
|
||||
case PICKER_LOCAL:
|
||||
mImageItemID = LLUUID::null;
|
||||
mImageAssetID = asset_id;
|
||||
mLocalTrackingID = tracking_id;
|
||||
break;
|
||||
case PICKER_UNKNOWN:
|
||||
default:
|
||||
mImageItemID = floaterp->findItemID(asset_id, FALSE);
|
||||
mImageAssetID = asset_id;
|
||||
mLocalTrackingID.setNull();
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -2018,6 +2026,7 @@ void LLTextureCtrl::setImageAssetID( const LLUUID& asset_id )
|
|||
{
|
||||
mImageItemID.setNull();
|
||||
mImageAssetID = asset_id;
|
||||
mLocalTrackingID.setNull();
|
||||
LLFloaterTexturePicker* floaterp = (LLFloaterTexturePicker*)mFloaterHandle.get();
|
||||
if( floaterp && getEnabled() )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -200,7 +200,11 @@ public:
|
|||
void closeDependentFloater();
|
||||
|
||||
void onFloaterClose();
|
||||
void onFloaterCommit(ETexturePickOp op, LLPickerSource source, const LLUUID& local_id, const LLUUID& inv_id);
|
||||
void onFloaterCommit(ETexturePickOp op,
|
||||
LLPickerSource source,
|
||||
const LLUUID& local_id,
|
||||
const LLUUID& inv_id,
|
||||
const LLUUID& tracking_id);
|
||||
|
||||
// This call is returned when a drag is detected. Your callback
|
||||
// should return TRUE if the drag is acceptable.
|
||||
|
|
@ -230,6 +234,9 @@ public:
|
|||
void setInventoryPickType(EPickInventoryType type);
|
||||
EPickInventoryType getInventoryPickType() { return mInventoryPickType; };
|
||||
|
||||
bool isImageLocal() { return mLocalTrackingID.notNull(); }
|
||||
LLUUID getLocalTrackingID() { return mLocalTrackingID; }
|
||||
|
||||
private:
|
||||
BOOL allowDrop(LLInventoryItem* item, EDragAndDropType cargo_type, std::string& tooltip_msg);
|
||||
BOOL doDrop(LLInventoryItem* item);
|
||||
|
|
@ -247,6 +254,7 @@ private:
|
|||
LLUUID mImageAssetID;
|
||||
LLUUID mDefaultImageAssetID;
|
||||
LLUUID mBlankImageAssetID;
|
||||
LLUUID mLocalTrackingID;
|
||||
LLUIImagePtr mFallbackImage;
|
||||
std::string mDefaultImageName;
|
||||
LLHandle<LLFloater> mFloaterHandle;
|
||||
|
|
@ -272,7 +280,7 @@ private:
|
|||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
// LLFloaterTexturePicker
|
||||
typedef boost::function<void(LLTextureCtrl::ETexturePickOp op, LLPickerSource source, const LLUUID& asset_id, const LLUUID& inventory_id)> floater_commit_callback;
|
||||
typedef boost::function<void(LLTextureCtrl::ETexturePickOp op, LLPickerSource source, const LLUUID& asset_id, const LLUUID& inventory_id, const LLUUID& tracking_id)> floater_commit_callback;
|
||||
typedef boost::function<void()> floater_close_callback;
|
||||
typedef boost::function<void(const LLUUID& asset_id)> set_image_asset_id_callback;
|
||||
typedef boost::function<void(LLPointer<LLViewerTexture> texture)> set_on_update_image_stats_callback;
|
||||
|
|
|
|||
Loading…
Reference in New Issue