diff options
author | prep <prep@lindenlab.com> | 2011-09-14 10:41:52 -0400 |
---|---|---|
committer | prep <prep@lindenlab.com> | 2011-09-14 10:41:52 -0400 |
commit | df40eca093b1a238daea9cd23c44f6e39719bf51 (patch) | |
tree | 205c15512a7fa363ebcea0de8e3ce16a3a58ca38 /indra/newview/llfloatermodelpreview.cpp | |
parent | 4efca483d7dc8c8a50ebe247c6c163c263ed20f5 (diff) | |
parent | a250df980b3f37e245d30e51ab65831ae1de0ce0 (diff) |
merge
Diffstat (limited to 'indra/newview/llfloatermodelpreview.cpp')
-rwxr-xr-x | indra/newview/llfloatermodelpreview.cpp | 46 |
1 files changed, 40 insertions, 6 deletions
diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index 7ef1ff17ea..75e775072b 100755 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -3493,6 +3493,13 @@ void LLModelPreview::loadModel(std::string filename, S32 lod, bool force_disable LLMutexLock lock(this); + if (lod < LLModel::LOD_IMPOSTOR || lod > LLModel::NUM_LODS - 1) + { + llwarns << "Invalid level of detail: " << lod << llendl; + assert(lod >= LLModel::LOD_IMPOSTOR && lod < LLModel::NUM_LODS); + return; + } + // This triggers if you bring up the file picker and then hit CANCEL. // Just use the previous model (if any) and ignore that you brought up // the file picker. @@ -3818,6 +3825,14 @@ void LLModelPreview::generateNormals() void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_limit) { + // Allow LoD from -1 to LLModel::LOD_PHYSICS + if (which_lod < -1 || which_lod > LLModel::NUM_LODS - 1) + { + llwarns << "Invalid level of detail: " << which_lod << llendl; + assert(which_lod >= -1 && which_lod < LLModel::NUM_LODS); + return; + } + if (mBaseModel.empty()) { return; @@ -3847,19 +3862,31 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim U32 lod_mode = 0; - LLCtrlSelectionInterface* iface = mFMP->childGetSelectionInterface("lod_mode_" + lod_name[which_lod]); - if (iface) + F32 lod_error_threshold = 0; + + // The LoD should be in range from Lowest to High + if (which_lod > -1 && which_lod < NUM_LOD) { - lod_mode = iface->getFirstSelectedIndex(); + LLCtrlSelectionInterface* iface = mFMP->childGetSelectionInterface("lod_mode_" + lod_name[which_lod]); + if (iface) + { + lod_mode = iface->getFirstSelectedIndex(); + } + + lod_error_threshold = mFMP->childGetValue("lod_error_threshold_" + lod_name[which_lod]).asReal(); } - mRequestedLoDMode[which_lod] = lod_mode; - F32 lod_error_threshold = mFMP->childGetValue("lod_error_threshold_" + lod_name[which_lod]).asReal(); + if (which_lod != -1) + { + mRequestedLoDMode[which_lod] = lod_mode; + } if (lod_mode == 0) { lod_mode = GLOD_TRIANGLE_BUDGET; - if (which_lod != -1) + + // The LoD should be in range from Lowest to High + if (which_lod > -1 && which_lod < NUM_LOD) { limit = mFMP->childGetValue("lod_triangle_limit_" + lod_name[which_lod]).asInteger(); } @@ -4492,6 +4519,13 @@ void LLModelPreview::updateStatusMessages() void LLModelPreview::updateLodControls(S32 lod) { + if (lod < LLModel::LOD_IMPOSTOR || lod > LLModel::LOD_HIGH) + { + llwarns << "Invalid level of detail: " << lod << llendl; + assert(lod >= LLModel::LOD_IMPOSTOR && lod <= LLModel::LOD_HIGH); + return; + } + const char* lod_controls[] = { "lod_mode_", |