MAINT-5209 FIXED Cannot upload some models with high level of detail

meow-7.2.2
andreykproductengine 2015-05-22 18:15:24 +03:00
parent 1a8016c03f
commit b90b1ccca0
2 changed files with 60 additions and 13 deletions

View File

@ -2736,26 +2736,41 @@ void LLModelPreview::updateStatusMessages()
}
//make sure no hulls have more than 256 points in them
//warn if hulls have more than 256 points in them
BOOL physExceededVertexLimit = FALSE;
for (U32 i = 0; mModelNoErrors && i < mModel[LLModel::LOD_PHYSICS].size(); ++i)
{
LLModel* mdl = mModel[LLModel::LOD_PHYSICS][i];
if (mdl)
{
for (U32 j = 0; mModelNoErrors && j < mdl->mPhysics.mHull.size(); ++j)
for (U32 j = 0; j < mdl->mPhysics.mHull.size(); ++j)
{
if (mdl->mPhysics.mHull[j].size() > 256)
{
mModelNoErrors = false;
physExceededVertexLimit = TRUE;
LL_INFOS() << "Physical model " << mdl->mLabel << " exceeds vertex per hull limitations." << LL_ENDL;
break;
}
}
}
}
}
mFMP->childSetVisible("physics_status_message_text", physExceededVertexLimit);
LLIconCtrl* physStatusIcon = mFMP->getChild<LLIconCtrl>("physics_status_message_icon");
physStatusIcon->setVisible(physExceededVertexLimit);
if (physExceededVertexLimit)
{
mFMP->childSetValue("physics_status_message_text", mFMP->getString("phys_status_vertex_limit_exceeded"));
LLUIImagePtr img = LLUI::getUIImage("ModelImport_Status_Warning");
physStatusIcon->setImage(img);
}
bool errorStateFromLoader = getLoadState() >= LLModelLoader::ERROR_PARSING ? true : false;
if (getLoadState() >= LLModelLoader::ERROR_PARSING)
{
mModelNoErrors = false;
LL_INFOS() << "Loader returned errors, model can't be uploaded" << LL_ENDL;
}
bool skinAndRigOk = true;
bool uploadingSkin = mFMP->childGetValue("upload_skin").asBoolean();
bool uploadingJointPositions = mFMP->childGetValue("upload_joints").asBoolean();
@ -2763,19 +2778,23 @@ void LLModelPreview::updateStatusMessages()
{
if ( uploadingJointPositions && !isRigValidForJointPositionUpload() )
{
skinAndRigOk = false;
}
mModelNoErrors = false;
LL_INFOS() << "Invalid rig, there might be issues with uploading Joint positions" << LL_ENDL;
}
}
if(mModelNoErrors && mModelLoader)
{
if(!mModelLoader->areTexturesReady() && mFMP->childGetValue("upload_textures").asBoolean())
{
// Some textures are still loading, prevent upload until they are done
mModelNoErrors = false;
}
}
if (!mModelNoErrors || errorStateFromLoader || !skinAndRigOk || has_degenerate)
// Todo: investigate use of has_degenerate and include into mModelNoErrors upload blocking mechanics
// current use of has_degenerate won't block upload permanently - later checks will restore the button
if (!mModelNoErrors || has_degenerate)
{
mFMP->childDisable("ok_btn");
}

View File

@ -31,6 +31,7 @@
<string name="mesh_status_too_many_vertices">Level of detail has too many vertices.</string>
<string name="mesh_status_missing_lod">Missing required level of detail.</string>
<string name="mesh_status_invalid_material_list">LOD materials are not a subset of reference model.</string>
<string name="phys_status_vertex_limit_exceeded">Some physical hulls exceed vertex limitations.</string>
<string name="layer_all">All</string> <!-- Text to display in physics layer combo box for "all layers" -->
<string name="decomposing">Analyzing...</string>
<string name="simplifying">Simplifying...</string>
@ -1027,19 +1028,19 @@
bg_alpha_color="0 0 0 0"
bg_opaque_color="0 0 0 0.3"
follows="left|top"
height="16"
height="19"
layout="topleft"
left="18"
name="physics info"
top_pad="15"
width="589">
top_pad="12"
width="319">
<text
follows="top|left"
height="15"
layout="topleft"
left="0"
text_color="White"
top_pad="0"
top_pad="3"
name="results_text"
width="50">
Results:
@ -1077,6 +1078,33 @@
Hulls: [HULLS]
</text>
</panel>
<panel
bg_alpha_color="0 0 0 0"
bg_opaque_color="0 0 0 0.3"
follows="left|top"
height="19"
layout="topleft"
left_pad="5"
top_delta="0"
name="physics message"
width="270">
<icon
follows="left|top"
height="16"
left="0"
layout="topleft"
name="physics_status_message_icon"
top_pad="0"
width="16" />
<text
follows="left|top"
height="15"
layout="topleft"
left_pad="2"
name="physics_status_message_text"
width="252"
top_delta="3"/>
</panel>
</panel>
<!-- MODIFIERS PANEL -->
<panel