diff options
| author | Dave Parks <davep@lindenlab.com> | 2011-05-16 19:51:16 -0500 | 
|---|---|---|
| committer | Dave Parks <davep@lindenlab.com> | 2011-05-16 19:51:16 -0500 | 
| commit | a2d8f0cb3308fed1cb2c8d5fa8fb74ec4cefa45b (patch) | |
| tree | df6ee4e2b7d3a1a93296d07f857ea65a39f7af4f /indra/newview | |
| parent | d2f138b4f348aac04d7940635b3ef44231291080 (diff) | |
SH-795 Cache and display LoD parameters etc for each lod.
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/llfloatermodelpreview.cpp | 63 | ||||
| -rw-r--r-- | indra/newview/llfloatermodelpreview.h | 9 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_model_preview.xml | 2 | 
3 files changed, 60 insertions, 14 deletions
diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index 44204e947b..b7e9865228 100644 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -2597,6 +2597,7 @@ LLModelPreview::LLModelPreview(S32 width, S32 height, LLFloater* fmp)  	mLoading = false;  	mLoadState = LLModelLoader::STARTING;  	mGroup = 0; +	mLODFrozen = false;  	mBuildShareTolerance = 0.f;  	mBuildQueueMode = GLOD_QUEUE_GREEDY;  	mBuildBorderMode = GLOD_BORDER_UNLOCK; @@ -2605,6 +2606,13 @@ LLModelPreview::LLModelPreview(S32 width, S32 height, LLFloater* fmp)  	for (U32 i = 0; i < LLModel::NUM_LODS; ++i)  	{  		mRequestedTriangleCount[i] = 0; +		mRequestedCreaseAngle[i] = -1.f; +		mRequestedLoDMode[i] = 0; +		mRequestedErrorThreshold[i] = 0.f; +		mRequestedBuildOperator[i] = 0; +		mRequestedQueueMode[i] = 0; +		mRequestedBorderMode[i] = 0; +		mRequestedShareTolerance[i] = 0.f;  	}  	mViewOption["show_textures"] = false; @@ -3247,6 +3255,8 @@ void LLModelPreview::generateNormals()  	F32 angle_cutoff = mFMP->childGetValue("crease_angle").asReal(); +	mRequestedCreaseAngle[which_lod] = angle_cutoff; +  	angle_cutoff *= DEG_TO_RAD;  	if (which_lod == 3 && !mBaseModel.empty()) @@ -3266,7 +3276,7 @@ void LLModelPreview::generateNormals()  	mVertexBuffer[which_lod].clear();  	refresh(); - +	updateStatusMessages();  }  void LLModelPreview::clearMaterials() @@ -3342,6 +3352,7 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim  	{  		lod_mode = iface->getFirstSelectedIndex();  	} +	mRequestedLoDMode[mPreviewLOD] = lod_mode;  	F32 lod_error_threshold = mFMP->childGetValue("lod_error_threshold").asReal(); @@ -3365,6 +3376,7 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim  	{  		build_operator = iface->getFirstSelectedIndex();  	} +	mRequestedBuildOperator[mPreviewLOD] = build_operator;   	if (build_operator == 0)  	{ @@ -3381,6 +3393,7 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim  	{  		queue_mode = iface->getFirstSelectedIndex();  	} +	mRequestedQueueMode[mPreviewLOD] = queue_mode;  	if (queue_mode == 0)  	{ @@ -3402,6 +3415,7 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim  	{  		border_mode = iface->getFirstSelectedIndex();  	} +	mRequestedBorderMode[mPreviewLOD] = border_mode;  	if (border_mode == 0)  	{ @@ -3437,6 +3451,7 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim  		mBuildShareTolerance = share_tolerance;  		object_dirty = true;  	} +	mRequestedShareTolerance[mPreviewLOD] = share_tolerance;  	if (mGroup == 0)  	{ @@ -3545,6 +3560,7 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim  		U32 submeshes = 0;  		mRequestedTriangleCount[lod] = triangle_count; +		mRequestedErrorThreshold[lod] = lod_error_threshold;  		glodGroupParameteri(mGroup, GLOD_ADAPT_MODE, lod_mode);  		stop_gloderror(); @@ -4021,6 +4037,9 @@ void LLModelPreview::updateStatusMessages()  		{	// auto generate, also the default case for wizard which has no radio selection  			fmp->mLODMode[mPreviewLOD] = 1; +			//don't actually regenerate lod when refreshing UI +			mLODFrozen = true; +  			for (U32 i = 0; i < num_file_controls; ++i)  			{  				mFMP->childDisable(file_controls[i]); @@ -4033,20 +4052,21 @@ void LLModelPreview::updateStatusMessages()  			//if (threshold)  			{	 -				U32 lod_mode = 0; -				LLCtrlSelectionInterface* iface = mFMP->childGetSelectionInterface("lod_mode"); -				if (iface) -				{ -					lod_mode = iface->getFirstSelectedIndex(); -				} -  				LLSpinCtrl* threshold = mFMP->getChild<LLSpinCtrl>("lod_error_threshold");  				LLSpinCtrl* limit = mFMP->getChild<LLSpinCtrl>("lod_triangle_limit");  				limit->setMaxValue(mMaxTriangleLimit);  				limit->forceSetValue(mRequestedTriangleCount[mPreviewLOD]); -				if (lod_mode == 0) +				threshold->forceSetValue(mRequestedErrorThreshold[mPreviewLOD]); + +				mFMP->getChild<LLComboBox>("lod_mode")->selectNthItem(mRequestedLoDMode[mPreviewLOD]); +				mFMP->getChild<LLComboBox>("build_operator")->selectNthItem(mRequestedBuildOperator[mPreviewLOD]); +				mFMP->getChild<LLComboBox>("queue_mode")->selectNthItem(mRequestedQueueMode[mPreviewLOD]); +				mFMP->getChild<LLComboBox>("border_mode")->selectNthItem(mRequestedBorderMode[mPreviewLOD]); +				mFMP->getChild<LLSpinCtrl>("share_tolerance")->setValue(mRequestedShareTolerance[mPreviewLOD]); + +				if (mRequestedLoDMode[mPreviewLOD] == 0)  				{  					limit->setVisible(true);  					threshold->setVisible(false); @@ -4060,6 +4080,8 @@ void LLModelPreview::updateStatusMessages()  					threshold->setVisible(true);  				}  			} + +			mLODFrozen = false;  		}  	} @@ -4075,6 +4097,20 @@ void LLModelPreview::updateStatusMessages()  		mFMP->childDisable("physics_file");  		mFMP->childDisable("physics_browse");  	} + +	LLSpinCtrl* crease = mFMP->getChild<LLSpinCtrl>("crease_angle"); +	 +	if (mRequestedCreaseAngle[mPreviewLOD] == -1.f) +	{ +		mFMP->childSetColor("crease_label", LLColor4::grey); +		crease->forceSetValue(75.f); +	} +	else +	{ +		mFMP->childSetColor("crease_label", LLColor4::white); +		crease->forceSetValue(mRequestedCreaseAngle[mPreviewLOD]); +	} +  }  void LLModelPreview::setPreviewTarget(F32 distance) @@ -4925,9 +4961,12 @@ void LLModelPreview::textureLoadedCallback( BOOL success, LLViewerFetchedTexture  void LLModelPreview::onLODParamCommit(bool enforce_tri_limit)  { -	genLODs(mPreviewLOD, 3, enforce_tri_limit); -	updateStatusMessages(); -	refresh(); +	if (!mLODFrozen) +	{ +		genLODs(mPreviewLOD, 3, enforce_tri_limit); +		updateStatusMessages(); +		refresh(); +	}  }  LLFloaterModelPreview::DecompRequest::DecompRequest(const std::string& stage, LLModel* mdl) diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h index 4d8b46807f..b54a72e555 100644 --- a/indra/newview/llfloatermodelpreview.h +++ b/indra/newview/llfloatermodelpreview.h @@ -373,13 +373,20 @@ public:  	std::map<std::string, bool> mViewOption;  	//GLOD object parameters (must rebuild object if these change) +	bool mLODFrozen;  	F32 mBuildShareTolerance;  	U32 mBuildQueueMode;  	U32 mBuildOperator;  	U32 mBuildBorderMode; +	U32 mRequestedLoDMode[LLModel::NUM_LODS];  	S32 mRequestedTriangleCount[LLModel::NUM_LODS]; +	F32 mRequestedErrorThreshold[LLModel::NUM_LODS]; +	U32 mRequestedBuildOperator[LLModel::NUM_LODS]; +	U32 mRequestedQueueMode[LLModel::NUM_LODS]; +	U32 mRequestedBorderMode[LLModel::NUM_LODS]; +	F32 mRequestedShareTolerance[LLModel::NUM_LODS]; +	F32 mRequestedCreaseAngle[LLModel::NUM_LODS]; -	  	LLModelLoader* mModelLoader;  	LLModelLoader::scene mScene[LLModel::NUM_LODS]; 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 d08c3e7078..374eeeb0de 100644 --- a/indra/newview/skins/default/xui/en/floater_model_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_model_preview.xml @@ -219,7 +219,7 @@        <text left="10" top_pad="35" follows="top|left" width="240" height="15">          Generate Normals        </text> -      <text left="35" top_pad="5" follows="top|left" width="100" height="15"> +      <text left="35" top_pad="5" follows="top|left" width="100" height="15" name="crease_label">          Crease Angle:        </text>        <spinner follows="top|left" left_pad="5" min_val="0" max_val="180" value="75" width="60" height="20" name="crease_angle"/>    | 
