DRTVWR-493 LLLocalBitmapMgr to Singleton

master
andreykproductengine 2019-06-20 20:53:46 +03:00
parent 2672093429
commit a2d91f3160
4 changed files with 50 additions and 63 deletions

View File

@ -1750,8 +1750,6 @@ bool LLAppViewer::cleanup()
gTransferManager.cleanup();
#endif
SUBSYSTEM_CLEANUP(LLLocalBitmapMgr);
// Note: this is where gWorldMap used to be deleted.
// Note: this is where gHUDManager used to be deleted.

View File

@ -69,9 +69,6 @@
/*=======================================*/
/* Formal declarations, constants, etc. */
/*=======================================*/
std::list<LLLocalBitmap*> LLLocalBitmapMgr::sBitmapList;
LLLocalBitmapTimer LLLocalBitmapMgr::sTimer;
bool LLLocalBitmapMgr::sNeedsRebake;
static const F32 LL_LOCAL_TIMER_HEARTBEAT = 3.0;
static const BOOL LL_LOCAL_USE_MIPMAPS = true;
@ -131,7 +128,7 @@ LLLocalBitmap::~LLLocalBitmap()
if(LL_LOCAL_REPLACE_ON_DEL && mValid && gAgentAvatarp) // fix for STORM-1837
{
replaceIDs(mWorldID, IMG_DEFAULT);
LLLocalBitmapMgr::doRebake();
LLLocalBitmapMgr::getInstance()->doRebake();
}
// delete self from gimagelist
@ -570,7 +567,7 @@ void LLLocalBitmap::updateUserLayers(LLUUID old_id, LLUUID new_id, LLWearableTyp
gAgentAvatarp->setLocalTexture(reg_texind, gTextureList.getImage(new_id), FALSE, index);
gAgentAvatarp->wearableUpdated(type);
/* telling the manager to rebake once update cycle is fully done */
LLLocalBitmapMgr::setNeedsRebake();
LLLocalBitmapMgr::getInstance()->setNeedsRebake();
}
}
@ -835,7 +832,7 @@ bool LLLocalBitmapTimer::isRunning()
BOOL LLLocalBitmapTimer::tick()
{
LLLocalBitmapMgr::doUpdates();
LLLocalBitmapMgr::getInstance()->doUpdates();
return FALSE;
}
@ -844,17 +841,12 @@ BOOL LLLocalBitmapTimer::tick()
/*=======================================*/
LLLocalBitmapMgr::LLLocalBitmapMgr()
{
// The class is all made of static members, should i even bother instantiating?
}
LLLocalBitmapMgr::~LLLocalBitmapMgr()
{
}
void LLLocalBitmapMgr::cleanupClass()
{
std::for_each(sBitmapList.begin(), sBitmapList.end(), DeletePointer());
sBitmapList.clear();
std::for_each(mBitmapList.begin(), mBitmapList.end(), DeletePointer());
mBitmapList.clear();
}
bool LLLocalBitmapMgr::addUnit()
@ -864,7 +856,7 @@ bool LLLocalBitmapMgr::addUnit()
LLFilePicker& picker = LLFilePicker::instance();
if (picker.getMultipleOpenFiles(LLFilePicker::FFLOAD_IMAGE))
{
sTimer.stopTimer();
mTimer.stopTimer();
std::string filename = picker.getFirstFile();
while(!filename.empty())
@ -879,7 +871,7 @@ bool LLLocalBitmapMgr::addUnit()
if (unit->getValid())
{
sBitmapList.push_back(unit);
mBitmapList.push_back(unit);
add_successful = true;
}
else
@ -898,7 +890,7 @@ bool LLLocalBitmapMgr::addUnit()
filename = picker.getNextFile();
}
sTimer.startTimer();
mTimer.startTimer();
}
return add_successful;
@ -937,10 +929,10 @@ bool LLLocalBitmapMgr::checkTextureDimensions(std::string filename)
void LLLocalBitmapMgr::delUnit(LLUUID tracking_id)
{
if (!sBitmapList.empty())
if (!mBitmapList.empty())
{
std::vector<LLLocalBitmap*> to_delete;
for (local_list_iter iter = sBitmapList.begin(); iter != sBitmapList.end(); iter++)
for (local_list_iter iter = mBitmapList.begin(); iter != mBitmapList.end(); iter++)
{ /* finding which ones we want deleted and making a separate list */
LLLocalBitmap* unit = *iter;
if (unit->getTrackingID() == tracking_id)
@ -953,7 +945,7 @@ void LLLocalBitmapMgr::delUnit(LLUUID tracking_id)
del_iter != to_delete.end(); del_iter++)
{ /* iterating over a temporary list, hence preserving the iterator validity while deleting. */
LLLocalBitmap* unit = *del_iter;
sBitmapList.remove(unit);
mBitmapList.remove(unit);
delete unit;
unit = NULL;
}
@ -964,7 +956,7 @@ LLUUID LLLocalBitmapMgr::getWorldID(LLUUID tracking_id)
{
LLUUID world_id = LLUUID::null;
for (local_list_iter iter = sBitmapList.begin(); iter != sBitmapList.end(); iter++)
for (local_list_iter iter = mBitmapList.begin(); iter != mBitmapList.end(); iter++)
{
LLLocalBitmap* unit = *iter;
if (unit->getTrackingID() == tracking_id)
@ -980,7 +972,7 @@ std::string LLLocalBitmapMgr::getFilename(LLUUID tracking_id)
{
std::string filename = "";
for (local_list_iter iter = sBitmapList.begin(); iter != sBitmapList.end(); iter++)
for (local_list_iter iter = mBitmapList.begin(); iter != mBitmapList.end(); iter++)
{
LLLocalBitmap* unit = *iter;
if (unit->getTrackingID() == tracking_id)
@ -998,10 +990,10 @@ void LLLocalBitmapMgr::feedScrollList(LLScrollListCtrl* ctrl)
{
ctrl->clearRows();
if (!sBitmapList.empty())
if (!mBitmapList.empty())
{
for (local_list_iter iter = sBitmapList.begin();
iter != sBitmapList.end(); iter++)
for (local_list_iter iter = mBitmapList.begin();
iter != mBitmapList.end(); iter++)
{
LLSD element;
element["columns"][0]["column"] = "unit_name";
@ -1022,29 +1014,29 @@ void LLLocalBitmapMgr::feedScrollList(LLScrollListCtrl* ctrl)
void LLLocalBitmapMgr::doUpdates()
{
// preventing theoretical overlap in cases with huge number of loaded images.
sTimer.stopTimer();
sNeedsRebake = false;
mTimer.stopTimer();
mNeedsRebake = false;
for (local_list_iter iter = sBitmapList.begin(); iter != sBitmapList.end(); iter++)
for (local_list_iter iter = mBitmapList.begin(); iter != mBitmapList.end(); iter++)
{
(*iter)->updateSelf();
}
doRebake();
sTimer.startTimer();
mTimer.startTimer();
}
void LLLocalBitmapMgr::setNeedsRebake()
{
sNeedsRebake = true;
mNeedsRebake = true;
}
void LLLocalBitmapMgr::doRebake()
{ /* separated that from doUpdates to insure a rebake can be called separately during deletion */
if (sNeedsRebake)
if (mNeedsRebake)
{
gAgentAvatarp->forceBakeAllTextures(LL_LOCAL_SLAM_FOR_DEBUG);
sNeedsRebake = false;
mNeedsRebake = false;
}
}

View File

@ -110,31 +110,28 @@ class LLLocalBitmapTimer : public LLEventTimer
};
class LLLocalBitmapMgr
class LLLocalBitmapMgr : public LLSingleton<LLLocalBitmapMgr>
{
public:
LLLocalBitmapMgr();
~LLLocalBitmapMgr();
LLSINGLETON(LLLocalBitmapMgr);
~LLLocalBitmapMgr();
public:
bool addUnit();
void delUnit(LLUUID tracking_id);
bool checkTextureDimensions(std::string filename);
public:
static void cleanupClass();
static bool addUnit();
static void delUnit(LLUUID tracking_id);
static bool checkTextureDimensions(std::string filename);
LLUUID getWorldID(LLUUID tracking_id);
std::string getFilename(LLUUID tracking_id);
static LLUUID getWorldID(LLUUID tracking_id);
static std::string getFilename(LLUUID tracking_id);
static void feedScrollList(LLScrollListCtrl* ctrl);
static void doUpdates();
static void setNeedsRebake();
static void doRebake();
private:
static std::list<LLLocalBitmap*> sBitmapList;
static LLLocalBitmapTimer sTimer;
static bool sNeedsRebake;
typedef std::list<LLLocalBitmap*>::iterator local_list_iter;
void feedScrollList(LLScrollListCtrl* ctrl);
void doUpdates();
void setNeedsRebake();
void doRebake();
private:
std::list<LLLocalBitmap*> mBitmapList;
LLLocalBitmapTimer mTimer;
bool mNeedsRebake;
typedef std::list<LLLocalBitmap*>::iterator local_list_iter;
};
#endif

View File

@ -382,7 +382,7 @@ BOOL LLFloaterTexturePicker::postBuild()
mLocalScrollCtrl = getChild<LLScrollListCtrl>("l_name_list");
mLocalScrollCtrl->setCommitCallback(onLocalScrollCommit, this);
LLLocalBitmapMgr::feedScrollList(mLocalScrollCtrl);
LLLocalBitmapMgr::getInstance()->feedScrollList(mLocalScrollCtrl);
mNoCopyTextureSelected = FALSE;
@ -694,7 +694,7 @@ void LLFloaterTexturePicker::onBtnSelect(void* userdata)
if (self->mLocalScrollCtrl->getVisible() && !self->mLocalScrollCtrl->getAllSelected().empty())
{
LLUUID temp_id = self->mLocalScrollCtrl->getFirstSelected()->getColumn(LOCAL_TRACKING_ID_COLUMN)->getValue().asUUID();
local_id = LLLocalBitmapMgr::getWorldID(temp_id);
local_id = LLLocalBitmapMgr::getInstance()->getWorldID(temp_id);
}
}
if (self->mOnFloaterCommitCallback)
@ -781,10 +781,10 @@ void LLFloaterTexturePicker::onModeSelect(LLUICtrl* ctrl, void *userdata)
// static
void LLFloaterTexturePicker::onBtnAdd(void* userdata)
{
if (LLLocalBitmapMgr::addUnit() == true)
if (LLLocalBitmapMgr::getInstance()->addUnit() == true)
{
LLFloaterTexturePicker* self = (LLFloaterTexturePicker*) userdata;
LLLocalBitmapMgr::feedScrollList(self->mLocalScrollCtrl);
LLLocalBitmapMgr::getInstance()->feedScrollList(self->mLocalScrollCtrl);
}
}
@ -803,13 +803,13 @@ void LLFloaterTexturePicker::onBtnRemove(void* userdata)
if (list_item)
{
LLUUID tracking_id = list_item->getColumn(LOCAL_TRACKING_ID_COLUMN)->getValue().asUUID();
LLLocalBitmapMgr::delUnit(tracking_id);
LLLocalBitmapMgr::getInstance()->delUnit(tracking_id);
}
}
self->getChild<LLButton>("l_rem_btn")->setEnabled(false);
self->getChild<LLButton>("l_upl_btn")->setEnabled(false);
LLLocalBitmapMgr::feedScrollList(self->mLocalScrollCtrl);
LLLocalBitmapMgr::getInstance()->feedScrollList(self->mLocalScrollCtrl);
}
}
@ -829,7 +829,7 @@ void LLFloaterTexturePicker::onBtnUpload(void* userdata)
in the future, it might be a good idea to check the vector size and if more than one units is selected - opt for multi-image upload. */
LLUUID tracking_id = (LLUUID)self->mLocalScrollCtrl->getSelectedItemLabel(LOCAL_TRACKING_ID_COLUMN);
std::string filename = LLLocalBitmapMgr::getFilename(tracking_id);
std::string filename = LLLocalBitmapMgr::getInstance()->getFilename(tracking_id);
if (!filename.empty())
{
@ -852,7 +852,7 @@ void LLFloaterTexturePicker::onLocalScrollCommit(LLUICtrl* ctrl, void* userdata)
if (has_selection)
{
LLUUID tracking_id = (LLUUID)self->mLocalScrollCtrl->getSelectedItemLabel(LOCAL_TRACKING_ID_COLUMN);
LLUUID inworld_id = LLLocalBitmapMgr::getWorldID(tracking_id);
LLUUID inworld_id = LLLocalBitmapMgr::getInstance()->getWorldID(tracking_id);
if (self->mSetImageAssetIDCallback)
{
self->mSetImageAssetIDCallback(inworld_id);