#include "../src/meshoptimizer.h" #include #include #include #ifdef _WIN32 #include #include #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 []\n", argv[0]); return 1; } size_t stride = atoi(argv[1]); std::vector 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 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 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; } }