diff options
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/cube.dae | 103 | ||||
| -rw-r--r-- | indra/newview/llfloaterland.cpp | 6 | ||||
| -rw-r--r-- | indra/newview/llfloaterland.h | 1 | ||||
| -rw-r--r-- | indra/newview/llfloatermodelpreview.cpp | 26 | ||||
| -rw-r--r-- | indra/newview/llfloatermodelpreview.h | 1 | ||||
| -rw-r--r-- | indra/newview/llfloaterregioninfo.cpp | 6 | ||||
| -rw-r--r-- | indra/newview/llmodelpreview.cpp | 23 | ||||
| -rw-r--r-- | indra/newview/llmodelpreview.h | 15 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_model_preview.xml | 1 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_avatar_list_item.xml | 1 | ||||
| -rwxr-xr-x | indra/newview/viewer_manifest.py | 3 | 
11 files changed, 173 insertions, 13 deletions
| diff --git a/indra/newview/cube.dae b/indra/newview/cube.dae new file mode 100644 index 0000000000..085b2c7309 --- /dev/null +++ b/indra/newview/cube.dae @@ -0,0 +1,103 @@ +<?xml version="1.0" encoding="UTF-8"?> +<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1"> + <asset> +  <contributor> +   modified from https://gist.github.com/wtsnz/bfa11c40e04594b260255b5dc7956f26 +  </contributor> +  <created>2018-10-25T16:29:03Z</created> +  <modified>2022-02-18T00:00:00Z</modified> +  <unit meter="1.000000"/> +  <up_axis>Y_UP</up_axis> + </asset> + + <library_materials> +  <material id="Blue" name="Blue"> +   <instance_effect url="#effect_Blue"/> +  </material> + </library_materials> + + + <library_effects> +  <effect id="effect_Blue"> +   <profile_COMMON> +    <technique sid="common"> +     <phong> +      <ambient> +       <color>0 0 0 1</color> +      </ambient> +      <diffuse> +       <color>0.137255 0.403922 0.870588 1</color> +      </diffuse> +      <specular> +       <color>0.5 0.5 0.5 1</color> +      </specular> +      <shininess> +       <float>16</float> +      </shininess> +      <transparent opaque="A_ONE"> +       <color>0 0 0 1</color> +      </transparent> +      <transparency> +       <float>1</float> +      </transparency> +      <index_of_refraction> +       <float>1</float> +      </index_of_refraction> +     </phong> +    </technique> +   </profile_COMMON> +  </effect> + </library_effects> + + + <library_geometries> +  <geometry id="F1" name="default_physics_shape"> +   <mesh> + +    <source id="cube-vertex-positions"> +     <float_array id="ID2-array" count="72">-0.5 0.5 0.5 -0.5 -0.5 0.5 0.5 -0.5 0.5 0.5 0.5 0.5 -0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 -0.5 -0.5 0.5 -0.5 -0.5 -0.5 -0.5 0.5 -0.5 -0.5 0.5 -0.5 0.5 -0.5 -0.5 0.5 -0.5 0.5 0.5 -0.5 0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 0.5 0.5 -0.5 0.5 0.5 -0.5 -0.5 0.5 0.5 -0.5 0.5 0.5 0.5 0.5 0.5 -0.5 0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 0.5 -0.5 </float_array> +     <technique_common> +      <accessor source="#ID2-array" count="24" stride="3"> +       <param name="X" type="float"/> +       <param name="Y" type="float"/> +       <param name="Z" type="float"/> +      </accessor> +     </technique_common> +    </source> + +    <vertices id="cube-vertices"> +     <input semantic="POSITION" source="#cube-vertex-positions"/> +    </vertices> + +    <triangles count="12" material="geometryElement5"> +     <input semantic="VERTEX" offset="0" source="#cube-vertices"/> +     <p>0 1 2 0 2 3 4 5 6 4 6 7 8 9 10 8 10 11 12 13 14 12 14 15 16 17 18 16 18 19 20 21 22 20 22 23 </p> +    </triangles> +     +   </mesh> +  </geometry> + </library_geometries> + <library_visual_scenes> + + +  <visual_scene id="reportScene"> +  <!-- No Spaces allowed in Name --> +   <node id="F1" name="Face1"> +    <instance_geometry url="#F1"> +     <bind_material> +      <technique_common> +       <instance_material symbol="geometryElement5" target="#Blue"/> +      </technique_common> +     </bind_material> +    </instance_geometry> +   </node> +  </visual_scene> + </library_visual_scenes> + + + <scene> +  <instance_visual_scene url="#reportScene"/> + </scene> + + +</COLLADA> diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 04133f2710..ff2384e382 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -3054,7 +3054,8 @@ BOOL LLPanelLandCovenant::postBuild()  {  	mLastRegionID = LLUUID::null;  	mNextUpdateTime = 0; - +    mTextEstateOwner = getChild<LLTextBox>("estate_owner_text"); +    mTextEstateOwner->setIsFriendCallback(LLAvatarActions::isFriend);  	return TRUE;  } @@ -3162,8 +3163,7 @@ void LLPanelLandCovenant::updateEstateOwnerName(const std::string& name)  	LLPanelLandCovenant* self = LLFloaterLand::getCurrentPanelLandCovenant();  	if (self)  	{ -		LLTextBox* editor = self->getChild<LLTextBox>("estate_owner_text"); -		if (editor) editor->setText(name); +		self->mTextEstateOwner->setText(name);  	}  } diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h index 5d9b411f04..684950d88b 100644 --- a/indra/newview/llfloaterland.h +++ b/indra/newview/llfloaterland.h @@ -413,6 +413,7 @@ protected:  private:  	LLUUID mLastRegionID;  	F64 mNextUpdateTime; //seconds since client start +    LLTextBox* mTextEstateOwner;  };  #endif diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index 0fefb0d432..d99d95934c 100644 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -476,22 +476,25 @@ void LLFloaterModelPreview::loadHighLodModel()  	loadModel(3);  } -void LLFloaterModelPreview::loadModel(S32 lod) +void LLFloaterModelPreview::prepareToLoadModel(S32 lod)  {  	mModelPreview->mLoading = true;  	if (lod == LLModel::LOD_PHYSICS)  	{  		// loading physics from file  		mModelPreview->mPhysicsSearchLOD = lod; +		mModelPreview->mWarnOfUnmatchedPhyicsMeshes = false;  	} - +} +void LLFloaterModelPreview::loadModel(S32 lod) +{ +	prepareToLoadModel(lod);  	(new LLMeshFilePicker(mModelPreview, lod))->getFile();  }  void LLFloaterModelPreview::loadModel(S32 lod, const std::string& file_name, bool force_disable_slm)  { -	mModelPreview->mLoading = true; - +	prepareToLoadModel(lod);  	mModelPreview->loadModel(file_name, lod, force_disable_slm);  } @@ -1060,11 +1063,18 @@ void LLFloaterModelPreview::onPhysicsUseLOD(LLUICtrl* ctrl, void* userdata)  	}  	S32 file_mode = iface->getItemCount() - 1; -	if (which_mode < file_mode) +	S32 cube_mode = file_mode - 1; +	if (which_mode < cube_mode)  	{  		S32 which_lod = num_lods - which_mode;  		sInstance->mModelPreview->setPhysicsFromLOD(which_lod);  	} +	else if (which_mode == cube_mode) +	{ +		std::string path = gDirUtilp->getAppRODataDir(); +		gDirUtilp->append(path, "cube.dae"); +		sInstance->loadModel(LLModel::LOD_PHYSICS, path); +	}  	LLModelPreview *model_preview = sInstance->mModelPreview;  	if (model_preview) @@ -1659,15 +1669,15 @@ LLFloaterModelPreview::DecompRequest::DecompRequest(const std::string& stage, LL  void LLFloaterModelPreview::setCtrlLoadFromFile(S32 lod)  {      if (lod == LLModel::LOD_PHYSICS) -    { +	{          LLComboBox* lod_combo = findChild<LLComboBox>("physics_lod_combo");          if (lod_combo)          { -            lod_combo->setCurrentByIndex(5); +            lod_combo->setCurrentByIndex(lod_combo->getItemCount() - 1);          }      }      else -{ +	{          LLComboBox* lod_combo = findChild<LLComboBox>("lod_source_" + lod_name[lod]);          if (lod_combo)  	{ diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h index b5dab262a3..614087e36d 100644 --- a/indra/newview/llfloatermodelpreview.h +++ b/indra/newview/llfloatermodelpreview.h @@ -223,6 +223,7 @@ private:  	void resetUploadOptions();  	void clearLogTab(); +	void prepareToLoadModel(S32 lod);  	void createSmoothComboBox(LLComboBox* combo_box, float min, float max); diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 19080f05c0..1390f56ea7 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -47,6 +47,7 @@  #include "llagent.h"  #include "llappviewer.h" +#include "llavataractions.h"  #include "llavatarname.h"  #include "llfloateravatarpicker.h"  #include "llbutton.h"  @@ -1826,7 +1827,7 @@ void LLPanelEstateInfo::updateControls(LLViewerRegion* region)  	setCtrlsEnabled(god || owner || manager);  	getChildView("apply_btn")->setEnabled(FALSE); - +    getChildView("estate_owner")->setEnabled(TRUE);  	getChildView("message_estate_btn")->setEnabled(god || owner || manager);  	getChildView("kick_user_from_estate_btn")->setEnabled(god || owner || manager); @@ -1888,6 +1889,8 @@ BOOL LLPanelEstateInfo::postBuild()  	getChild<LLUICtrl>("externally_visible_radio")->setFocus(TRUE); +    getChild<LLTextBox>("estate_owner")->setIsFriendCallback(LLAvatarActions::isFriend); +  	return LLPanelRegionInfo::postBuild();  } @@ -2132,6 +2135,7 @@ BOOL LLPanelEstateCovenant::postBuild()  {  	mEstateNameText = getChild<LLTextBox>("estate_name_text");  	mEstateOwnerText = getChild<LLTextBox>("estate_owner_text"); +    mEstateOwnerText->setIsFriendCallback(LLAvatarActions::isFriend);  	mLastModifiedText = getChild<LLTextBox>("covenant_timestamp_text");  	mEditor = getChild<LLViewerTextEditor>("covenant_editor");  	LLButton* reset_button = getChild<LLButton>("reset_covenant"); diff --git a/indra/newview/llmodelpreview.cpp b/indra/newview/llmodelpreview.cpp index 6b50e1f800..7578d3b9bb 100644 --- a/indra/newview/llmodelpreview.cpp +++ b/indra/newview/llmodelpreview.cpp @@ -86,6 +86,7 @@ static const LLColor4 PREVIEW_DEG_FILL_COL(1.f, 0.f, 0.f, 0.5f);  static const F32 PREVIEW_DEG_EDGE_WIDTH(3.f);  static const F32 PREVIEW_DEG_POINT_SIZE(8.f);  static const F32 PREVIEW_ZOOM_LIMIT(10.f); +static const std::string DEFAULT_PHYSICS_MESH_NAME = "default_physics_shape";  const F32 SKIN_WEIGHT_CAMERA_DISTANCE = 16.f; @@ -465,6 +466,20 @@ void LLModelPreview::rebuildUploadData()                          LLFloaterModelPreview::addStringToLog(out, false);                      }                  } +                if (mWarnOfUnmatchedPhyicsMeshes && !lod_model && (i == LLModel::LOD_PHYSICS)) +                { +                    // Despite the various strategies above, if we don't now have a physics model, we're going to end up with decomposition. +                    // That's ok, but might not what they wanted. Use default_physics_shape if found. +                    std::ostringstream out; +                    out << "No physics model specified for " << instance.mLabel; +                    if (mDefaultPhysicsShapeP) +                    { +                        out << " - using: " << DEFAULT_PHYSICS_MESH_NAME; +                        lod_model = mDefaultPhysicsShapeP; +                    } +                    LL_WARNS() << out.str() << LL_ENDL; +                    LLFloaterModelPreview::addStringToLog(out, !mDefaultPhysicsShapeP); // Flash log tab if no default. +                }                  if (lod_model)                  { @@ -1051,6 +1066,13 @@ void LLModelPreview::loadModelCallback(S32 loaded_lod)          }          else          { +            if (loaded_lod == LLModel::LOD_PHYSICS) +            {   // Explicitly loading physics. See if there is a default mesh. +                LLMatrix4 ignored_transform; // Each mesh that uses this will supply their own. +                mDefaultPhysicsShapeP = nullptr; +                FindModel(mScene[loaded_lod], DEFAULT_PHYSICS_MESH_NAME + getLodSuffix(loaded_lod), mDefaultPhysicsShapeP, ignored_transform); +                mWarnOfUnmatchedPhyicsMeshes = true; +            }              BOOL legacyMatching = gSavedSettings.getBOOL("ImporterLegacyMatching");              if (!legacyMatching)              { @@ -1121,7 +1143,6 @@ void LLModelPreview::loadModelCallback(S32 loaded_lod)                                      LL_WARNS() << out.str() << LL_ENDL;                                      LLFloaterModelPreview::addStringToLog(out, false);                                  } -                                  mModel[loaded_lod][idx]->mLabel = name;                              }                          } diff --git a/indra/newview/llmodelpreview.h b/indra/newview/llmodelpreview.h index 8e59c71a55..f5f4227049 100644 --- a/indra/newview/llmodelpreview.h +++ b/indra/newview/llmodelpreview.h @@ -217,6 +217,21 @@ private:      LLVOAvatar* getPreviewAvatar(void) { return mPreviewAvatar; }      // Count amount of original models, excluding sub-models      static U32 countRootModels(LLModelLoader::model_list models); +    /// Indicates whether we should warn of high-lod meshes that do not have a corresponding physics mesh. +    /// Reset when resetting the modelpreview (i.e., when the uploader dialog is created or reset), and when +    /// about to process a physics file. Set to true immediately after the file is loaded (before rebuildUploadData()). +    /// +    /// (The rules for mapping the correspondence of high-lod meshes to physics meshes are complex. When +    /// lod rendering meshes are used, there is never an unmatched mesh. Nor is there a mismatch when +    /// the high-lod file and physics file have ony one mesh each. In these cases, this value is moot. +    /// When there are multiple meshes in each file, they are matched by name or order, and some meshes +    /// are broken up by limitations into multiple objects, and thus there can be mismatches.) +    bool mWarnOfUnmatchedPhyicsMeshes{false}; +    /// A mesh to use as the default physics shape in only those cases where the physics shape is not otherwise specified. +    /// It is set only when the user chooses a physics shape file that contains a mesh with a name that matches DEFAULT_PHYSICS_MESH_NAME. +    /// It is reset when such a name is not found, and when resetting the modelpreview. +    /// Not read unless mWarnOfUnmatchedPhyicsMeshes is true. +    LLModel* mDefaultPhysicsShapeP{};  protected:      friend class LLModelLoader; diff --git a/indra/newview/skins/default/xui/en/floater_model_preview.xml b/indra/newview/skins/default/xui/en/floater_model_preview.xml index f4cf2cb512..96cb7c8641 100644 --- a/indra/newview/skins/default/xui/en/floater_model_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_model_preview.xml @@ -784,6 +784,7 @@                          <combo_item name="physics_medium"> Medium </combo_item>                          <combo_item name="physics_low">    Low    </combo_item>                          <combo_item name="physics_lowest"> Lowest </combo_item> +                        <combo_item name="physics_bounding_box"> Bounding Box </combo_item>                          <combo_item name="load_from_file"> From file   </combo_item>                      </combo_box>                      <line_editor diff --git a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml index aa1b929412..54f038c24f 100644 --- a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml @@ -155,6 +155,7 @@       right="-3"       mouse_opaque="true"       name="speaking_indicator" +     tool_tip="Voice volume"       visible="true"       width="20" />  </panel> diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index c9aa82f7d4..73634a52c9 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -575,6 +575,7 @@ class WindowsManifest(ViewerManifest):          self.path(src="licenses-win32.txt", dst="licenses.txt")          self.path("featuretable.txt") +        self.path("cube.dae")          with self.prefix(src=pkgdir):              self.path("ca-bundle.crt") @@ -960,6 +961,7 @@ class DarwinManifest(ViewerManifest):                  self.path("licenses-mac.txt", dst="licenses.txt")                  self.path("featuretable_mac.txt") +                self.path("cube.dae")                  self.path("SecondLife.nib")                  with self.prefix(src=pkgdir,dst=""): @@ -1434,6 +1436,7 @@ class LinuxManifest(ViewerManifest):              print("Skipping llcommon.so (assuming llcommon was linked statically)")          self.path("featuretable_linux.txt") +        self.path("cube.dae")          with self.prefix(src=pkgdir):              self.path("ca-bundle.crt") | 
