mirror of
https://github.com/openharmony/third_party_meshoptimizer.git
synced 2026-07-20 12:26:24 -04:00
97408c606f
When the vertex count is specified, instead of compressing the input we decompress it; it's also possible to pipe the output through codectest again to re-compress it. This makes it easier to experiment with already-compressed data, including intermediate measurements with other compresors and prefiltering.
61 lines
1.4 KiB
C++
61 lines
1.4 KiB
C++
#include "../src/meshoptimizer.h"
|
|
|
|
#include <vector>
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
#ifdef _WIN32
|
|
#include <fcntl.h>
|
|
#include <io.h>
|
|
#endif
|
|
|
|
int main(int argc, char** argv)
|
|
{
|
|
#ifdef _WIN32
|
|
_setmode(_fileno(stdin), _O_BINARY);
|
|
_setmode(_fileno(stdout), _O_BINARY);
|
|
#endif
|
|
|
|
if (argc < 2 || argc > 3 || atoi(argv[1]) <= 0)
|
|
{
|
|
fprintf(stderr, "Usage: %s <stride> [<count>]\n", argv[0]);
|
|
return 1;
|
|
}
|
|
|
|
size_t stride = atoi(argv[1]);
|
|
|
|
std::vector<unsigned char> input;
|
|
unsigned char buffer[4096];
|
|
size_t bytes_read;
|
|
|
|
while ((bytes_read = fread(buffer, 1, sizeof(buffer), stdin)) > 0)
|
|
input.insert(input.end(), buffer, buffer + bytes_read);
|
|
|
|
if (argc == 3)
|
|
{
|
|
// if count is specified, we assume input is meshopt-encoded and decode it first
|
|
size_t count = atoi(argv[2]);
|
|
|
|
std::vector<unsigned char> decoded(count * stride);
|
|
int res = meshopt_decodeVertexBuffer(&decoded[0], count, stride, &input[0], input.size());
|
|
if (res != 0)
|
|
{
|
|
fprintf(stderr, "Error decoding input: %d\n", res);
|
|
return 2;
|
|
}
|
|
|
|
fwrite(decoded.data(), 1, decoded.size(), stdout);
|
|
return 0;
|
|
}
|
|
else
|
|
{
|
|
size_t vertex_count = input.size() / stride;
|
|
std::vector<unsigned char> output(meshopt_encodeVertexBufferBound(vertex_count, stride));
|
|
size_t output_size = meshopt_encodeVertexBuffer(output.data(), output.size(), input.data(), vertex_count, stride);
|
|
|
|
fwrite(output.data(), 1, output_size, stdout);
|
|
return 0;
|
|
}
|
|
}
|