diff options
| -rw-r--r-- | indra/llmath/llvolume.cpp | 41 | 
1 files changed, 33 insertions, 8 deletions
| diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 6bf276a3cf..6335da5b62 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -5590,14 +5590,22 @@ struct MikktData      {          U32 count = face->mNumIndices; -        p.resize(count); -        n.resize(count); -        tc.resize(count); -        t.resize(count); +        try +        { +            p.resize(count); +            n.resize(count); +            tc.resize(count); +            t.resize(count); -        if (face->mWeights) +            if (face->mWeights) +            { +                w.resize(count); +            } +        } +        catch (std::bad_alloc&)          { -            w.resize(count); +            LLError::LLUserWarningMsg::showOutOfMemory(); +            LL_ERRS("LLCoros") << "Bad memory allocation in MikktData, elements count: " << count << LL_ENDL;          } @@ -5669,7 +5677,16 @@ bool LLVolumeFace::cacheOptimize(bool gen_tangents)          // and is executed on a background thread          MikktData data(this);          mikk::Mikktspace ctx(data); -        ctx.genTangSpace(); +        try +        { +            ctx.genTangSpace(); +        } +        catch (std::bad_alloc&) +        { +            LLError::LLUserWarningMsg::showOutOfMemory(); +            LL_ERRS("LLCoros") << "Bad memory allocation in MikktData::genTangSpace" << LL_ENDL; +        } +          //re-weld          meshopt_Stream mos[] = @@ -5682,7 +5699,15 @@ bool LLVolumeFace::cacheOptimize(bool gen_tangents)          };          std::vector<U32> remap; -        remap.resize(data.p.size()); +        try +        { +            remap.resize(data.p.size()); +        } +        catch (std::bad_alloc&) +        { +            LLError::LLUserWarningMsg::showOutOfMemory(); +            LL_ERRS("LLCoros") << "Failed to allocate memory for remap: " << (S32)data.p.size() << LL_ENDL; +        }          U32 stream_count = data.w.empty() ? 4 : 5; | 
