summaryrefslogtreecommitdiff
path: root/indra/newview/llagentbenefits.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llagentbenefits.cpp')
-rw-r--r--indra/newview/llagentbenefits.cpp268
1 files changed, 166 insertions, 102 deletions
diff --git a/indra/newview/llagentbenefits.cpp b/indra/newview/llagentbenefits.cpp
index c2a1589682..0717d92ea7 100644
--- a/indra/newview/llagentbenefits.cpp
+++ b/indra/newview/llagentbenefits.cpp
@@ -25,16 +25,17 @@
#include "llviewerprecompiledheaders.h"
#include "llagentbenefits.h"
+#include "llviewertexture.h"
LLAgentBenefits::LLAgentBenefits():
- m_initalized(false),
- m_animated_object_limit(-1),
- m_animation_upload_cost(-1),
- m_attachment_limit(-1),
- m_group_membership_limit(-1),
- m_picks_limit(-1),
- m_sound_upload_cost(-1),
- m_texture_upload_cost(-1)
+ m_initalized(false),
+ m_animated_object_limit(-1),
+ m_animation_upload_cost(-1),
+ m_attachment_limit(-1),
+ m_group_membership_limit(-1),
+ m_picks_limit(-1),
+ m_sound_upload_cost(-1),
+ m_texture_upload_cost(-1)
{
}
@@ -47,118 +48,181 @@ LLAgentBenefits::~LLAgentBenefits()
// the viewer cares about are integer.
bool get_required_S32(const LLSD& sd, const LLSD::String& key, S32& value)
{
- value = -1;
- if (sd.has(key))
- {
- value = sd[key].asInteger();
- return true;
- }
+ value = -1;
+ if (sd.has(key))
+ {
+ value = sd[key].asInteger();
+ return true;
+ }
- LL_WARNS("Benefits") << "Missing required benefit field " << key << LL_ENDL;
- return false;
+ LL_WARNS("Benefits") << "Missing required benefit field " << key << LL_ENDL;
+ return false;
}
bool LLAgentBenefits::init(const LLSD& benefits_sd)
{
- LL_DEBUGS("Benefits") << "initializing benefits from " << benefits_sd << LL_ENDL;
+ LL_DEBUGS("Benefits") << "initializing benefits from " << benefits_sd << LL_ENDL;
- if (!get_required_S32(benefits_sd, "animated_object_limit", m_animated_object_limit))
- {
- return false;
- }
- if (!get_required_S32(benefits_sd, "animation_upload_cost", m_animation_upload_cost))
- {
- return false;
- }
- if (!get_required_S32(benefits_sd, "attachment_limit", m_attachment_limit))
- {
- return false;
- }
- if (!get_required_S32(benefits_sd, "create_group_cost", m_create_group_cost))
- {
- return false;
- }
- if (!get_required_S32(benefits_sd, "group_membership_limit", m_group_membership_limit))
- {
- return false;
- }
- if (!get_required_S32(benefits_sd, "picks_limit", m_picks_limit))
- {
- return false;
- }
- if (!get_required_S32(benefits_sd, "sound_upload_cost", m_sound_upload_cost))
+ if (!get_required_S32(benefits_sd, "animated_object_limit", m_animated_object_limit))
+ {
+ return false;
+ }
+ if (!get_required_S32(benefits_sd, "animation_upload_cost", m_animation_upload_cost))
+ {
+ return false;
+ }
+ if (!get_required_S32(benefits_sd, "attachment_limit", m_attachment_limit))
+ {
+ return false;
+ }
+ if (!get_required_S32(benefits_sd, "create_group_cost", m_create_group_cost))
+ {
+ return false;
+ }
+ if (!get_required_S32(benefits_sd, "group_membership_limit", m_group_membership_limit))
+ {
+ return false;
+ }
+ if (!get_required_S32(benefits_sd, "picks_limit", m_picks_limit))
+ {
+ return false;
+ }
+ if (!get_required_S32(benefits_sd, "sound_upload_cost", m_sound_upload_cost))
+ {
+ return false;
+ }
+ if (!get_required_S32(benefits_sd, "texture_upload_cost", m_texture_upload_cost))
+ {
+ return false;
+ }
+
+ if (benefits_sd.has("large_texture_upload_cost"))
{
- return false;
+ LLSD large_texture_cost = benefits_sd.get("large_texture_upload_cost");
+ if (large_texture_cost.isArray())
+ {
+ LLSD::array_const_iterator end = large_texture_cost.endArray();
+ LLSD::array_const_iterator it = large_texture_cost.beginArray();
+ for (; it != end; ++it)
+ {
+ m_2k_texture_upload_cost.push_back(it->asInteger());
+ }
+ std::sort(m_2k_texture_upload_cost.begin(), m_2k_texture_upload_cost.end());
+ }
}
- if (!get_required_S32(benefits_sd, "texture_upload_cost", m_texture_upload_cost))
+
+ if (m_2k_texture_upload_cost.empty())
{
- return false;
+ m_2k_texture_upload_cost.push_back(m_texture_upload_cost);
}
- // FIXME PREMIUM - either use this field or get rid of it
- m_initalized = true;
- return true;
+ // FIXME PREMIUM - either use this field or get rid of it
+ m_initalized = true;
+ return true;
}
S32 LLAgentBenefits::getAnimatedObjectLimit() const
{
- return m_animated_object_limit;
+ return m_animated_object_limit;
}
S32 LLAgentBenefits::getAnimationUploadCost() const
{
- return m_animation_upload_cost;
+ return m_animation_upload_cost;
}
S32 LLAgentBenefits::getAttachmentLimit() const
{
- return m_attachment_limit;
+ return m_attachment_limit;
}
S32 LLAgentBenefits::getCreateGroupCost() const
{
- return m_create_group_cost;
+ return m_create_group_cost;
}
S32 LLAgentBenefits::getGroupMembershipLimit() const
{
- return m_group_membership_limit;
+ return m_group_membership_limit;
}
S32 LLAgentBenefits::getPicksLimit() const
{
- return m_picks_limit;
+ return m_picks_limit;
}
S32 LLAgentBenefits::getSoundUploadCost() const
{
- return m_sound_upload_cost;
+ return m_sound_upload_cost;
}
S32 LLAgentBenefits::getTextureUploadCost() const
{
- return m_texture_upload_cost;
+ return m_texture_upload_cost;
}
-bool LLAgentBenefits::findUploadCost(LLAssetType::EType& asset_type, S32& cost) const
+S32 LLAgentBenefits::getTextureUploadCost(const LLViewerTexture* tex) const
{
- bool succ = false;
- if (asset_type == LLAssetType::AT_TEXTURE)
+ if (tex)
{
- cost = getTextureUploadCost();
- succ = true;
+ S32 area = tex->getFullHeight() * tex->getFullWidth();
+ if (area >= MIN_2K_TEXTURE_AREA)
+ {
+ return get2KTextureUploadCost(area);
+ }
+ else
+ {
+ return getTextureUploadCost();
+ }
}
- else if (asset_type == LLAssetType::AT_SOUND)
+ return getTextureUploadCost();
+}
+
+S32 LLAgentBenefits::getTextureUploadCost(const LLImageBase* tex) const
+{
+ if (tex)
{
- cost = getSoundUploadCost();
- succ = true;
+ S32 area = tex->getHeight() * tex->getWidth();
+ if (area >= MIN_2K_TEXTURE_AREA)
+ {
+ return get2KTextureUploadCost(area);
+ }
+ else
+ {
+ return getTextureUploadCost();
+ }
}
- else if (asset_type == LLAssetType::AT_ANIMATION)
+ return getTextureUploadCost();
+}
+
+S32 LLAgentBenefits::get2KTextureUploadCost(S32 area) const
+{
+ if (m_2k_texture_upload_cost.empty())
{
- cost = getAnimationUploadCost();
- succ = true;
+ return m_texture_upload_cost;
}
- return succ;
+ return m_2k_texture_upload_cost[0];
+}
+
+bool LLAgentBenefits::findUploadCost(LLAssetType::EType& asset_type, S32& cost) const
+{
+ bool succ = false;
+ if (asset_type == LLAssetType::AT_TEXTURE)
+ {
+ cost = getTextureUploadCost();
+ succ = true;
+ }
+ else if (asset_type == LLAssetType::AT_SOUND)
+ {
+ cost = getSoundUploadCost();
+ succ = true;
+ }
+ else if (asset_type == LLAssetType::AT_ANIMATION)
+ {
+ cost = getAnimationUploadCost();
+ succ = true;
+ }
+ return succ;
}
LLAgentBenefitsMgr::LLAgentBenefitsMgr()
@@ -172,65 +236,65 @@ LLAgentBenefitsMgr::~LLAgentBenefitsMgr()
// static
const LLAgentBenefits& LLAgentBenefitsMgr::current()
{
- return instance().mCurrent;
+ return instance().mCurrent;
}
// static
const LLAgentBenefits& LLAgentBenefitsMgr::get(const std::string& package)
{
- if (instance().mPackageMap.find(package) != instance().mPackageMap.end())
- {
- return instance().mPackageMap[package];
- }
- else
- {
- return instance().mDefault;
- }
+ if (instance().mPackageMap.find(package) != instance().mPackageMap.end())
+ {
+ return instance().mPackageMap[package];
+ }
+ else
+ {
+ return instance().mDefault;
+ }
}
// static
bool LLAgentBenefitsMgr::init(const std::string& package, const LLSD& benefits_sd)
{
- LLAgentBenefits benefits;
- if (!benefits.init(benefits_sd))
- {
- LL_WARNS("Benefits") << "Unable to initialize package " << package << " from sd " << benefits_sd << LL_ENDL;
- return false;
- }
- else
- {
- instance().mPackageMap[package] = benefits;
- }
- return true;
+ LLAgentBenefits benefits;
+ if (!benefits.init(benefits_sd))
+ {
+ LL_WARNS("Benefits") << "Unable to initialize package " << package << " from sd " << benefits_sd << LL_ENDL;
+ return false;
+ }
+ else
+ {
+ instance().mPackageMap[package] = benefits;
+ }
+ return true;
}
// static
bool LLAgentBenefitsMgr::initCurrent(const std::string& package, const LLSD& benefits_sd)
{
- LLAgentBenefits benefits;
- if (!benefits.init(benefits_sd))
- {
- LL_WARNS("Benefits") << "Unable to initialize package " << package << " from sd " << benefits_sd << LL_ENDL;
- return false;
- }
- else
- {
- instance().mCurrent = benefits;
- instance().mCurrentName = package;
- }
- return true;
+ LLAgentBenefits benefits;
+ if (!benefits.init(benefits_sd))
+ {
+ LL_WARNS("Benefits") << "Unable to initialize package " << package << " from sd " << benefits_sd << LL_ENDL;
+ return false;
+ }
+ else
+ {
+ instance().mCurrent = benefits;
+ instance().mCurrentName = package;
+ }
+ return true;
}
// static
bool LLAgentBenefitsMgr::has(const std::string& package)
{
- return instance().mPackageMap.find(package) != instance().mPackageMap.end();
+ return instance().mPackageMap.find(package) != instance().mPackageMap.end();
}
//static
bool LLAgentBenefitsMgr::isCurrent(const std::string& package)
{
- return instance().mCurrentName == package;
+ return instance().mCurrentName == package;
}