summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorSeth ProductEngine <slitovchuk@productengine.com>2011-09-02 17:36:54 +0300
committerSeth ProductEngine <slitovchuk@productengine.com>2011-09-02 17:36:54 +0300
commit028c34e0ffd69eeb99f21f8c0bb9b612bd820b10 (patch)
tree4dc7393607fbdd33c7d4503bc951569f88f5fa0e /indra
parent5da2d4c85370ebe1a14ecbebd8e5df7965e9d02e (diff)
SH-2309 Model preview floater LoD tab updated.
- Combo boxes for LoD source added for each level - New option "Use LoD above" added for copying the model from higher LoDs. - Various LoD settings and related controls removed.
Diffstat (limited to 'indra')
-rwxr-xr-xindra/newview/llfloatermodelpreview.cpp389
-rw-r--r--indra/newview/llfloatermodelpreview.h17
-rwxr-xr-xindra/newview/skins/default/xui/en/floater_model_preview.xml790
3 files changed, 780 insertions, 416 deletions
diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp
index 2d18c2bb24..e687b1954c 100755
--- a/indra/newview/llfloatermodelpreview.cpp
+++ b/indra/newview/llfloatermodelpreview.cpp
@@ -396,21 +396,23 @@ BOOL LLFloaterModelPreview::postBuild()
return FALSE;
}
- childSetAction("lod_browse", onBrowseLOD, this);
-
childSetCommitCallback("cancel_btn", onCancel, this);
childSetCommitCallback("crease_angle", onGenerateNormalsCommit, this);
- childSetCommitCallback("generate_normals", onGenerateNormalsCommit, this);
+ getChild<LLCheckBoxCtrl>("gen_normals")->setCommitCallback(boost::bind(&LLFloaterModelPreview::toggleGenarateNormals, this));
childSetCommitCallback("lod_generate", onAutoFillCommit, this);
- childSetCommitCallback("lod_mode", onLODParamCommit, this);
- childSetCommitCallback("lod_error_threshold", onLODParamCommit, this);
- childSetCommitCallback("lod_triangle_limit", onLODParamCommitTriangleLimit, this);
- childSetCommitCallback("build_operator", onLODParamCommit, this);
- childSetCommitCallback("queue_mode", onLODParamCommit, this);
- childSetCommitCallback("border_mode", onLODParamCommit, this);
- childSetCommitCallback("share_tolerance", onLODParamCommit, this);
+ for (S32 lod = 0; lod <= LLModel::LOD_HIGH; ++lod)
+ {
+ LLComboBox* lod_source_combo = getChild<LLComboBox>("lod_source_" + lod_name[lod]);
+ lod_source_combo->setCommitCallback(boost::bind(&LLFloaterModelPreview::onLoDSourceCommit, this, lod));
+ lod_source_combo->setCurrentByIndex(mLODMode[lod]);
+
+ getChild<LLButton>("lod_browse_" + lod_name[lod])->setCommitCallback(boost::bind(&LLFloaterModelPreview::onBrowseLOD, this, lod));
+ getChild<LLComboBox>("lod_mode_" + lod_name[lod])->setCommitCallback(boost::bind(&LLFloaterModelPreview::onLODParamCommit, this, lod, false));
+ getChild<LLSpinCtrl>("lod_error_threshold_" + lod_name[lod])->setCommitCallback(boost::bind(&LLFloaterModelPreview::onLODParamCommit, this, lod, false));
+ getChild<LLSpinCtrl>("lod_triangle_limit_" + lod_name[lod])->setCommitCallback(boost::bind(&LLFloaterModelPreview::onLODParamCommit, this, lod, true));
+ }
childSetCommitCallback("upload_skin", boost::bind(&LLFloaterModelPreview::toggleCalculateButton, this), NULL);
childSetCommitCallback("upload_joints", boost::bind(&LLFloaterModelPreview::toggleCalculateButton, this), NULL);
@@ -431,10 +433,6 @@ BOOL LLFloaterModelPreview::postBuild()
childSetCommitCallback("import_scale", onImportScaleCommit, this);
childSetCommitCallback("pelvis_offset", onPelvisOffsetCommit, this);
- childSetCommitCallback("lod_file_or_limit", refresh, this);
- //childSetCommitCallback("physics_optimize", refresh, this);
- //childSetCommitCallback("physics_use_hull", refresh, this);
-
getChild<LLCheckBoxCtrl>("show_edges")->setCommitCallback(boost::bind(&LLFloaterModelPreview::onViewOptionChecked, this, _1));
getChild<LLCheckBoxCtrl>("show_physics")->setCommitCallback(boost::bind(&LLFloaterModelPreview::onViewOptionChecked, this, _1));
getChild<LLCheckBoxCtrl>("show_textures")->setCommitCallback(boost::bind(&LLFloaterModelPreview::onViewOptionChecked, this, _1));
@@ -694,6 +692,12 @@ void LLFloaterModelPreview::onGenerateNormalsCommit(LLUICtrl* ctrl, void* userda
fp->mModelPreview->generateNormals();
}
+void LLFloaterModelPreview::toggleGenarateNormals()
+{
+ bool enabled = childGetValue("gen_normals").asBoolean();
+ childSetEnabled("crease_angle", enabled);
+}
+
//static
void LLFloaterModelPreview::onExplodeCommit(LLUICtrl* ctrl, void* userdata)
{
@@ -710,19 +714,9 @@ void LLFloaterModelPreview::onAutoFillCommit(LLUICtrl* ctrl, void* userdata)
fp->mModelPreview->genLODs();
}
-//static
-void LLFloaterModelPreview::onLODParamCommit(LLUICtrl* ctrl, void* userdata)
-{
- LLFloaterModelPreview* fp = (LLFloaterModelPreview*) userdata;
-
- fp->mModelPreview->onLODParamCommit(false);
-}
-
-//static
-void LLFloaterModelPreview::onLODParamCommitTriangleLimit(LLUICtrl* ctrl, void* userdata)
+void LLFloaterModelPreview::onLODParamCommit(S32 lod, bool enforce_tri_limit)
{
- LLFloaterModelPreview* fp = (LLFloaterModelPreview*) userdata;
- fp->mModelPreview->onLODParamCommit(true);
+ mModelPreview->onLODParamCommit(lod, enforce_tri_limit);
}
@@ -3484,7 +3478,7 @@ void LLModelPreview::loadModel(std::string filename, S32 lod, bool force_disable
if (lod == mPreviewLOD)
{
- mFMP->childSetText("lod_file", mLODFile[mPreviewLOD]);
+ mFMP->childSetText("lod_file_" + lod_name[lod], mLODFile[lod]);
}
else if (lod == LLModel::LOD_PHYSICS)
{
@@ -3782,21 +3776,21 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim
U32 lod_mode = 0;
- LLCtrlSelectionInterface* iface = mFMP->childGetSelectionInterface("lod_mode");
+ LLCtrlSelectionInterface* iface = mFMP->childGetSelectionInterface("lod_mode_" + lod_name[which_lod]);
if (iface)
{
lod_mode = iface->getFirstSelectedIndex();
}
mRequestedLoDMode[mPreviewLOD] = lod_mode;
- F32 lod_error_threshold = mFMP->childGetValue("lod_error_threshold").asReal();
+ F32 lod_error_threshold = mFMP->childGetValue("lod_error_threshold_" + lod_name[which_lod]).asReal();
if (lod_mode == 0)
{
lod_mode = GLOD_TRIANGLE_BUDGET;
if (which_lod != -1)
{
- limit = mFMP->childGetValue("lod_triangle_limit").asInteger();
+ limit = mFMP->childGetValue("lod_triangle_limit_" + lod_name[which_lod]).asInteger();
}
}
else
@@ -3804,89 +3798,7 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim
lod_mode = GLOD_ERROR_THRESHOLD;
}
- U32 build_operator = 0;
-
- iface = mFMP->childGetSelectionInterface("build_operator");
- if (iface)
- {
- build_operator = iface->getFirstSelectedIndex();
- }
- mRequestedBuildOperator[mPreviewLOD] = build_operator;
-
- if (build_operator == 0)
- {
- build_operator = GLOD_OPERATOR_EDGE_COLLAPSE;
- }
- else
- {
- build_operator = GLOD_OPERATOR_HALF_EDGE_COLLAPSE;
- }
-
- U32 queue_mode=0;
- iface = mFMP->childGetSelectionInterface("queue_mode");
- if (iface)
- {
- queue_mode = iface->getFirstSelectedIndex();
- }
- mRequestedQueueMode[mPreviewLOD] = queue_mode;
-
- if (queue_mode == 0)
- {
- queue_mode = GLOD_QUEUE_GREEDY;
- }
- else if (queue_mode == 1)
- {
- queue_mode = GLOD_QUEUE_LAZY;
- }
- else
- {
- queue_mode = GLOD_QUEUE_INDEPENDENT;
- }
-
- U32 border_mode = 0;
-
- iface = mFMP->childGetSelectionInterface("border_mode");
- if (iface)
- {
- border_mode = iface->getFirstSelectedIndex();
- }
- mRequestedBorderMode[mPreviewLOD] = border_mode;
-
- if (border_mode == 0)
- {
- border_mode = GLOD_BORDER_UNLOCK;
- }
- else
- {
- border_mode = GLOD_BORDER_LOCK;
- }
-
bool object_dirty = false;
- if (border_mode != mBuildBorderMode)
- {
- mBuildBorderMode = border_mode;
- object_dirty = true;
- }
-
- if (queue_mode != mBuildQueueMode)
- {
- mBuildQueueMode = queue_mode;
- object_dirty = true;
- }
-
- if (build_operator != mBuildOperator)
- {
- mBuildOperator = build_operator;
- object_dirty = true;
- }
-
- F32 share_tolerance = mFMP->childGetValue("share_tolerance").asReal();
- if (share_tolerance != mBuildShareTolerance)
- {
- mBuildShareTolerance = share_tolerance;
- object_dirty = true;
- }
- mRequestedShareTolerance[mPreviewLOD] = share_tolerance;
if (mGroup == 0)
{
@@ -3936,18 +3848,6 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim
stop_gloderror();
}
- glodObjectParameteri(mObject[mdl], GLOD_BUILD_OPERATOR, build_operator);
- stop_gloderror();
-
- glodObjectParameteri(mObject[mdl], GLOD_BUILD_QUEUE_MODE, queue_mode);
- stop_gloderror();
-
- glodObjectParameteri(mObject[mdl], GLOD_BUILD_BORDER_MODE, border_mode);
- stop_gloderror();
-
- glodObjectParameterf(mObject[mdl], GLOD_BUILD_SHARE_TOLERANCE, share_tolerance);
- stop_gloderror();
-
glodBuildObject(mObject[mdl]);
stop_gloderror();
}
@@ -4489,147 +4389,140 @@ void LLModelPreview::updateStatusMessages()
}
}
+ if (mFMP->childGetValue("physics_lod_combo").asString() == "From file")
+ {
+ mFMP->childEnable("physics_file");
+ mFMP->childEnable("physics_browse");
+ }
+ else
+ {
+ 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]);
+ }
+
+ mModelUpdatedSignal(true);
+
+}
+
+void LLModelPreview::updateLodControls(S32 lod)
+{
const char* lod_controls[] =
{
- "lod_mode",
- "lod_triangle_limit",
- "lod_error_tolerance",
- "build_operator_text",
- "queue_mode_text",
- "border_mode_text",
- "share_tolerance_text",
- "build_operator",
- "queue_mode",
- "border_mode",
- "share_tolerance"
+ "lod_mode_",
+ "lod_triangle_limit_",
};
const U32 num_lod_controls = sizeof(lod_controls)/sizeof(char*);
const char* file_controls[] =
{
- "lod_browse",
- "lod_file"
+ "lod_browse_",
+ "lod_file_",
};
const U32 num_file_controls = sizeof(file_controls)/sizeof(char*);
- if (fmp)
+ LLFloaterModelPreview* fmp = LLFloaterModelPreview::sInstance;
+ if (!fmp) return;
+
+ LLComboBox* lod_combo = mFMP->findChild<LLComboBox>("lod_source_" + lod_name[lod]);
+ if (!lod_combo) return;
+
+ S32 lod_mode = lod_combo->getCurrentIndex();
+ if (lod_mode == 0) // LoD from file
{
- //enable/disable controls based on radio groups
- if (mFMP->childGetValue("lod_from_file").asBoolean())
- {
- fmp->mLODMode[mPreviewLOD] = 0;
- for (U32 i = 0; i < num_file_controls; ++i)
- {
- mFMP->childEnable(file_controls[i]);
- }
+ fmp->mLODMode[lod] = 0;
+ for (U32 i = 0; i < num_file_controls; ++i)
+ {
+ mFMP->childShow(file_controls[i] + lod_name[lod]);
+ }
- for (U32 i = 0; i < num_lod_controls; ++i)
- {
- mFMP->childDisable(lod_controls[i]);
- }
+ for (U32 i = 0; i < num_lod_controls; ++i)
+ {
+ mFMP->childHide(lod_controls[i] + lod_name[lod]);
+ }
+ }
+ else if (lod_mode == 2) // use LoD above
+ {
+ fmp->mLODMode[lod] = 2;
+ for (U32 i = 0; i < num_file_controls; ++i)
+ {
+ mFMP->childHide(file_controls[i] + lod_name[lod]);
}
- else if (mFMP->childGetValue("lod_none").asBoolean())
+
+ for (U32 i = 0; i < num_lod_controls; ++i)
{
- fmp->mLODMode[mPreviewLOD] = 2;
- for (U32 i = 0; i < num_file_controls; ++i)
- {
- mFMP->childDisable(file_controls[i]);
- }
+ mFMP->childHide(lod_controls[i] + lod_name[lod]);
+ }
- for (U32 i = 0; i < num_lod_controls; ++i)
- {
- mFMP->childDisable(lod_controls[i]);
- }
+ if (lod < LLModel::LOD_HIGH)
+ {
+ mModel[lod] = mModel[lod + 1];
+ mScene[lod] = mScene[lod + 1];
+ mVertexBuffer[lod].clear();
- if (!mModel[mPreviewLOD].empty())
+ // Also update lower LoD
+ if (lod > LLModel::LOD_IMPOSTOR)
{
- mModel[mPreviewLOD].clear();
- mScene[mPreviewLOD].clear();
- mVertexBuffer[mPreviewLOD].clear();
-
- //this can cause phasing issues with the UI, so reenter this function and return
- updateStatusMessages();
- return;
+ updateLodControls(lod - 1);
}
}
- else
- { // auto generate, also the default case for wizard which has no radio selection
- fmp->mLODMode[mPreviewLOD] = 1;
+ }
+ else // auto generate, the default case for all LoDs except High
+ {
+ fmp->mLODMode[lod] = 1;
- //don't actually regenerate lod when refreshing UI
- mLODFrozen = true;
+ //don't actually regenerate lod when refreshing UI
+ mLODFrozen = true;
- for (U32 i = 0; i < num_file_controls; ++i)
- {
- mFMP->childDisable(file_controls[i]);
- }
+ for (U32 i = 0; i < num_file_controls; ++i)
+ {
+ mFMP->childHide(file_controls[i] + lod_name[lod]);
+ }
- for (U32 i = 0; i < num_lod_controls; ++i)
- {
- mFMP->childEnable(lod_controls[i]);
- }
+ for (U32 i = 0; i < num_lod_controls; ++i)
+ {
+ mFMP->childShow(lod_controls[i] + lod_name[lod]);
+ }
- //if (threshold)
- {
- LLSpinCtrl* threshold = mFMP->getChild<LLSpinCtrl>("lod_error_threshold");
- LLSpinCtrl* limit = mFMP->getChild<LLSpinCtrl>("lod_triangle_limit");
- limit->setMaxValue(mMaxTriangleLimit);
- limit->forceSetValue(mRequestedTriangleCount[mPreviewLOD]);
+ LLSpinCtrl* threshold = mFMP->getChild<LLSpinCtrl>("lod_error_threshold_" + lod_name[lod]);
+ LLSpinCtrl* limit = mFMP->getChild<LLSpinCtrl>("lod_triangle_limit_" + lod_name[lod]);
- threshold->forceSetValue(mRequestedErrorThreshold[mPreviewLOD]);
+ limit->setMaxValue(mMaxTriangleLimit);
+ limit->forceSetValue(mRequestedTriangleCount[lod]);
- 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]);
+ threshold->forceSetValue(mRequestedErrorThreshold[lod]);
- if (mRequestedLoDMode[mPreviewLOD] == 0)
- {
- limit->setVisible(true);
- threshold->setVisible(false);
+ mFMP->getChild<LLComboBox>("lod_mode_" + lod_name[lod])->selectNthItem(mRequestedLoDMode[lod]);
- limit->setMaxValue(mMaxTriangleLimit);
- limit->setIncrement(mMaxTriangleLimit/32);
- }
- else
- {
- limit->setVisible(false);
- threshold->setVisible(true);
- }
- }
+ if (mRequestedLoDMode[lod] == 0)
+ {
+ limit->setVisible(true);
+ threshold->setVisible(false);
- mLODFrozen = false;
+ limit->setMaxValue(mMaxTriangleLimit);
+ limit->setIncrement(mMaxTriangleLimit/32);
+ }
+ else
+ {
+ limit->setVisible(false);
+ threshold->setVisible(true);
}
- }
-
- if (mFMP->childGetValue("physics_lod_combo").asString() == "From file")
- {
- mFMP->childEnable("physics_file");
- mFMP->childEnable("physics_browse");
- }
- else
- {
- 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]);
+ mLODFrozen = false;
}
-
- mModelUpdatedSignal(true);
-
}
void LLModelPreview::setPreviewTarget(F32 distance)
@@ -5484,8 +5377,7 @@ void LLModelPreview::setPreviewLOD(S32 lod)
LLComboBox* combo_box = mFMP->getChild<LLComboBox>("preview_lod_combo");
combo_box->setCurrentByIndex((NUM_LOD-1)-mPreviewLOD); // combo box list of lods is in reverse order
- mFMP->childSetTextArg("lod_table_footer", "[DETAIL]", mFMP->getString(lod_name[mPreviewLOD]));
- mFMP->childSetText("lod_file", mLODFile[mPreviewLOD]);
+ mFMP->childSetText("lod_file_" + lod_name[mPreviewLOD], mLODFile[mPreviewLOD]);
// the wizard has three lod drop downs
LLComboBox* combo_box2 = mFMP->getChild<LLComboBox>("preview_lod_combo2");
@@ -5506,25 +5398,16 @@ void LLModelPreview::setPreviewLOD(S32 lod)
mFMP->childSetColor(lod_triangles_name[i], color);
mFMP->childSetColor(lod_vertices_name[i], color);
}
-
- LLFloaterModelPreview* fmp = LLFloaterModelPreview::sInstance;
- if (fmp)
- {
- LLRadioGroup* radio = fmp->getChild<LLRadioGroup>("lod_file_or_limit");
- radio->selectNthItem(fmp->mLODMode[mPreviewLOD]);
- }
}
refresh();
updateStatusMessages();
}
-//static
-void LLFloaterModelPreview::onBrowseLOD(void* data)
+void LLFloaterModelPreview::onBrowseLOD(S32 lod)
{
assert_main_thread();
- LLFloaterModelPreview* mp = (LLFloaterModelPreview*) data;
- mp->loadModel(mp->mModelPreview->mPreviewLOD);
+ loadModel(lod);
}
//static
@@ -5566,8 +5449,7 @@ void LLFloaterModelPreview::onUpload(void* user_data)
}
-//static
-void LLFloaterModelPreview::refresh(LLUICtrl* ctrl, void* user_data)
+void LLFloaterModelPreview::refresh()
{
sInstance->toggleCalculateButton(true);
sInstance->mModelPreview->mDirty = true;
@@ -5588,11 +5470,12 @@ void LLModelPreview::textureLoadedCallback( BOOL success, LLViewerFetchedTexture
}
}
-void LLModelPreview::onLODParamCommit(bool enforce_tri_limit)
+void LLModelPreview::onLODParamCommit(S32 lod, bool enforce_tri_limit)
{
if (!mLODFrozen)
{
- genLODs(mPreviewLOD, 3, enforce_tri_limit);
+ genLODs(lod, 3, enforce_tri_limit);
+ updateLodControls(lod);
updateStatusMessages();
refresh();
}
@@ -5655,6 +5538,12 @@ void LLFloaterModelPreview::toggleCalculateButton(bool visible)
}
}
+void LLFloaterModelPreview::onLoDSourceCommit(S32 lod)
+{
+ mModelPreview->updateLodControls(lod);
+ refresh();
+}
+
void LLFloaterModelPreview::resetDisplayOptions()
{
std::map<std::string,bool>::iterator option_it = mModelPreview->mViewOption.begin();
diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h
index f93d3b9482..d93940efc2 100644
--- a/indra/newview/llfloatermodelpreview.h
+++ b/indra/newview/llfloatermodelpreview.h
@@ -176,13 +176,13 @@ public:
void setDetails(F32 x, F32 y, F32 z, F32 streaming_cost, F32 physics_cost);
- static void onBrowseLOD(void* data);
+ void onBrowseLOD(S32 lod);
static void onReset(void* data);
static void onUpload(void* data);
- static void refresh(LLUICtrl* ctrl, void* data);
+ void refresh();
void loadModel(S32 lod);
void loadModel(S32 lod, const std::string& file_name, bool force_disable_slm = false);
@@ -222,10 +222,12 @@ protected:
static void onGenerateNormalsCommit(LLUICtrl*,void*);
+ void toggleGenarateNormals();
+
static void onAutoFillCommit(LLUICtrl*,void*);
- static void onLODParamCommit(LLUICtrl*,void*);
- static void onLODParamCommitTriangleLimit(LLUICtrl*,void*);
+ void onLODParamCommit(S32 lod, bool enforce_tri_limit);
+
static void onExplodeCommit(LLUICtrl*, void*);
static void onPhysicsParamCommit(LLUICtrl* ctrl, void* userdata);
@@ -264,7 +266,7 @@ protected:
//store which lod mode each LOD is using
// 0 - load from file
// 1 - auto generate
- // 2 - None
+ // 2 - use LoD above
S32 mLODMode[4];
LLMutex* mStatusLock;
@@ -275,6 +277,8 @@ private:
void onClickCalculateBtn();
void toggleCalculateButton();
+ void onLoDSourceCommit(S32 lod);
+
// Toggles between "Calculate weights & fee" and "Upload" buttons.
void toggleCalculateButton(bool visible);
@@ -335,8 +339,9 @@ public:
void saveUploadData(const std::string& filename, bool save_skinweights, bool save_joint_poisitions);
void clearIncompatible(S32 lod);
void updateStatusMessages();
+ void updateLodControls(S32 lod);
void clearGLODGroup();
- void onLODParamCommit(bool enforce_tri_limit);
+ void onLODParamCommit(S32 lod, bool enforce_tri_limit);
const bool getModelPivot( void ) const { return mHasPivot; }
void setHasPivot( bool val ) { mHasPivot = val; }
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 39ef844824..21feb9908e 100755
--- a/indra/newview/skins/default/xui/en/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_model_preview.xml
@@ -100,166 +100,636 @@
name="import_tab"
tab_position="top">
<!-- LOD PANEL -->
- <panel
- border="true"
- label="Level of Detail"
- name="lod_panel"
- help_topic="upload_model_lod">
- LOD TABLE
- <panel
- follows="top|left"
- name="lod table"
- left="0"
- top="0"
- width="300"
- height="163"
- visible="true"
- border="true"
- bevel_style="none" bg_alpha_color="0 0 0 0" bg_opaque_color="0 0 0 0.3">
-
- <text left="10" width="240" bottom="20" height="15" follows="left|top" name="lod_table_header">
- Select Level of Detail:
- </text>
-
- <text valign="center" halign="center" bg_visible="true" bottom_delta="16" left="75" name="triangles" width="65" height="18" follows="left|top" value="Triangles"/>
- <text valign="center" halign="center" bg_visible="true" left_pad="0" width="65" name="vertices" height="18" follows="left|top" value="Vertices"/>
- <text valign="center" halign="center" left_pad="0" name="status" width="65" bg_visible="true" height="18" follows="left|top" value="Status"/>
-
- <text valign="center" halign="center" bg_visible="true" name="high_label" left="10" top_pad="0" width="65" height="18" follows="left|top" value="High"/>
- <text valign="center" halign="center" bg_visible="true" name="high_triangles" left_pad="0" width="65" height="18" follows="left|top" value="0"/>
- <text valign="center" halign="center" bg_visible="true" name="high_vertices" left_pad="0" width="65" height="18" follows="left|top" value="0"/>
- <text valign="center" halign="center" bg_visible="true" name="high_status" left_pad="0" width="65" height="18" follows="left|top" value=""/>
- <icon height="16" width="16" image_name="lag_status_critical.tga" mouse_opaque="true" name="status_icon_high" left_delta="20" top_delta="0" />
-
- <text valign="center" halign="center" bg_visible="true" name="medium_label" left="10" top_pad="0" width="65" height="18" follows="left|top" value="Medium"/>
- <text valign="center" halign="center" bg_visible="true" name="medium_triangles" left_pad="0" width="65" height="18" follows="left|top" value="0"/>
- <text valign="center" halign="center" bg_visible="true" name="medium_vertices" left_pad="0" width="65" height="18" follows="left|top" value="0"/>
- <text valign="center" halign="center" bg_visible="true" name="medium_status" left_pad="0" width="65" height="18" follows="left|top" value=""/>
- <icon height="16" width="16" image_name="lag_status_critical.tga" mouse_opaque="true" name="status_icon_medium" left_delta="20" top_delta="0" />
-
- <text valign="center" halign="center" bg_visible="true" name="low_label" left="10" top_pad="0" width="65" height="18" follows="left|top" value="Low"/>
- <text valign="center" halign="center" bg_visible="true" name="low_triangles" left_pad="0" width="65" height="18" follows="left|top" value="0"/>
- <text valign="center" halign="center" bg_visible="true" name="low_vertices" left_pad="0" width="65" height="18" follows="left|top" value="0"/>
- <text valign="center" halign="center" bg_visible="true" name="low_status" left_pad="0" width="65" height="18" follows="left|top" value=""/>
- <icon height="16" width="16" image_name="lag_status_critical.tga" mouse_opaque="true" name="status_icon_low" left_delta="20" top_delta="0" />
-
- <text valign="center" halign="center" bg_visible="true" name="lowest_label" left="10" top_pad="0" width="65" height="18" follows="left|top" value="Lowest"/>
- <text valign="center" halign="center" bg_visible="true" name="lowest_triangles" left_pad="0" width="65" height="18" follows="left|top" value="0"/>
- <text valign="center" halign="center" bg_visible="true" name="lowest_vertices" left_pad="0" width="65" height="18" follows="left|top" value="0"/>
- <text valign="center" halign="center" bg_visible="true" name="lowest_status" left_pad="0" width="65" height="18" follows="left|top" value=""/>
- <icon height="16" width="16" image_name="lag_status_critical.tga" mouse_opaque="true" name="status_icon_lowest" left_delta="20" top_delta="0" />
-
- <text left="10" width="240" height="15" top_pad="15" follows="left|top" name="lod_table_footer">
- Level of Detail: [DETAIL]
- </text>
-
- <icon height="16" width="16" left="20" follows="left|top" name="lod_status_message_icon"/>
- <text left_pad="5" width="230" height="28" follows="left|top" top_pad="-15" wrap="true" name="lod_status_message_text"/>
- </panel>
-
- LOD MESH
- <panel
- follows="top|left"
- name="mesh"
- left="0"
- top_pad="0"
- width="300"
- height="237"
- visible="true"
- border="true"
- bevel_style="none" bg_alpha_color="0 0 0 0" bg_opaque_color="0 0 0 0.3">
-
- <text top_pad="5" left="10" name="mesh_label" height="15" follows="left|top">
- Mesh
- </text>
-
- <radio_group follows="top|left" height="210" left="30" name="lod_file_or_limit" width="240" value="lod_from_file">
- <radio_item bottom="195" label="Load from file" name="lod_from_file"/>
- <radio_item bottom="150" label="Auto generate" name="lod_auto_generate"/>
- <radio_item bottom="0" label="None" name="lod_none"/>
- </radio_group>
-
- <line_editor follows="left|top" bottom_delta="-170" width="140" left="45" value="" name="lod_file" height="20"/>
- <button bottom_delta="3" name="lod_browse" label="Browse..." left_pad="5" follows="left|top" width="70" height="25"/>
-
- <combo_box follows="top|left" name="lod_mode" top_pad="22" width="100" left="45" height="20">
- <combo_item name="triangle_limit">
- Triangle Limit
- </combo_item>
- <combo_item name="error_threshold">
- Error Threshold
- </combo_item>
- </combo_box>
- <spinner follows="top|left" name="lod_triangle_limit" increment="10" left_pad="5" height="20" width="100" decimal_digits="0" enabled="true"/>
- <spinner left_delta="0" bottom_delta="0" increment="0.01" follows="top|left" name="lod_error_threshold" min_val="0" max_val="100" height="20" width="100" decimal_digits="3" visible="false" enabled="true"/>
-
- <text follows="top|left" name="build_operator_text" left="45" top_pad="10" width="100" height="15" text_readonly_color="LabelDisabledColor">
- Build Operator:
- </text>
- <text follows="top|left" name="queue_mode_text" left_pad="5" width="100" height="15" text_readonly_color="LabelDisabledColor">
- Queue Mode:
- </text>
- <combo_box follows="top|left" name="build_operator" top_pad="5" left="45" width="100" height="20">
- <combo_item name="edge_collapse">
- Edge Collapse
- </combo_item>
- <combo_item name="half_edge_collapse">
- Half Edge Collapse
- </combo_item>
- </combo_box>
-
- <combo_box follows="top|left" name="queue_mode" left_pad="5" width="100" height="20">
- <combo_item name="greedy">
- Greedy
- </combo_item>
- <combo_item name="lazy">
- Lazy
- </combo_item>
- <combo_item name="independent">
- Independent
- </combo_item>
- </combo_box>
-
- <text top_pad="10" name="border_mode_text" left="45" follows="left|top" width="100" height="15" text_readonly_color="LabelDisabledColor">
- Border Mode:
- </text>
-
- <text left_pad="5" name="share_tolderance_text" follows="left|top" width="100" height="15" text_readonly_color="LabelDisabledColor">
- Share Tolerance:
- </text>
-
- <combo_box follows="left|top" left="45" height="20" name="border_mode" width="100">
- <combo_item name="border_unlock">
- Unlock
- </combo_item>
- <combo_item name="border_lock">
- Lock
- </combo_item>
- </combo_box>
- <spinner follows="left|top" name="share_tolerance" left_pad="5" width="100" decimal_digits="5" initial_value="0.00001" height="20"/>
- </panel>
-
- LOD GENERATE NORMALS
- <panel
- follows="top|left"
- name="generate normals"
- left="0"
- top_pad="0"
- width="300"
- height="46"
- visible="true"
- border="true"
- bevel_style="none" bg_alpha_color="0 0 0 0" bg_opaque_color="0 0 0 0.3">
-
- <text left="10" name="gen_normals_label" top_pad="5" follows="top|left" width="240" height="15">
- Generate Normals
- </text>
- <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"/>
- </panel>
- </panel>
+ <panel
+ help_topic="upload_model_lod"
+ label="Level of Detail"
+ layout="topleft"
+ name="lod_panel"
+ title="Level of Detail">
+ <view_border
+ bevel_style="none"
+ follows="top|left"
+ height="275"
+ layout="topleft"
+ left="3"
+ name="lod_tab_border"
+ top_pad="0"
+ width="619" />
+ <text
+ bg_visible="true"
+ follows="left|top"
+ height="18"
+ initial_value="Source"
+ layout="topleft"
+ left="75"
+ name="source"
+ top="15"
+ valign="center"
+ value="Source"
+ width="335" />
+ <text
+ bg_visible="true"
+ follows="left|top"
+ halign="right"
+ height="18"
+ initial_value="Triangles"
+ layout="topleft"
+ left_pad="0"
+ name="triangles"
+ top_delta="0"
+ valign="center"
+ value="Triangles"
+ width="65" />
+ <text
+ bg_visible="true"
+ follows="left|top"
+ halign="right"
+ height="18"
+ initial_value="Vertices"
+ layout="topleft"
+ left_pad="0"
+ name="vertices"
+ valign="center"
+ value="Vertices"
+ width="65" />
+ <text
+ bg_visible="true"
+ follows="left|top"
+ height="18"
+ initial_value="High"
+ layout="topleft"
+ left="10"
+ name="high_label"
+ top_pad="10"
+ valign="center"
+ value="High"
+ width="65" />
+ <combo_box
+ follows="top|left"
+ height="20"
+ layout="topleft"
+ left_pad="0"
+ name="lod_source_high"
+ top_delta="-3"
+ width="135">
+ <item
+ id="Load from file"
+ value="Load from file" />
+ <item
+ id="Generate"
+ value="Generate" />
+ </combo_box>
+ <line_editor
+ follows="left|top"
+ height="20"
+ initial_value=""
+ layout="topleft"
+ left_pad="5"
+ name="lod_file_high"
+ top_delta="0"
+ value=""
+ width="120" />
+ <button
+ follows="left|top"
+ height="20"
+ label="Browse..."
+ layout="topleft"
+ left_pad="5"
+ name="lod_browse_high"
+ top_delta="0"
+ width="70" />
+ <combo_box
+ follows="top|left"
+ height="20"
+ layout="topleft"
+ left="215"
+ name="lod_mode_high"
+ top_delta="0"
+ visible="false"
+ width="135">
+ <item
+ id="Triangle Limit"
+ value="Triangle Limit" />
+ <item
+ id="Error Threshold"
+ value="Error Threshold" />
+ </combo_box>
+ <spinner
+ decimal_digits="0"
+ follows="top|left"
+ height="20"
+ increment="10"
+ layout="topleft"
+ left_pad="5"
+ name="lod_triangle_limit_high"
+ visible="false"
+ width="55" />
+ <spinner
+ follows="top|left"
+ height="20"
+ increment="0.01"
+ layout="topleft"
+ left_delta="0"
+ max_val="100"
+ name="lod_error_threshold_high"
+ top_delta="0"
+ visible="false"
+ width="55" />
+ <text
+ bg_visible="true"
+ follows="left|top"
+ halign="right"
+ height="18"
+ initial_value="0"
+ layout="topleft"
+ left_pad="0"
+ name="high_triangles"
+ valign="center"
+ value="0"
+ width="65" />
+ <text
+ bg_visible="true"
+ follows="left|top"
+ halign="right"
+ height="18"
+ initial_value="0"
+ layout="topleft"
+ left_pad="0"
+ name="high_vertices"
+ valign="center"
+ value="0"
+ width="65" />
+ <text
+ bg_visible="true"
+ follows="left|top"
+ halign="center"
+ height="18"
+ initial_value=""
+ layout="topleft"
+ left_pad="0"
+ name="high_status"
+ valign="center"
+ value=""
+ width="65" />
+ <icon
+ height="16"
+ image_name="lag_status_critical.tga"
+ layout="topleft"
+ left_delta="20"
+ mouse_opaque="true"
+ name="status_icon_high"
+ top_delta="0"
+ width="16" />
+ <text
+ bg_visible="true"
+ follows="left|top"
+ height="18"
+ initial_value="Medium"
+ layout="topleft"
+ left="10"
+ name="medium_label"
+ top_pad="15"
+ valign="center"
+ value="Medium"
+ width="65" />
+ <combo_box
+ follows="top|left"
+ height="20"
+ layout="topleft"
+ left_pad="0"
+ name="lod_source_medium"
+ top_delta="-3"
+ width="135">
+ <item
+ id="Load from file"
+ value="Load from file" />
+ <item
+ id="Generate"
+ value="Generate" />
+ <item
+ id="Use LoD above"
+ value="Use LoD above" />
+ </combo_box>
+ <line_editor
+ follows="left|top"
+ height="20"
+ initial_value=""
+ layout="topleft"
+ left_pad="5"
+ name="lod_file_medium"
+ top_delta="0"
+ value=""
+ visible="false"
+ width="120" />
+ <button
+ follows="left|top"
+ height="20"
+ label="Browse..."
+ layout="topleft"
+ left_pad="5"
+ name="lod_browse_medium"
+ top_delta="0"
+ visible="false"
+ width="70" />
+ <combo_box
+ follows="top|left"
+ height="20"
+ layout="topleft"
+ left="215"
+ name="lod_mode_medium"
+ top_delta="0"
+ width="135">
+ <item
+ id="Triangle Limit"
+ value="Triangle Limit" />
+ <item
+ id="Error Threshold"
+ value="Error Threshold" />
+ </combo_box>
+ <spinner
+ decimal_digits="0"
+ follows="top|left"
+ height="20"
+ increment="10"
+ layout="topleft"
+ left_pad="5"
+ name="lod_triangle_limit_medium"
+ width="55" />
+ <spinner
+ follows="top|left"
+ height="20"
+ increment="0.01"
+ layout="topleft"
+ left_delta="0"
+ max_val="100"
+ name="lod_error_threshold_medium"
+ top_delta="0"
+ visible="false"
+ width="55" />
+ <text
+ bg_visible="true"
+ follows="left|top"
+ halign="right"
+ height="18"
+ initial_value="0"
+ layout="topleft"
+ left_pad="0"
+ name="medium_triangles"
+ valign="center"
+ value="0"
+ width="65" />
+ <text
+ bg_visible="true"
+ follows="left|top"
+ halign="right"
+ height="18"
+ initial_value="0"
+ layout="topleft"
+ left_pad="0"
+ name="medium_vertices"
+ valign="center"
+ value="0"
+ width="65" />
+ <text
+ bg_visible="true"
+ follows="left|top"
+ halign="center"
+ height="18"
+ initial_value=""
+ layout="topleft"
+ left_pad="0"
+ name="medium_status"
+ valign="center"
+ value=""
+ width="65" />
+ <icon
+ height="16"
+ image_name="lag_status_critical.tga"
+ layout="topleft"
+ left_delta="20"
+ mouse_opaque="true"
+ name="status_icon_medium"
+ top_delta="0"
+ width="16" />
+ <text
+ bg_visible="true"
+ follows="left|top"
+ height="18"
+ initial_value="Low"
+ layout="topleft"
+ left="10"
+ name="low_label"
+ top_pad="15"
+ valign="center"
+ value="Low"
+ width="65" />
+ <combo_box
+ follows="top|left"
+ height="20"
+ layout="topleft"
+ left_pad="0"
+ name="lod_source_low"
+ top_delta="-3"
+ width="135">
+ <item
+ id="Load from file"
+ value="Load from file" />
+ <item
+ id="Generate"
+ value="Generate" />
+ <item
+ id="Use LoD above"
+ value="Use LoD above" />
+ </combo_box>
+ <line_editor
+ follows="left|top"
+ height="20"
+ initial_value=""
+ layout="topleft"
+ left_pad="5"
+ name="lod_file_low"
+ top_delta="0"
+ value=""
+ visible="false"
+ width="120" />
+ <button
+ follows="left|top"
+ height="20"
+ label="Browse..."
+ layout="topleft"
+ left_pad="5"
+ name="lod_browse_low"
+ top_delta="0"
+ visible="false"
+ width="70" />
+ <combo_box
+ follows="top|left"
+ height="20"
+ layout="topleft"
+ left="215"
+ name="lod_mode_low"
+ top_delta="0"
+ width="135">
+ <item
+ id="Triangle Limit"
+ value="Triangle Limit" />
+ <item
+ id="Error Threshold"
+ value="Error Threshold" />
+ </combo_box>
+ <spinner
+ decimal_digits="0"
+ follows="top|left"
+ height="20"
+ increment="10"
+ layout="topleft"
+ left_pad="5"
+ name="lod_triangle_limit_low"
+ width="55" />
+ <spinner
+ follows="top|left"
+ height="20"
+ increment="0.01"
+ layout="topleft"
+ left_delta="0"
+ max_val="100"
+ name="lod_error_threshold_low"
+ top_delta="0"
+ visible="false"
+ width="55" />
+ <text
+ bg_visible="true"
+ follows="left|top"
+ halign="right"
+ height="18"
+ initial_value="0"
+ layout="topleft"
+ left_pad="0"
+ name="low_triangles"
+ valign="center"
+ value="0"
+ width="65" />
+ <text
+ bg_visible="true"
+ follows="left|top"
+ halign="right"
+ height="18"
+ initial_value="0"
+ layout="topleft"
+ left_pad="0"
+ name="low_vertices"
+ valign="center"
+ value="0"
+ width="65" />
+ <text
+ bg_visible="true"
+ follows="left|top"
+ halign="center"
+ height="18"
+ initial_value=""
+ layout="topleft"
+ left_pad="0"
+ name="low_status"
+ valign="center"
+ value=""
+ width="65" />
+ <icon
+ height="16"
+ image_name="lag_status_critical.tga"
+ layout="topleft"
+ left_delta="20"
+ mouse_opaque="true"
+ name="status_icon_low"
+ top_delta="0"
+ width="16" />
+ <text
+ bg_visible="true"
+ follows="left|top"
+ height="18"
+ initial_value="Lowest"
+ layout="topleft"
+ left="10"
+ name="lowest_label"
+ top_pad="15"
+ valign="center"
+ value="Lowest"
+ width="65" />
+ <combo_box
+ follows="top|left"
+ height="20"
+ layout="topleft"
+ left_pad="0"
+ name="lod_source_lowest"
+ top_delta="-3"
+ width="135">
+ <item
+ id="Load from file"
+ value="Load from file" />
+ <item
+ id="Generate"
+ value="Generate" />
+ <item
+ id="Use LoD above"
+ value="Use LoD above" />
+ </combo_box>
+ <line_editor
+ follows="left|top"
+ height="20"
+ initial_value=""
+ layout="topleft"
+ left_pad="5"
+ name="lod_file_lowest"
+ top_delta="0"
+ value=""
+ visible="false"
+ width="120" />
+ <button
+ follows="left|top"
+ height="20"
+ label="Browse..."
+ layout="topleft"
+ left_pad="5"
+ name="lod_browse_lowest"
+ top_delta="0"
+ visible="false"
+ width="70" />
+ <combo_box
+ follows="top|left"
+ height="20"
+ layout="topleft"
+ left="215"
+ name="lod_mode_lowest"
+ top_delta="0"
+ width="135">
+ <item
+ id="Triangle Limit"
+ value="Triangle Limit" />
+ <item
+ id="Error Threshold"
+ value="Error Threshold" />
+ </combo_box>
+ <spinner
+ decimal_digits="0"
+ follows="top|left"
+ height="20"
+ increment="10"
+ layout="topleft"
+ left_pad="5"
+ name="lod_triangle_limit_lowest"
+ width="55" />
+ <spinner
+ follows="top|left"
+ height="20"
+ increment="0.01"
+ layout="topleft"
+ left_delta="0"
+ max_val="100"
+ name="lod_error_threshold_lowest"
+ top_delta="0"
+ visible="false"
+ width="55" />
+ <text
+ bg_visible="true"
+ follows="left|top"
+ halign="right"
+ height="18"
+ initial_value="0"
+ layout="topleft"
+ left_pad="0"
+ name="lowest_triangles"
+ valign="center"
+ value="0"
+ width="65" />
+ <text
+ bg_visible="true"
+ follows="left|top"
+ halign="right"
+ height="18"
+ initial_value="0"
+ layout="topleft"
+ left_pad="0"
+ name="lowest_vertices"
+ valign="center"
+ value="0"
+ width="65" />
+ <text
+ bg_visible="true"
+ follows="left|top"
+ halign="center"
+ height="18"
+ initial_value=""
+ layout="topleft"
+ left_pad="0"
+ name="lowest_status"
+ valign="center"
+ value=""
+ width="65" />
+ <icon
+ height="16"
+ image_name="lag_status_critical.tga"
+ layout="topleft"
+ left_delta="20"
+ mouse_opaque="true"
+ name="status_icon_lowest"
+ top_delta="0"
+ width="16" />
+ <icon
+ height="16"
+ layout="topleft"
+ left="10"
+ name="lod_status_message_icon"
+ top_pad="20"
+ width="16" />
+ <text
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left_pad="5"
+ name="lod_status_message_text"
+ top_delta="0"
+ width="584"
+ word_wrap="true"
+ wrap="true" />
+ <view_border
+ bevel_style="none"
+ follows="top|left"
+ height="0"
+ layout="topleft"
+ left="10"
+ name="lod_tab_border"
+ top_pad="20"
+ width="605" />
+ <check_box
+ follows="top|left"
+ height="15"
+ label="Generate Normals"
+ layout="topleft"
+ left="10"
+ name="gen_normals"
+ top_pad="20" />
+ <text
+ enabled="false"
+ follows="top|left"
+ height="15"
+ initial_value="Crease Angle:"
+ layout="topleft"
+ left="200"
+ name="crease_label"
+ top_delta="0"
+ value="Crease Angle:"
+ width="100" />
+ <spinner
+ enabled="false"
+ follows="top|left"
+ height="20"
+ initial_value="75"
+ layout="topleft"
+ left_pad="5"
+ max_val="180"
+ name="crease_angle"
+ value="75"
+ width="60" />
+ </panel>
<!-- PHYSYCS PANEL -->
<panel
help_topic="upload_model_physics"