diff options
Diffstat (limited to 'indra/llmath/llvolume.cpp')
| -rw-r--r-- | indra/llmath/llvolume.cpp | 42 | 
1 files changed, 42 insertions, 0 deletions
| diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 5099920f32..23f372f6e3 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -49,6 +49,7 @@  #include "llsdserialize.h"  #include "llvector4a.h"  #include "llmatrix4a.h" +#include "llmeshoptimizer.h"  #include "lltimer.h"  #define DEBUG_SILHOUETTE_BINORMALS 0 @@ -4952,6 +4953,47 @@ bool LLVolumeFace::VertexMapData::ComparePosition::operator()(const LLVector3& a  	return a.mV[2] < b.mV[2];  } +void LLVolumeFace::remap() +{ +    // generate a remap buffer +    std::vector<unsigned int> remap(mNumIndices); +    S32 remap_vertices_count = LLMeshOptimizer::generateRemapMulti(&remap[0], +        NULL, +        mNumIndices, +        mPositions, +        mNormals, +        mTexCoords, +        mNumVertices); + +    // Allocate new buffers +    U16* remap_indices = (U16*)ll_aligned_malloc_16(mNumIndices * sizeof(U16)); + +    S32 tc_bytes_size = ((remap_vertices_count * sizeof(LLVector2)) + 0xF) & ~0xF; +    LLVector4a* remap_positions = (LLVector4a*)ll_aligned_malloc<64>(sizeof(LLVector4a) * 2 * remap_vertices_count + tc_bytes_size); +    LLVector4a* remap_normals = remap_positions + remap_vertices_count; +    LLVector2* remap_tex_coords = (LLVector2*)(remap_normals + remap_vertices_count); + +    // fill the buffers +    LLMeshOptimizer::remapIndexBufferU16(remap_indices, mIndices, mNumIndices, &remap[0]); +    LLMeshOptimizer::remapPositionsBuffer(remap_positions, mPositions, mNumVertices, &remap[0]); +    LLMeshOptimizer::remapNormalsBuffer(remap_normals, mNormals, mNumVertices, &remap[0]); +    LLMeshOptimizer::remapUVBuffer(remap_tex_coords, mTexCoords, mNumVertices, &remap[0]); + +    // free unused buffers +    ll_aligned_free_16(mIndices); +    ll_aligned_free<64>(mPositions); +    ll_aligned_free_16(mTangents); + +    mTangents = NULL; + +    mIndices = remap_indices; +    mPositions = remap_positions; +    mNormals = remap_normals; +    mTexCoords = remap_tex_coords; +    mNumVertices = remap_vertices_count; +    mNumAllocatedVertices = remap_vertices_count; +} +  void LLVolumeFace::optimize(F32 angle_cutoff)  {  	LLVolumeFace new_face; | 
