Skip to content

Commit

Permalink
Updated meshoptimizer.
Browse files Browse the repository at this point in the history
  • Loading branch information
bkaradzic committed Dec 23, 2023
1 parent f07a164 commit 9640d46
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 12 deletions.
12 changes: 9 additions & 3 deletions 3rdparty/meshoptimizer/src/quantization.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,15 @@

#include <assert.h>

union FloatBits
{
float f;
unsigned int ui;
};

unsigned short meshopt_quantizeHalf(float v)
{
union { float f; unsigned int ui; } u = {v};
FloatBits u = {v};
unsigned int ui = u.ui;

int s = (ui >> 16) & 0x8000;
Expand All @@ -30,7 +36,7 @@ float meshopt_quantizeFloat(float v, int N)
{
assert(N >= 0 && N <= 23);

union { float f; unsigned int ui; } u = {v};
FloatBits u = {v};
unsigned int ui = u.ui;

const int mask = (1 << (23 - N)) - 1;
Expand Down Expand Up @@ -64,7 +70,7 @@ float meshopt_dequantizeHalf(unsigned short h)
// 112 is an exponent bias fixup; since we already applied it once, applying it twice converts 31 to 255
r += (em >= (31 << 10)) ? (112 << 23) : 0;

union { float f; unsigned int ui; } u;
FloatBits u;
u.ui = s | r;
return u.f;
}
13 changes: 4 additions & 9 deletions 3rdparty/meshoptimizer/src/vcacheoptimizer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -195,9 +195,8 @@ void meshopt_optimizeVertexCacheTable(unsigned int* destination, const unsigned
TriangleAdjacency adjacency = {};
buildTriangleAdjacency(adjacency, indices, index_count, vertex_count, allocator);

// live triangle counts
unsigned int* live_triangles = allocator.allocate<unsigned int>(vertex_count);
memcpy(live_triangles, adjacency.counts, vertex_count * sizeof(unsigned int));
// live triangle counts; note, we alias adjacency.counts as we remove triangles after emitting them so the counts always match
unsigned int* live_triangles = adjacency.counts;

// emitted flags
unsigned char* emitted_flags = allocator.allocate<unsigned char>(face_count);
Expand Down Expand Up @@ -261,20 +260,16 @@ void meshopt_optimizeVertexCacheTable(unsigned int* destination, const unsigned
unsigned int index = cache[i];

cache_new[cache_write] = index;
cache_write += (index != a && index != b && index != c);
cache_write += (index != a) & (index != b) & (index != c);
}

unsigned int* cache_temp = cache;
cache = cache_new, cache_new = cache_temp;
cache_count = cache_write > cache_size ? cache_size : cache_write;

// update live triangle counts
live_triangles[a]--;
live_triangles[b]--;
live_triangles[c]--;

// remove emitted triangle from adjacency data
// this makes sure that we spend less time traversing these lists on subsequent iterations
// live triangle counts are updated as a byproduct of these adjustments
for (size_t k = 0; k < 3; ++k)
{
unsigned int index = indices[current_triangle * 3 + k];
Expand Down

0 comments on commit 9640d46

Please sign in to comment.