summaryrefslogtreecommitdiff
path: root/thirdparty/meshoptimizer/indexcodec.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparty/meshoptimizer/indexcodec.cpp')
-rw-r--r--thirdparty/meshoptimizer/indexcodec.cpp80
1 files changed, 1 insertions, 79 deletions
diff --git a/thirdparty/meshoptimizer/indexcodec.cpp b/thirdparty/meshoptimizer/indexcodec.cpp
index eeb541e5be..e4495b8586 100644
--- a/thirdparty/meshoptimizer/indexcodec.cpp
+++ b/thirdparty/meshoptimizer/indexcodec.cpp
@@ -4,14 +4,6 @@
#include <assert.h>
#include <string.h>
-#ifndef TRACE
-#define TRACE 0
-#endif
-
-#if TRACE
-#include <stdio.h>
-#endif
-
// This work is based on:
// Fabian Giesen. Simple lossless index buffer compression & follow-up. 2013
// Conor Stokes. Vertex Cache Optimised Index Buffer Compression. 2014
@@ -116,7 +108,7 @@ static unsigned int decodeVByte(const unsigned char*& data)
for (int i = 0; i < 4; ++i)
{
unsigned char group = *data++;
- result |= (group & 127) << shift;
+ result |= unsigned(group & 127) << shift;
shift += 7;
if (group < 128)
@@ -167,38 +159,6 @@ static void writeTriangle(void* destination, size_t offset, size_t index_size, u
}
}
-#if TRACE
-static size_t sortTop16(unsigned char dest[16], size_t stats[256])
-{
- size_t destsize = 0;
-
- for (size_t i = 0; i < 256; ++i)
- {
- size_t j = 0;
- for (; j < destsize; ++j)
- {
- if (stats[i] >= stats[dest[j]])
- {
- if (destsize < 16)
- destsize++;
-
- memmove(&dest[j + 1], &dest[j], destsize - 1 - j);
- dest[j] = (unsigned char)i;
- break;
- }
- }
-
- if (j == destsize && destsize < 16)
- {
- dest[destsize] = (unsigned char)i;
- destsize++;
- }
- }
-
- return destsize;
-}
-#endif
-
} // namespace meshopt
size_t meshopt_encodeIndexBuffer(unsigned char* buffer, size_t buffer_size, const unsigned int* indices, size_t index_count)
@@ -207,11 +167,6 @@ size_t meshopt_encodeIndexBuffer(unsigned char* buffer, size_t buffer_size, cons
assert(index_count % 3 == 0);
-#if TRACE
- size_t codestats[256] = {};
- size_t codeauxstats[256] = {};
-#endif
-
// the minimum valid encoding is header, 1 byte per triangle and a 16-byte codeaux table
if (buffer_size < 1 + index_count / 3 + 16)
return 0;
@@ -275,10 +230,6 @@ size_t meshopt_encodeIndexBuffer(unsigned char* buffer, size_t buffer_size, cons
*code++ = (unsigned char)((fe << 4) | fec);
-#if TRACE
- codestats[code[-1]]++;
-#endif
-
// note that we need to update the last index since free indices are delta-encoded
if (fec == 15)
encodeIndex(data, c, last), last = c;
@@ -334,11 +285,6 @@ size_t meshopt_encodeIndexBuffer(unsigned char* buffer, size_t buffer_size, cons
*data++ = codeaux;
}
-#if TRACE
- codestats[code[-1]]++;
- codeauxstats[codeaux]++;
-#endif
-
// note that we need to update the last index since free indices are delta-encoded
if (fea == 15)
encodeIndex(data, a, last), last = a;
@@ -387,30 +333,6 @@ size_t meshopt_encodeIndexBuffer(unsigned char* buffer, size_t buffer_size, cons
assert(data >= buffer + index_count / 3 + 16);
assert(data <= buffer + buffer_size);
-#if TRACE
- unsigned char codetop[16], codeauxtop[16];
- size_t codetopsize = sortTop16(codetop, codestats);
- size_t codeauxtopsize = sortTop16(codeauxtop, codeauxstats);
-
- size_t sumcode = 0, sumcodeaux = 0;
- for (size_t i = 0; i < 256; ++i)
- sumcode += codestats[i], sumcodeaux += codeauxstats[i];
-
- size_t acccode = 0, acccodeaux = 0;
-
- printf("code\t\t\t\t\tcodeaux\n");
-
- for (size_t i = 0; i < codetopsize && i < codeauxtopsize; ++i)
- {
- acccode += codestats[codetop[i]];
- acccodeaux += codeauxstats[codeauxtop[i]];
-
- printf("%2d: %02x = %d (%.1f%% ..%.1f%%)\t\t%2d: %02x = %d (%.1f%% ..%.1f%%)\n",
- int(i), codetop[i], int(codestats[codetop[i]]), double(codestats[codetop[i]]) / double(sumcode) * 100, double(acccode) / double(sumcode) * 100,
- int(i), codeauxtop[i], int(codeauxstats[codeauxtop[i]]), double(codeauxstats[codeauxtop[i]]) / double(sumcodeaux) * 100, double(acccodeaux) / double(sumcodeaux) * 100);
- }
-#endif
-
return data - buffer;
}