Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
239160f
A sculpt's path keeps the station a rounding short of its end
RyeMutt Oct 24, 2026
ca61afd
A flexible prim never joins its first and last rows
RyeMutt Oct 24, 2026
b046ff5
A sphere's pole normals face the way its twist turns its poles
RyeMutt Oct 24, 2026
7a87872
A generated normal is marked as its own whatever w its edges carry
RyeMutt Oct 24, 2026
a81c9d4
A sculpt's doubled inner side keeps all of its quads
RyeMutt Oct 24, 2026
0572ca5
The grid tangent kernel counts a line's first lane in its own line
RyeMutt Oct 24, 2026
2a599a4
A mesh face's normals or texture coordinates short of its positions a…
RyeMutt Oct 24, 2026
6bbbfb7
Media zoom looks along a face's planar normal, or along the camera
RyeMutt Oct 24, 2026
1928e7a
The uploader's simplifier prepares a model once for all its simplific…
RyeMutt Oct 24, 2026
96631b9
A distant level of detail to an error keeps a model of small parts
RyeMutt Oct 24, 2026
0d6a6b9
A face simplified on its own is held only where it meets another
RyeMutt Oct 24, 2026
3ab0f9f
Auto mode falls back to the precise mode that came closest
RyeMutt Oct 24, 2026
649c86a
A circle path leaves out a step within a hundredth of a step of its b…
RyeMutt Oct 24, 2026
7ab82e2
A quad whose diagonal has no length adds nothing to its corners' normals
RyeMutt Oct 24, 2026
f7df465
A GLTF primitive is no longer ordered for the vertex cache as it loads
RyeMutt Oct 24, 2026
0dd7c26
The registry's baseline moves to meshoptimizer 1.3#2
RyeMutt Oct 25, 2026
c25037a
The registry's baseline moves to meshoptimizer 1.3#3
RyeMutt Oct 25, 2026
ba180c9
The SIMD kernels are made in each file that uses them
RyeMutt Oct 25, 2026
4257783
clang-cl builds the planar kernels and their test strict
RyeMutt Oct 25, 2026
4a118a4
Hair, skirt and eyelashes keep the order their triangles were made in
RyeMutt Oct 25, 2026
efd275c
A rigged face's weights that run out leave the rest no influence
RyeMutt Oct 25, 2026
dd8b83d
cacheOptimize's out of memory fails its face, not the viewer
RyeMutt Oct 25, 2026
2643be2
A face with no area keeps no planar normal
RyeMutt Oct 25, 2026
56d8932
The sphere placeholder is stitched as a sphere, whatever its sculpt's…
RyeMutt Oct 25, 2026
cc343cd
Normals a grid's column and row cannot give come from one search
RyeMutt Oct 25, 2026
7c013e5
A face simplified on its own is held only where a face's border runs
RyeMutt Oct 25, 2026
f441589
A texture coordinate that is not finite weighs nothing in the simplifier
RyeMutt Oct 25, 2026
25c09c5
Auto mode keeps a sloppy correction that brings it nearer its target
RyeMutt Oct 25, 2026
73f5071
The registry's baseline moves to meshoptimizer 1.3#4
RyeMutt Oct 25, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions indra/llappearance/llavatarappearance.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1128,12 +1128,16 @@ bool LLAvatarAppearance::loadMeshNodes()

LLPolyMesh *poly_mesh = NULL;

// Hair, skirt and eyelashes are drawn blended, and keep the order
// their triangles were made in.
const bool blended = mesh_id == MESH_ID_HAIR || mesh_id == MESH_ID_SKIRT || mesh_id == MESH_ID_EYELASH;

if (!info->mReferenceMeshName.empty())
{
polymesh_map_t::const_iterator polymesh_iter = mPolyMeshes.find(info->mReferenceMeshName);
if (polymesh_iter != mPolyMeshes.end())
{
poly_mesh = LLPolyMesh::getMesh(info->mMeshFileName, polymesh_iter->second);
poly_mesh = LLPolyMesh::getMesh(info->mMeshFileName, polymesh_iter->second, blended);
poly_mesh->setAvatar(this);
}
else
Expand All @@ -1145,7 +1149,7 @@ bool LLAvatarAppearance::loadMeshNodes()
}
else
{
poly_mesh = LLPolyMesh::getMesh(info->mMeshFileName);
poly_mesh = LLPolyMesh::getMesh(info->mMeshFileName, NULL, blended);
poly_mesh->setAvatar(this);
}

