diff options
| -rw-r--r-- | indra/newview/llagentbenefits.cpp | 11 | ||||
| -rw-r--r-- | indra/newview/llagentbenefits.h | 4 | ||||
| -rw-r--r-- | indra/newview/llfloaterimagepreview.cpp | 21 | ||||
| -rw-r--r-- | indra/newview/llfloaterimagepreview.h | 16 | ||||
| -rw-r--r-- | indra/newview/llfloaternamedesc.h | 2 | ||||
| -rw-r--r-- | indra/newview/llmaterialeditor.cpp | 69 | ||||
| -rw-r--r-- | indra/newview/llpanelmaininventory.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llviewermenu.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llviewermenufile.cpp | 48 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/menu_inventory_add.xml | 2 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/menu_viewer.xml | 2 | 
11 files changed, 143 insertions, 40 deletions
diff --git a/indra/newview/llagentbenefits.cpp b/indra/newview/llagentbenefits.cpp index 2d219735a0..7362082029 100644 --- a/indra/newview/llagentbenefits.cpp +++ b/indra/newview/llagentbenefits.cpp @@ -34,7 +34,8 @@ LLAgentBenefits::LLAgentBenefits():  	m_group_membership_limit(-1),  	m_picks_limit(-1),  	m_sound_upload_cost(-1), -	m_texture_upload_cost(-1) +	m_texture_upload_cost(-1), +    m_2k_texture_upload_cost(-1)  {  } @@ -94,6 +95,7 @@ bool LLAgentBenefits::init(const LLSD& benefits_sd)  	{  		return false;  	} +    get_required_S32(benefits_sd, "large_texture_upload_cost", m_2k_texture_upload_cost);  	// FIXME PREMIUM - either use this field or get rid of it  	m_initalized = true; @@ -140,12 +142,17 @@ S32 LLAgentBenefits::getTextureUploadCost() const  	return m_texture_upload_cost;  } +S32 LLAgentBenefits::get2KTextureUploadCost() const +{ +    return m_2k_texture_upload_cost; +} +  bool LLAgentBenefits::findUploadCost(LLAssetType::EType& asset_type, S32& cost) const  {  	bool succ = false;  	if (asset_type == LLAssetType::AT_TEXTURE)  	{ -		cost = getTextureUploadCost(); +        cost = getTextureUploadCost();  		succ = true;  	}  	else if (asset_type == LLAssetType::AT_SOUND) diff --git a/indra/newview/llagentbenefits.h b/indra/newview/llagentbenefits.h index 48aa6bd869..e3a03ba1ca 100644 --- a/indra/newview/llagentbenefits.h +++ b/indra/newview/llagentbenefits.h @@ -33,6 +33,8 @@  class LLAgentBenefits  {  public: +    static constexpr S32 MIN_2K_TEXTURE_AREA = 1024 * 1024; +  	LLAgentBenefits();  	~LLAgentBenefits();  	LOG_CLASS(LLAgentBenefits); @@ -47,6 +49,7 @@ public:  	S32 getPicksLimit() const;  	S32 getSoundUploadCost() const;  	S32 getTextureUploadCost() const; +    S32 get2KTextureUploadCost() const;  	bool findUploadCost(LLAssetType::EType& asset_type, S32& cost) const; @@ -59,6 +62,7 @@ private:  	S32 m_picks_limit;  	S32 m_sound_upload_cost;  	S32 m_texture_upload_cost; +    S32 m_2k_texture_upload_cost;  	bool m_initalized;  }; diff --git a/indra/newview/llfloaterimagepreview.cpp b/indra/newview/llfloaterimagepreview.cpp index ba0f97e2e1..68dd7bfdd6 100644 --- a/indra/newview/llfloaterimagepreview.cpp +++ b/indra/newview/llfloaterimagepreview.cpp @@ -34,6 +34,7 @@  #include "llimagepng.h"  #include "llagent.h" +#include "llagentbenefits.h"  #include "llbutton.h"  #include "llcheckboxctrl.h"  #include "llcombobox.h" @@ -144,6 +145,26 @@ BOOL LLFloaterImagePreview::postBuild()  	return TRUE;  } + +//----------------------------------------------------------------------------- +// getExpectedUploadCost() +//----------------------------------------------------------------------------- +S32 LLFloaterImagePreview::getExpectedUploadCost() const +{ +    if (mRawImagep.notNull()) +    { +        if (mRawImagep->getWidth() * mRawImagep->getHeight() > LLAgentBenefits::MIN_2K_TEXTURE_AREA) +        { +            return LLAgentBenefitsMgr::current().get2KTextureUploadCost(); +        } +        else +        { +            return LLAgentBenefitsMgr::current().getTextureUploadCost(); +        } +    } +    return 0; +} +  //-----------------------------------------------------------------------------  // LLFloaterImagePreview()  //----------------------------------------------------------------------------- diff --git a/indra/newview/llfloaterimagepreview.h b/indra/newview/llfloaterimagepreview.h index d034622c35..13e198426b 100644 --- a/indra/newview/llfloaterimagepreview.h +++ b/indra/newview/llfloaterimagepreview.h @@ -81,7 +81,7 @@ protected:  public:  	LLImagePreviewAvatar(S32 width, S32 height);	 -	/*virtual*/ S8 getType() const ; +	S8 getType() const override;  	void setPreviewTarget(const std::string& joint_name, const std::string& mesh_name, LLImageRaw* imagep, F32 distance, BOOL male);  	void setTexture(U32 name) { mTextureName = name; } @@ -113,12 +113,14 @@ public:  	LLFloaterImagePreview(const std::string& filename);  	virtual ~LLFloaterImagePreview(); -	virtual BOOL postBuild(); +	BOOL postBuild() override; + +    S32 getExpectedUploadCost() const override; -	BOOL handleMouseDown(S32 x, S32 y, MASK mask); -	BOOL handleMouseUp(S32 x, S32 y, MASK mask); -	BOOL handleHover(S32 x, S32 y, MASK mask); -	BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);  +	BOOL handleMouseDown(S32 x, S32 y, MASK mask) override; +	BOOL handleMouseUp(S32 x, S32 y, MASK mask) override; +	BOOL handleHover(S32 x, S32 y, MASK mask) override; +	BOOL handleScrollWheel(S32 x, S32 y, S32 clicks) override;  	static void onMouseCaptureLostImagePreview(LLMouseHandler*); @@ -126,7 +128,7 @@ public:  protected:  	static void		onPreviewTypeCommit(LLUICtrl*,void*); -	void			draw(); +	void			draw() override;  	bool			loadImage(const std::string& filename);  	LLPointer<LLImageRaw> mRawImagep; diff --git a/indra/newview/llfloaternamedesc.h b/indra/newview/llfloaternamedesc.h index 589f470e82..cf3b512fab 100644 --- a/indra/newview/llfloaternamedesc.h +++ b/indra/newview/llfloaternamedesc.h @@ -47,7 +47,7 @@ public:  	void		onBtnCancel();  	void		doCommit(); -	S32			getExpectedUploadCost() const; +	virtual S32 getExpectedUploadCost() const;  protected:  	virtual void		onCommit(); diff --git a/indra/newview/llmaterialeditor.cpp b/indra/newview/llmaterialeditor.cpp index b54617870c..fc3c0bb022 100644 --- a/indra/newview/llmaterialeditor.cpp +++ b/indra/newview/llmaterialeditor.cpp @@ -489,11 +489,20 @@ BOOL LLMaterialEditor::postBuild()      }      else      { -        S32 upload_cost = LLAgentBenefitsMgr::current().getTextureUploadCost(); -        getChild<LLUICtrl>("base_color_upload_fee")->setTextArg("[FEE]", llformat("%d", upload_cost)); -        getChild<LLUICtrl>("metallic_upload_fee")->setTextArg("[FEE]", llformat("%d", upload_cost)); -        getChild<LLUICtrl>("emissive_upload_fee")->setTextArg("[FEE]", llformat("%d", upload_cost)); -        getChild<LLUICtrl>("normal_upload_fee")->setTextArg("[FEE]", llformat("%d", upload_cost)); +        S32 upload_cost_base = LLAgentBenefitsMgr::current().getTextureUploadCost(); +        S32 upload_cost_2k = LLAgentBenefitsMgr::current().get2KTextureUploadCost(); + +        bool large_texture = mBaseColorFetched && (mBaseColorFetched->getFullHeight() * mBaseColorFetched->getFullWidth() > LLAgentBenefits::MIN_2K_TEXTURE_AREA); +        getChild<LLUICtrl>("base_color_upload_fee")->setTextArg("[FEE]", llformat("%d", large_texture ? upload_cost_2k : upload_cost_base)); + +        large_texture = mMetallicRoughnessFetched && (mMetallicRoughnessFetched->getFullHeight() * mMetallicRoughnessFetched->getFullWidth() > LLAgentBenefits::MIN_2K_TEXTURE_AREA); +        getChild<LLUICtrl>("metallic_upload_fee")->setTextArg("[FEE]", llformat("%d", large_texture ? upload_cost_2k : upload_cost_base)); + +        large_texture = mEmissiveFetched && (mEmissiveFetched->getFullHeight() * mEmissiveFetched->getFullWidth() > LLAgentBenefits::MIN_2K_TEXTURE_AREA); +        getChild<LLUICtrl>("emissive_upload_fee")->setTextArg("[FEE]", llformat("%d", large_texture ? upload_cost_2k : upload_cost_base)); + +        large_texture = mNormalFetched && (mNormalFetched->getFullHeight() * mNormalFetched->getFullWidth() > LLAgentBenefits::MIN_2K_TEXTURE_AREA); +        getChild<LLUICtrl>("normal_upload_fee")->setTextArg("[FEE]", llformat("%d", large_texture ? upload_cost_2k : upload_cost_base));      }      boost::function<void(LLUICtrl*, void*)> changes_callback = [this](LLUICtrl * ctrl, void* userData) @@ -843,24 +852,54 @@ void LLMaterialEditor::markChangesUnsaved(U32 dirty_flag)      }      S32 upload_texture_count = 0; -    if (mBaseColorTextureUploadId.notNull() && mBaseColorTextureUploadId == getBaseColorId()) +    S32 upload_2k_texture_count = 0; +    if (mBaseColorTextureUploadId.notNull() && mBaseColorTextureUploadId == getBaseColorId() && mBaseColorFetched)      { -        upload_texture_count++; +        if (mBaseColorFetched->getFullHeight() * mBaseColorFetched->getFullWidth() > LLAgentBenefits::MIN_2K_TEXTURE_AREA) +        { +            upload_2k_texture_count++; +        } +        else +        { +            upload_texture_count++; +        }      } -    if (mMetallicTextureUploadId.notNull() && mMetallicTextureUploadId == getMetallicRoughnessId()) +    if (mMetallicTextureUploadId.notNull() && mMetallicTextureUploadId == getMetallicRoughnessId() && mMetallicRoughnessFetched)      { -        upload_texture_count++; +        if (mMetallicRoughnessFetched->getFullHeight() * mMetallicRoughnessFetched->getFullWidth() > LLAgentBenefits::MIN_2K_TEXTURE_AREA) +        { +            upload_2k_texture_count++; +        } +        else +        { +            upload_texture_count++; +        }      } -    if (mEmissiveTextureUploadId.notNull() && mEmissiveTextureUploadId == getEmissiveId()) +    if (mEmissiveTextureUploadId.notNull() && mEmissiveTextureUploadId == getEmissiveId() && mEmissiveFetched)      { -        upload_texture_count++; +        if (mEmissiveFetched->getFullHeight() * mEmissiveFetched->getFullWidth() > LLAgentBenefits::MIN_2K_TEXTURE_AREA) +        { +            upload_2k_texture_count++; +        } +        else +        { +            upload_texture_count++; +        }      } -    if (mNormalTextureUploadId.notNull() && mNormalTextureUploadId == getNormalId()) +    if (mNormalTextureUploadId.notNull() && mNormalTextureUploadId == getNormalId() && mNormalFetched)      { -        upload_texture_count++; +        if (mNormalFetched->getFullHeight() * mNormalFetched->getFullWidth() > LLAgentBenefits::MIN_2K_TEXTURE_AREA) +        { +            upload_2k_texture_count++; +        } +        else +        { +            upload_texture_count++; +        }      }      mExpectedUploadCost = upload_texture_count * LLAgentBenefitsMgr::current().getTextureUploadCost(); +    mExpectedUploadCost += upload_2k_texture_count * LLAgentBenefitsMgr::current().get2KTextureUploadCost();      getChild<LLUICtrl>("total_upload_fee")->setTextArg("[FEE]", llformat("%d", mExpectedUploadCost));  } @@ -3496,6 +3535,10 @@ void LLMaterialEditor::saveTexture(LLImageJ2C* img, const std::string& name, con      buffer.assign((const char*) img->getData(), img->getDataSize());      U32 expected_upload_cost = LLAgentBenefitsMgr::current().getTextureUploadCost(); +    if (img->getWidth() * img->getHeight() > LLAgentBenefits::MIN_2K_TEXTURE_AREA) +    { +        expected_upload_cost = LLAgentBenefitsMgr::current().get2KTextureUploadCost(); +    }      LLSD key = getKey();      std::function<bool(LLUUID itemId, LLSD response, std::string reason)> failed_upload([key](LLUUID assetId, LLSD response, std::string reason) diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 20241aac24..2db431d165 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -276,14 +276,12 @@ BOOL LLPanelMainInventory::postBuild()  	initListCommandsHandlers(); -	const std::string texture_upload_cost_str = std::to_string(LLAgentBenefitsMgr::current().getTextureUploadCost());  	const std::string sound_upload_cost_str = std::to_string(LLAgentBenefitsMgr::current().getSoundUploadCost());  	const std::string animation_upload_cost_str = std::to_string(LLAgentBenefitsMgr::current().getAnimationUploadCost());  	LLMenuGL* menu = (LLMenuGL*)mMenuAddHandle.get();  	if (menu)  	{ -		menu->getChild<LLMenuItemGL>("Upload Image")->setLabelArg("[COST]", texture_upload_cost_str);  		menu->getChild<LLMenuItemGL>("Upload Sound")->setLabelArg("[COST]", sound_upload_cost_str);  		menu->getChild<LLMenuItemGL>("Upload Animation")->setLabelArg("[COST]", animation_upload_cost_str);  	} @@ -2229,11 +2227,9 @@ void LLPanelMainInventory::setUploadCostIfNeeded()  	LLMenuGL* menu = (LLMenuGL*)mMenuAddHandle.get();  	if(mNeedUploadCost && menu)  	{ -		const std::string texture_upload_cost_str = std::to_string(LLAgentBenefitsMgr::current().getTextureUploadCost());  		const std::string sound_upload_cost_str = std::to_string(LLAgentBenefitsMgr::current().getSoundUploadCost());  		const std::string animation_upload_cost_str = std::to_string(LLAgentBenefitsMgr::current().getAnimationUploadCost()); -		menu->getChild<LLView>("Upload Image")->setLabelArg("[COST]", texture_upload_cost_str);  		menu->getChild<LLView>("Upload Sound")->setLabelArg("[COST]", sound_upload_cost_str);  		menu->getChild<LLView>("Upload Animation")->setLabelArg("[COST]", animation_upload_cost_str);  	} diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index c50ae2e153..52e5c5ff12 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -526,10 +526,8 @@ void init_menus()          LLGridManager::getInstance()->isInProductionGrid());  	// *TODO:Also fix cost in llfolderview.cpp for Inventory menus -	const std::string texture_upload_cost_str = std::to_string(LLAgentBenefitsMgr::current().getTextureUploadCost());  	const std::string sound_upload_cost_str = std::to_string(LLAgentBenefitsMgr::current().getSoundUploadCost());  	const std::string animation_upload_cost_str = std::to_string(LLAgentBenefitsMgr::current().getAnimationUploadCost()); -	gMenuHolder->childSetLabelArg("Upload Image", "[COST]", texture_upload_cost_str);  	gMenuHolder->childSetLabelArg("Upload Sound", "[COST]", sound_upload_cost_str);  	gMenuHolder->childSetLabelArg("Upload Animation", "[COST]", animation_upload_cost_str); @@ -9245,6 +9243,8 @@ void LLUploadCostCalculator::calculateCost(const std::string& asset_type_str)  	if (asset_type_str == "texture")  	{ +        // This use minimal texture cost to allow bulk and +        // texture upload menu options to be visible  		upload_cost = LLAgentBenefitsMgr::current().getTextureUploadCost();  	}  	else if (asset_type_str == "animation") diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 5461e0f362..60956fab03 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -612,6 +612,7 @@ bool get_bulk_upload_expected_cost(const std::vector<std::string>& filenames, S3          if (ext == "gltf" || ext == "glb")          {              S32 texture_upload_cost = LLAgentBenefitsMgr::current().getTextureUploadCost(); +            S32 texture_2k_upload_cost = LLAgentBenefitsMgr::current().get2KTextureUploadCost();              tinygltf::Model model; @@ -630,23 +631,52 @@ bool get_bulk_upload_expected_cost(const std::vector<std::string>& filenames, S3                          // Todo: make it account for possibility of same texture in different                          // materials and even in scope of same material                          S32 texture_count = 0; -                        if (material->mTextureId[LLGLTFMaterial::GLTF_TEXTURE_INFO_BASE_COLOR].notNull()) +                        S32 texture_2k_count = 0; +                        if (material->mTextureId[LLGLTFMaterial::GLTF_TEXTURE_INFO_BASE_COLOR].notNull() && material->mBaseColorTexture)                          { -                            texture_count++; +                            if (material->mBaseColorTexture->getFullHeight() * material->mBaseColorTexture->getFullWidth() > LLAgentBenefits::MIN_2K_TEXTURE_AREA) +                            { +                                texture_2k_count++; +                            } +                            else +                            { +                                texture_count++; +                            }                          } -                        if (material->mTextureId[LLGLTFMaterial::GLTF_TEXTURE_INFO_METALLIC_ROUGHNESS].notNull()) +                        if (material->mTextureId[LLGLTFMaterial::GLTF_TEXTURE_INFO_METALLIC_ROUGHNESS].notNull() && material->mMetallicRoughnessTexture)                          { -                            texture_count++; +                            if (material->mMetallicRoughnessTexture->getFullHeight() * material->mMetallicRoughnessTexture->getFullWidth() > LLAgentBenefits::MIN_2K_TEXTURE_AREA) +                            { +                                texture_2k_count++; +                            } +                            else +                            { +                                texture_count++; +                            }                          } -                        if (material->mTextureId[LLGLTFMaterial::GLTF_TEXTURE_INFO_NORMAL].notNull()) +                        if (material->mTextureId[LLGLTFMaterial::GLTF_TEXTURE_INFO_NORMAL].notNull() && material->mNormalTexture)                          { -                            texture_count++; +                            if (material->mNormalTexture->getFullHeight() * material->mNormalTexture->getFullWidth() > LLAgentBenefits::MIN_2K_TEXTURE_AREA) +                            { +                                texture_2k_count++; +                            } +                            else +                            { +                                texture_count++; +                            }                          } -                        if (material->mTextureId[LLGLTFMaterial::GLTF_TEXTURE_INFO_EMISSIVE].notNull()) +                        if (material->mTextureId[LLGLTFMaterial::GLTF_TEXTURE_INFO_EMISSIVE].notNull() && material->mEmissiveTexture)                          { -                            texture_count++; +                            if (material->mEmissiveTexture->getFullHeight() * material->mEmissiveTexture->getFullWidth() > LLAgentBenefits::MIN_2K_TEXTURE_AREA) +                            { +                                texture_2k_count++; +                            } +                            else +                            { +                                texture_count++; +                            }                          } -                        total_cost += texture_count * texture_upload_cost; +                        total_cost += texture_count * texture_upload_cost + texture_2k_count * texture_2k_upload_cost;                          file_count++;                      }                  } diff --git a/indra/newview/skins/default/xui/en/menu_inventory_add.xml b/indra/newview/skins/default/xui/en/menu_inventory_add.xml index 284dd8d9fc..5bf26b41c6 100644 --- a/indra/newview/skins/default/xui/en/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/en/menu_inventory_add.xml @@ -13,7 +13,7 @@               name="upload"               tear_off="true">                  <menu_item_call -                 label="Image (L$[COST])..." +                 label="Image..."                   layout="topleft"                   name="Upload Image"                   shortcut="control|U"> diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 591b5537c7..992b3b2023 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -1612,7 +1612,7 @@ function="World.EnvPreset"           name="Upload"           tear_off="true">              <menu_item_call -             label="Image (L$[COST])..." +             label="Image..."               layout="topleft"               name="Upload Image"               shortcut="control|U">  | 
