diff options
Diffstat (limited to 'indra/llmath')
| -rw-r--r-- | indra/llmath/llvolume.cpp | 15 | ||||
| -rw-r--r-- | indra/llmath/llvolume.h | 2 | 
2 files changed, 14 insertions, 3 deletions
diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 6d36daa92a..e694732da2 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -5592,9 +5592,9 @@ bool LLVolumeFace::cacheOptimize(bool gen_tangents)          U32 stream_count = data.w.empty() ? 4 : 5; -        U32 vert_count = meshopt_generateVertexRemapMulti(&remap[0], nullptr, data.p.size(), data.p.size(), mos, stream_count); +        size_t vert_count = meshopt_generateVertexRemapMulti(&remap[0], nullptr, data.p.size(), data.p.size(), mos, stream_count); -        if (vert_count < 65535) +        if (vert_count < 65535 && vert_count != 0)          {              std::vector<U32> indices;              indices.resize(mNumIndices); @@ -5613,6 +5613,13 @@ bool LLVolumeFace::cacheOptimize(bool gen_tangents)              {                  U32 src_idx = i;                  U32 dst_idx = remap[i]; +                if (dst_idx >= mNumVertices) +                { +                    dst_idx = mNumVertices - 1; +                    // Shouldn't happen, figure out what gets returned in remap and why. +                    llassert(false); +                    LL_DEBUGS_ONCE("LLVOLUME") << "Invalid destination index, substituting" << LL_ENDL; +                }                  mIndices[i] = dst_idx;                  mPositions[dst_idx].load3(data.p[src_idx].mV); @@ -5646,6 +5653,10 @@ bool LLVolumeFace::cacheOptimize(bool gen_tangents)          }          else          { +            if (vert_count == 0) +            { +                LL_WARNS_ONCE("LLVOLUME") << "meshopt_generateVertexRemapMulti failed to process a model or model was invalid" << LL_ENDL; +            }              // blew past the max vertex size limit, use legacy tangent generation which never adds verts              createTangents();          } diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index afed98ff36..71878b8cb6 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -1000,7 +1000,7 @@ class LLVolume : public LLRefCount  	friend class LLVolumeLODGroup;  protected: -	~LLVolume(); // use unref +	virtual ~LLVolume(); // use unref  public:  	typedef std::vector<LLVolumeFace> face_list_t;  | 