Expand Down
8 changes: 4 additions & 4 deletions indra/llappearance/llpolymesh.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,7 @@ bool LLPolyMeshSharedData::allocateJointNames( U32 numJointNames )
//--------------------------------------------------------------------
// LLPolyMeshSharedData::loadMesh()
//--------------------------------------------------------------------
bool LLPolyMeshSharedData::loadMesh( const std::string& fileName )
bool LLPolyMeshSharedData::loadMesh( const std::string& fileName, bool keep_order )
{
//-------------------------------------------------------------------------
// Open the file
Expand Down Expand Up @@ -565,7 +565,7 @@ bool LLPolyMeshSharedData::loadMesh( const std::string& fileName )
// weights address vertices, which keep their order, and an
// LOD's faces are its own.
const U32 vertex_count = (U32)mNumVertices;
bool in_range = numFaces > 0;
bool in_range = numFaces > 0 && !keep_order;
for (i = 0; i < (U32)numFaces * 3 && in_range; i++)
{
in_range = (U32)mFaces[i / 3][i % 3] < vertex_count;
Expand Down Expand Up @@ -835,7 +835,7 @@ LLPolyMesh::~LLPolyMesh()
//-----------------------------------------------------------------------------
// LLPolyMesh::getMesh()
//-----------------------------------------------------------------------------
LLPolyMesh *LLPolyMesh::getMesh(const std::string &name, LLPolyMesh* reference_mesh)
LLPolyMesh *LLPolyMesh::getMesh(const std::string &name, LLPolyMesh* reference_mesh, bool keep_order)
{
//-------------------------------------------------------------------------
// search for an existing mesh by this name
Expand All @@ -859,7 +859,7 @@ LLPolyMesh *LLPolyMesh::getMesh(const std::string &name, LLPolyMesh* reference_m
{
mesh_data->setupLOD(reference_mesh->getSharedData());
}
if ( ! mesh_data->loadMesh( full_path ) )
if ( ! mesh_data->loadMesh( full_path, keep_order ) )
{
delete mesh_data;
return NULL;
Expand Down
9 changes: 6 additions & 3 deletions indra/llappearance/llpolymesh.h
Original file line number Diff line number Diff line change
Expand Up @@ -128,8 +128,10 @@ class LLPolyMeshSharedData
// Retrieve the number of KB of memory used by this instance
U32 getNumKB();

// Load mesh data from file
bool loadMesh( const std::string& fileName );
// Load mesh data from file. Its triangles are ordered for the vertex
// cache unless keep_order is set, for a mesh drawn blended, whose
// triangles blend over one another in the order they were made in.
bool loadMesh( const std::string& fileName, bool keep_order = false );

public:
void genIndices(S32 offset);
Expand Down Expand Up @@ -170,7 +172,8 @@ class LLPolyMesh
// Requests a mesh by name.
// If the mesh already exists in the global mesh table, it is returned,
// otherwise it is loaded from file, added to the table, and returned.
static LLPolyMesh *getMesh( const std::string &name, LLPolyMesh* reference_mesh = NULL);
// keep_order is loadMesh's.
static LLPolyMesh *getMesh( const std::string &name, LLPolyMesh* reference_mesh = NULL, bool keep_order = false);

// Frees all loaded meshes.
// This should only be called once you know there are no outstanding
Expand Down
17 changes: 10 additions & 7 deletions indra/llmath/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -109,13 +109,16 @@ target_precompile_headers(llmath REUSE_FROM llprecompiled)
# compiler may round one sum differently at each place it inlines it, and a
# touch would then land a unit in the last place from the coordinate its
# vertex is drawn with. MSVC is held to the same by the float_control pragma
# around the kernels in alsimdkernels.inl.
if(NOT COMPILER_IS_MSVC AND NOT COMPILER_IS_CLANG_CL)
# around the kernels in alsimdkernels.inl, which clang-cl does not take, and
# clang-cl by the same options as Clang.
set(AL_STRICT_FP_OPTIONS "-ffp-contract=off;-fno-associative-math;-fno-reciprocal-math")
if(COMPILER_IS_CLANG_CL)
list(TRANSFORM AL_STRICT_FP_OPTIONS PREPEND "/clang:")
endif()
if(NOT COMPILER_IS_MSVC)
set_source_files_properties(
alsimdplanar.cpp
PROPERTIES
COMPILE_OPTIONS "-ffp-contract=off;-fno-associative-math;-fno-reciprocal-math"
SKIP_PRECOMPILE_HEADERS TRUE
PROPERTIES COMPILE_OPTIONS "${AL_STRICT_FP_OPTIONS}" SKIP_PRECOMPILE_HEADERS TRUE
)
endif()

Expand Down Expand Up @@ -172,10 +175,10 @@ if(AL_BUILD_TESTS)
# intrinsics, and the file passes there as it is. Accuracy against a double
# reference, and the library's own entry built as the viewer has it, are
# checked to a tolerance.
if(NOT COMPILER_IS_MSVC AND NOT COMPILER_IS_CLANG_CL)
if(NOT COMPILER_IS_MSVC)
set_source_files_properties(
tests/alsimdkernels_test.cpp
PROPERTIES COMPILE_OPTIONS "-ffp-contract=off;-fno-associative-math;-fno-reciprocal-math"
PROPERTIES COMPILE_OPTIONS "${AL_STRICT_FP_OPTIONS}"
)
endif()

Expand Down
Loading
Loading