diff options
author | Tonya Souther <tonya.souther@gmail.com> | 2013-02-05 03:30:56 -0600 |
---|---|---|
committer | Tonya Souther <tonya.souther@gmail.com> | 2013-02-05 03:30:56 -0600 |
commit | f2b026138d5abe5464de6db349b3431c262de53a (patch) | |
tree | e95673bf308fb4469d9f02c01e6bf6bea4764172 /indra/newview/llpanelface.cpp | |
parent | a91b231bfeb07fbfb123ce11e863941e311fc0f3 (diff) |
Don't send a materials update to the sim until the previous one has been acknowledged.
Diffstat (limited to 'indra/newview/llpanelface.cpp')
-rw-r--r-- | indra/newview/llpanelface.cpp | 93 |
1 files changed, 85 insertions, 8 deletions
diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp index e0f9ec9b99..7b3bbf8b3b 100644 --- a/indra/newview/llpanelface.cpp +++ b/indra/newview/llpanelface.cpp @@ -257,7 +257,9 @@ LLPanelFace::LLPanelFace() : LLPanel(), mMaterialID(LLMaterialID::null), mMaterial(LLMaterialPtr()), - mIsAlpha(FALSE) + mIsAlpha(false), + mUpdateInFlight(false), + mUpdatePending(false) { } @@ -1140,6 +1142,13 @@ void LLPanelFace::getState() llinfos << "Requesting material ID " << mMaterialID.asString() << llendl; LLMaterialMgr::getInstance()->get(objectp->getRegion()->getRegionID(),mMaterialID,boost::bind(&LLPanelFace::onMaterialLoaded, this, _1, _2)); } + if (mUpdatePending && !mUpdateInFlight) + { + // One or more updates are pending, and the + // previous one has been acknowledged. Send + // the pending updates. + updateMaterial(); + } } // Set variable values for numeric expressions @@ -1206,6 +1215,9 @@ void LLPanelFace::refresh() void LLPanelFace::onMaterialLoaded(const LLMaterialID& material_id, const LLMaterialPtr material) { mMaterial = material; + // We've gotten a materials update, so the sim's ready for another. + mUpdateInFlight = false; + // Alpha LLCtrlSelectionInterface* combobox_alphamode = childGetSelectionInterface("combobox alphamode"); @@ -1278,6 +1290,11 @@ void LLPanelFace::onMaterialLoaded(const LLMaterialID& material_id, const LLMate void LLPanelFace::updateMaterial() { + if (mUpdateInFlight) + { + LL_WARNS("Materials") << "Attempt to update material while a previous update is pending ignored." << LL_ENDL; + return; + } LLComboBox* comboAlphaMode = getChild<LLComboBox>("combobox alphamode"); LLComboBox* comboBumpiness = getChild<LLComboBox>("combobox bumpiness"); LLComboBox* comboShininess = getChild<LLComboBox>("combobox shininess"); @@ -1336,6 +1353,10 @@ void LLPanelFace::updateMaterial() mMaterial->setAlphaMaskCutoff((U8)(getChild<LLUICtrl>("maskcutoff")->getValue().asInteger())); llinfos << "Updating material: " << mMaterial->asLLSD() << llendl; LLSelectMgr::getInstance()->selectionSetMaterial( *mMaterial ); + + // We've sent an update. Need to hold off on any more until + // the sim acknowledges this one. + mUpdateInFlight = true; } else { @@ -1346,8 +1367,15 @@ void LLPanelFace::updateMaterial() mMaterial.reset(); mMaterialID = LLMaterialID::null; // Delete existing material entry... + + // Hold off any further updates till this one's + // acknowledged. + //mUpdateInFlight = true; } } + + // We've taken care of the update, so clear the update pending flag. + mUpdatePending = false; } // @@ -1368,7 +1396,14 @@ void LLPanelFace::onCommitColor(const LLSD& data) void LLPanelFace::onCommitShinyColor(const LLSD& data) { - updateMaterial(); + if (!mUpdateInFlight) + { + updateMaterial(); + } + else + { + mUpdatePending = true; + } } void LLPanelFace::onCommitAlpha(const LLSD& data) @@ -1531,7 +1566,14 @@ void LLPanelFace::onCommitShiny(LLUICtrl* ctrl, void* userdata) { LLPanelFace* self = (LLPanelFace*) userdata; self->sendShiny(); - self->updateMaterial(); + if (!self->mUpdateInFlight) + { + self->updateMaterial(); + } + else + { + self->mUpdatePending = true; + } } // static @@ -1554,7 +1596,14 @@ void LLPanelFace::onCommitAlphaMode(LLUICtrl* ctrl, void* userdata) { LLPanelFace* self = (LLPanelFace*) userdata; updateAlphaControls(ctrl,userdata); - self->updateMaterial(); + if (!self->mUpdateInFlight) + { + self->updateMaterial(); + } + else + { + self->mUpdatePending = true; + } } // static @@ -1608,25 +1657,53 @@ void LLPanelFace::onSelectTexture(const LLSD& data) void LLPanelFace::onCommitMaterialTexture( const LLSD& data ) { - updateMaterial(); + if (!mUpdateInFlight) + { + updateMaterial(); + } + else + { + mUpdatePending = true; + } } void LLPanelFace::onCancelMaterialTexture(const LLSD& data) { // not sure what to do here other than - updateMaterial(); + if (!mUpdateInFlight) + { + updateMaterial(); + } + else + { + mUpdatePending = true; + } } void LLPanelFace::onSelectMaterialTexture(const LLSD& data) { - updateMaterial(); + if (!mUpdateInFlight) + { + updateMaterial(); + } + else + { + mUpdatePending = true; + } } //static void LLPanelFace::onCommitMaterial(LLUICtrl* ctrl, void* userdata) { LLPanelFace* self = (LLPanelFace*) userdata; - self->updateMaterial(); + if (!self->mUpdateInFlight) + { + self->updateMaterial(); + } + else + { + self->mUpdatePending = true; + } } // static |