From ee8989e416de4aee373efb413485c2bb92d00f7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D1=80=D0=B0=D0=BD=D0=B8=D0=BC=D0=B8=D1=80=20=D0=9A?= =?UTF-8?q?=D0=B0=D1=80=D0=B0=D1=9F=D0=B8=D1=9B?= Date: Sun, 6 Oct 2019 22:44:14 -0700 Subject: [PATCH] Updated meshoptimizer. --- .../meshoptimizer/.github/workflows/build.yml | 29 ++--- 3rdparty/meshoptimizer/Makefile | 2 +- 3rdparty/meshoptimizer/demo/tests.cpp | 103 ++++++++++++++++++ 3rdparty/meshoptimizer/js/meshopt_decoder.js | 55 +++------- 3rdparty/meshoptimizer/src/indexcodec.cpp | 3 - 3rdparty/meshoptimizer/src/simplifier.cpp | 3 + 3rdparty/meshoptimizer/src/vertexcodec.cpp | 6 +- 7 files changed, 136 insertions(+), 65 deletions(-) diff --git a/3rdparty/meshoptimizer/.github/workflows/build.yml b/3rdparty/meshoptimizer/.github/workflows/build.yml index 37bc09b6f..ab29f999e 100644 --- a/3rdparty/meshoptimizer/.github/workflows/build.yml +++ b/3rdparty/meshoptimizer/.github/workflows/build.yml @@ -3,8 +3,12 @@ name: build on: [push, pull_request] jobs: - linux: - runs-on: ubuntu-latest + unix: + strategy: + matrix: + os: [ubuntu, macos] + name: ${{matrix.os}} + runs-on: ${{matrix.os}}-latest steps: - uses: actions/checkout@v1 - name: make test @@ -18,27 +22,10 @@ jobs: make -j2 config=coverage test find . -type f -name '*.gcno' -exec gcov -p {} + sed -i -e "s/#####\(.*\)\(\/\/ unreachable.*\)/ -\1\2/" *.gcov - bash <(curl -s https://codecov.io/bash) -f 'src#*.gcov' -X search -t ${{secrets.CODECOV_TOKEN}} + bash <(curl -s https://codecov.io/bash) -f 'src#*.gcov' -X search -t ${{secrets.CODECOV_TOKEN}} -B ${{github.ref}} - uses: actions/upload-artifact@v1 with: - name: gltfpack-linux - path: gltfpack - - macos: - runs-on: macos-latest - steps: - - uses: actions/checkout@v1 - - name: make test - run: | - make -j2 config=sanitize test - make -j2 config=debug test - make -j2 config=release test - make -j2 config=release gltfpack - - name: make iphone - run: make -j2 config=iphone - - uses: actions/upload-artifact@v1 - with: - name: gltfpack-macos + name: gltfpack-${{matrix.os}} path: gltfpack windows: diff --git a/3rdparty/meshoptimizer/Makefile b/3rdparty/meshoptimizer/Makefile index 86a50f798..3e43811b0 100644 --- a/3rdparty/meshoptimizer/Makefile +++ b/3rdparty/meshoptimizer/Makefile @@ -72,7 +72,7 @@ gltfpack: $(GLTFPACK_OBJECTS) $(LIBRARY) js/meshopt_decoder.js: src/vertexcodec.cpp src/indexcodec.cpp @mkdir -p build - emcc $(filter %.cpp,$^) -O3 -DNDEBUG -s EXPORTED_FUNCTIONS='["_meshopt_decodeVertexBuffer", "_meshopt_decodeIndexBuffer"]' -s ALLOW_MEMORY_GROWTH=1 -s TOTAL_STACK=24576 -s TOTAL_MEMORY=65536 -o build/meshopt_decoder.wasm + emcc $(filter %.cpp,$^) -O3 -DNDEBUG -s EXPORTED_FUNCTIONS='["_meshopt_decodeVertexBuffer", "_meshopt_decodeIndexBuffer", "_sbrk"]' -s ALLOW_MEMORY_GROWTH=1 -s TOTAL_STACK=24576 -s TOTAL_MEMORY=65536 -o build/meshopt_decoder.wasm sed -i "s#\(var wasm = \)\".*\";#\\1\"$$(cat build/meshopt_decoder.wasm | base64 -w 0)\";#" $@ $(EXECUTABLE): $(DEMO_OBJECTS) $(LIBRARY) diff --git a/3rdparty/meshoptimizer/demo/tests.cpp b/3rdparty/meshoptimizer/demo/tests.cpp index 2e14fda5a..ffab4c023 100644 --- a/3rdparty/meshoptimizer/demo/tests.cpp +++ b/3rdparty/meshoptimizer/demo/tests.cpp @@ -1,6 +1,7 @@ #include "../src/meshoptimizer.h" #include +#include #include #include @@ -261,6 +262,100 @@ static void clusterBoundsDegenerate() assert(bounds2.center[2] - bounds2.radius <= 0 && bounds2.center[2] + bounds2.radius >= 1); } +static size_t allocCount; +static size_t freeCount; + +static void* customAlloc(size_t size) +{ + allocCount++; + + return malloc(size); +} + +static void customFree(void* ptr) +{ + freeCount++; + + free(ptr); +} + +static void customAllocator() +{ + meshopt_setAllocator(customAlloc, customFree); + + assert(allocCount == 0 && freeCount == 0); + + float vb[] = {1, 0, 0, 0, 1, 0, 0, 0, 1}; + unsigned int ib[] = {0, 1, 2}; + unsigned short ibs[] = {0, 1, 2}; + + // meshopt_computeClusterBounds doesn't allocate + meshopt_computeClusterBounds(ib, 3, vb, 3, 12); + assert(allocCount == 0 && freeCount == 0); + + // ... unless IndexAdapter is used + meshopt_computeClusterBounds(ibs, 3, vb, 3, 12); + assert(allocCount == 1 && freeCount == 1); + + // meshopt_optimizeVertexFetch allocates internal remap table and temporary storage for in-place remaps + meshopt_optimizeVertexFetch(vb, ib, 3, vb, 3, 12); + assert(allocCount == 3 && freeCount == 3); + + // ... plus one for IndexAdapter + meshopt_optimizeVertexFetch(vb, ibs, 3, vb, 3, 12); + assert(allocCount == 6 && freeCount == 6); + + meshopt_setAllocator(operator new, operator delete); + + // customAlloc & customFree should not get called anymore + meshopt_optimizeVertexFetch(vb, ib, 3, vb, 3, 12); + assert(allocCount == 6 && freeCount == 6); +} + +static void emptyMesh() +{ + meshopt_optimizeVertexCache(0, 0, 0, 0); + meshopt_optimizeVertexCacheFifo(0, 0, 0, 0, 16); + meshopt_optimizeOverdraw(0, 0, 0, 0, 0, 12, 1.f); +} + +static void simplifyStuck() +{ + // tetrahedron can't be simplified due to collapse error restrictions + float vb1[] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1}; + unsigned int ib1[] = {0, 1, 2, 0, 2, 3, 0, 3, 1, 2, 1, 3}; + + assert(meshopt_simplify(ib1, ib1, 12, vb1, 4, 12, 6, 1e-3f) == 12); + + // 5-vertex strip can't be simplified due to topology restriction since middle triangle has flipped winding + float vb2[] = {0, 0, 0, 1, 0, 0, 2, 0, 0, 0.5f, 1, 0, 1.5f, 1, 0}; + unsigned int ib2[] = {0, 1, 3, 3, 1, 4, 1, 2, 4}; // ok + unsigned int ib3[] = {0, 1, 3, 1, 3, 4, 1, 2, 4}; // flipped + + assert(meshopt_simplify(ib2, ib2, 9, vb2, 5, 12, 6, 1e-3f) == 6); + assert(meshopt_simplify(ib3, ib3, 9, vb2, 5, 12, 6, 1e-3f) == 9); +} + +static void simplifySloppyStuck() +{ + const float vb[] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; + const unsigned int ib[] = {0, 1, 2, 0, 1, 2}; + + // simplifying down to 0 triangles results in 0 immediately + assert(meshopt_simplifySloppy(0, ib, 3, vb, 3, 12, 0) == 0); + + // simplifying down to 2 triangles given that all triangles are degenerate results in 0 as well + assert(meshopt_simplifySloppy(0, ib, 6, vb, 3, 12, 6) == 0); +} + +static void simplifyPointsStuck() +{ + const float vb[] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; + + // simplifying down to 0 points results in 0 immediately + assert(meshopt_simplifyPoints(0, vb, 3, 12, 0) == 0); +} + void runTests() { decodeIndexV0(); @@ -277,4 +372,12 @@ void runTests() decodeVertexRejectMalformedHeaders(); clusterBoundsDegenerate(); + + customAllocator(); + + emptyMesh(); + + simplifyStuck(); + simplifySloppyStuck(); + simplifyPointsStuck(); } diff --git a/3rdparty/meshoptimizer/js/meshopt_decoder.js b/3rdparty/meshoptimizer/js/meshopt_decoder.js index 9f8c981fc..c40393adb 100644 --- a/3rdparty/meshoptimizer/js/meshopt_decoder.js +++ b/3rdparty/meshoptimizer/js/meshopt_decoder.js @@ -2,48 +2,29 @@ // Copyright (C) 2016-2019, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com) var MeshoptDecoder = (function() { "use strict"; - var wasm = "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"; + var wasm = "AGFzbQEAAAABIwZgAABgBX9/f39/AX9gA39/fwF/YAF/AX9gAX8AYAN/f38AAwgHAgADBQQBAQUDAQABBggBfwFBgMwBCwdeBQZtZW1vcnkCABFfX3dhc21fY2FsbF9jdG9ycwABGm1lc2hvcHRfZGVjb2RlVmVydGV4QnVmZmVyAAYZbWVzaG9wdF9kZWNvZGVJbmRleEJ1ZmZlcgAFBHNicmsAAgqrJAeCBAEDfyACQYDAAE8EQCAAIAEgAhADIAAPCyAAIAJqIQMCQCAAIAFzQQNxRQRAAkAgAkEBSARAIAAhAgwBCyAAQQNxRQRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADTw0BIAJBA3ENAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgA0F8aiIEIABJBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAsDAAELRgECfz8AIQECQEGADCgCACICIABqIgAgAUEQdE0NACAAQf//A2pBEHZAAEF/Rw0AQYAIQTA2AgBBfw8LQYAMIAA2AgAgAgs9AQF/IAIEQANAIAAgASACQYDAACACQYDAAEkbIgMQACEAIAFBgEBrIQEgAEGAQGshACACIANrIgINAAsLC8YCAQJ/IABBgAFqIgFBf2pB/wE6AAAgAEH/AToAACABQX5qQf8BOgAAIABB/wE6AAEgAUF9akH/AToAACAAQf8BOgACIAFBfGpB/wE6AAAgAEH/AToAAyAAQQAgAGtBA3EiAWoiAEF/NgIAIABBgAEgAWtBfHEiAmoiAUF8akF/NgIAAkAgAkEJSQ0AIABBfzYCCCAAQX82AgQgAUF4akF/NgIAIAFBdGpBfzYCACACQRlJDQAgAEF/NgIYIABBfzYCFCAAQX82AhAgAEF/NgIMIAFBcGpBfzYCACABQWxqQX82AgAgAUFoakF/NgIAIAFBZGpBfzYCACACIABBBHFBGHIiAmsiAUEgSQ0AIAAgAmohAANAIABCfzcDGCAAQn83AxAgAEJ/NwMIIABCfzcDACAAQSBqIQAgAUFgaiIBQR9LDQALCwuGEAEOfyMAQcABayIJJAACf0F+IAFBA24iBkERaiAESw0AGkF/IAMtAABB4AFHDQAaIAlBQGsQBCAJQn83AzggCUJ/NwMwIAlCfzcDKCAJQn83AyAgCUJ/NwMYIAlCfzcDECAJQn83AwggCUJ/NwMAIAMgBGpBcGohESADQQFqIhIgBmohCyABBEAgAkECRyEPQQAhA0EAIQJBACEEA0BBfiALIBFLDQIaAn8gEi0AACIKQe8BTQRAIAlBQGsgCkEEdkF/cyAMakEPcUEDdGoiBigCBCEFIAYoAgAhDSAKQQ9xIgZBD0cEQCAJIApBf3MgBGpBD3FBAnRqKAIAIAMgBhshCCAGRSEKAkAgD0UEQCAAIAJBAXRqIgYgDTsBACAGIAU7AQIgBiAIOwEEDAELIAAgAkECdGoiBiANNgIAIAYgCDYCCCAGIAU2AgQLIAMgCmohAyAJQUBrIAxBA3RqIgYgBTYCBCAGIAg2AgAgCSAEQQJ0aiAINgIAIAlBQGsgDEEBakEPcSIFQQN0aiIGIA02AgAgBiAINgIEIAQgCmohBCAFQQFqDAILIAssAAAiBkH/AXEhBwJ/IAtBAWogBkF/Sg0AGiAHQf8AcSALLAABIgZB/wBxQQd0ciEHIAtBAmogBkF/Sg0AGiALLAACIgZB/wBxQQ50IAdyIQcgC0EDaiAGQX9KDQAaIAssAAMiBkH/AHFBFXQgB3IhByALQQRqIAZBf0oNABogCy0ABEEcdCAHciEHIAtBBWoLIQtBACAHQQFxayAHQQF2cyAOaiEOAkAgD0UEQCAAIAJBAXRqIgYgDTsBACAGIAU7AQIgBiAOOwEEDAELIAAgAkECdGoiBiANNgIAIAYgDjYCCCAGIAU2AgQLIAlBQGsgDEEDdGoiBiAFNgIEIAYgDjYCACAJIARBAnRqIA42AgAgCUFAayAMQQFqQQ9xIgVBA3RqIgYgDTYCACAGIA42AgQgBEEBaiEEIAVBAWoMAQsgCkH9AU0EQCAJIAQgESAKQQ9xai0AACIIQQR2IgVrQQ9xQQJ0aigCACADQQFqIgYgBRshDSAJIAQgCGtBD3FBAnRqKAIAIAYgBUUiBWoiCiAIQQ9xIgYbIQcgBkUhCAJAIA9FBEAgACACQQF0aiIGIAM7AQAgBiANOwECIAYgBzsBBAwBCyAAIAJBAnRqIgYgAzYCACAGIAc2AgggBiANNgIECyAJIARBAnRqIAM2AgAgCUFAayAMQQN0aiIGIAM2AgQgBiANNgIAIAkgBEEBaiIGQQ9xQQJ0aiANNgIAIAlBQGsgDEEBakEPcUEDdGoiBCAHNgIAIAQgDTYCBCAJIAUgBmpBD3EiBUECdGogBzYCACAJQUBrIAxBAmpBD3EiBkEDdGoiBCADNgIAIAQgBzYCBCAFIAhqIQQgCCAKaiEDIAZBAWoMAQsgAyAKQf4BRiIFaiEHIAstAAAiCEEPcSEQAkAgCEEEdiINRQRAIAdBAWohCgwBCyAHIQogCSAEIA1rQQ9xQQJ0aigCACEHCwJAIBBFBEAgCkEBaiEGDAELIAohBiAJIAQgCGtBD3FBAnRqKAIAIQoLAkAgBQRAIAtBAWohCAwBCyALLAABIgVB/wFxIQMCfyALQQJqIAVBf0oNABogA0H/AHEgCywAAiIFQf8AcUEHdHIhAyALQQNqIAVBf0oNABogCywAAyIFQf8AcUEOdCADciEDIAtBBGogBUF/Sg0AGiALLAAEIgVB/wBxQRV0IANyIQMgC0EFaiAFQX9KDQAaIAstAAVBHHQgA3IhAyALQQZqCyEIQQAgA0EBcWsgA0EBdnMgDmoiDiEDCwJAIA1BD0cEQCAIIQUMAQsgCCwAACIFQf8BcSEHAn8gCEEBaiAFQX9KDQAaIAdB/wBxIAgsAAEiBUH/AHFBB3RyIQcgCEECaiAFQX9KDQAaIAgsAAIiBUH/AHFBDnQgB3IhByAIQQNqIAVBf0oNABogCCwAAyIFQf8AcUEVdCAHciEHIAhBBGogBUF/Sg0AGiAILQAEQRx0IAdyIQcgCEEFagshBUEAIAdBAXFrIAdBAXZzIA5qIg4hBwsCQCAQQQ9HBEAgBSELDAELIAUsAAAiCEH/AXEhCgJ/IAVBAWogCEF/Sg0AGiAKQf8AcSAFLAABIghB/wBxQQd0ciEKIAVBAmogCEF/Sg0AGiAFLAACIghB/wBxQQ50IApyIQogBUEDaiAIQX9KDQAaIAUsAAMiCEH/AHFBFXQgCnIhCiAFQQRqIAhBf0oNABogBS0ABEEcdCAKciEKIAVBBWoLIQtBACAKQQFxayAKQQF2cyAOaiIOIQoLAkAgD0UEQCAAIAJBAXRqIgUgAzsBACAFIAc7AQIgBSAKOwEEDAELIAAgAkECdGoiBSADNgIAIAUgCjYCCCAFIAc2AgQLIAlBQGsgDEEDdGoiBSADNgIEIAUgBzYCACAJIARBAnRqIAM2AgAgCUFAayAMQQFqQQ9xQQN0aiIFIAo2AgAgBSAHNgIEIAkgBEEBaiIFQQ9xQQJ0aiAHNgIAIAlBQGsgDEECakEPcUEDdGoiBCADNgIAIAQgCjYCBCAJIAUgDUUgDUEPRnJqIgNBD3FBAnRqIAo2AgAgAyAQRSAQQQ9GcmohBCAGIQMgDEEDagshDCASQQFqIRIgDEEPcSEMIARBD3EhBCACQQNqIgIgAUkNAAsLQQBBfSALIBFGGwshDCAJQcABaiQAIAwLywwBD38jAEGAxABrIhAkAAJ/QX4gAkEBaiAESw0AGkF/IAMtAABBoAFHDQAaIBAgAyAEaiIPIAJrIAIQACELQYDAACACbkHw/wBxIgRBgAIgBEGAAkkbIREgA0EBaiEJAkADQCAMIAFPDQEgESABIAxrIAwgEWogAUkbIQ0CQAJAIAJFBEAgCSEEDAELIA1BD2oiA0FwcSESIANBBHZBA2pBAnYhE0EAIQ4gCSEKA0AgDyAKayATSQRAQQAhCQwDCyAKIBNqIQRBACEJQQAhAyASBEADQCAPIARrQSBJDQQgC0GAwgBqIANqIQgCQAJAAkACQAJAIAogA0EGdmotAAAgA0EDdkEGcXZBA3FBAWsOAwECAwALIAhCADcDACAIQgA3AwgMAwsgCCAELQAEIAQtAAAiBkEGdiIFIAVBA0YiBRs6AAAgCCAEQQRqIAVqIgUtAAAgBkEEdkEDcSIHIAdBA0YiBxs6AAEgCCAFIAdqIgUtAAAgBkECdkEDcSIHIAdBA0YiBxs6AAIgCCAFIAdqIgUtAAAgBkEDcSIGIAZBA0YiBhs6AAMgCCAFIAZqIgUtAAAgBC0AASIGQQZ2IgcgB0EDRiIHGzoABCAIIAUgB2oiBS0AACAGQQR2QQNxIgcgB0EDRiIHGzoABSAIIAUgB2oiBS0AACAGQQJ2QQNxIgcgB0EDRiIHGzoABiAIIAUgB2oiBS0AACAGQQNxIgYgBkEDRiIGGzoAByAIIAUgBmoiBS0AACAELQACIgZBBnYiByAHQQNGIgcbOgAIIAggBSAHaiIFLQAAIAZBBHZBA3EiByAHQQNGIgcbOgAJIAggBSAHaiIFLQAAIAZBAnZBA3EiByAHQQNGIgcbOgAKIAggBSAHaiIFLQAAIAZBA3EiBiAGQQNGIgYbOgALIAggBSAGaiIGLQAAIAQtAAMiBEEGdiIFIAVBA0YiBRs6AAwgCCAFIAZqIgYtAAAgBEEEdkEDcSIFIAVBA0YiBRs6AA0gCCAFIAZqIgYtAAAgBEECdkEDcSIFIAVBA0YiBRs6AA4gCCAFIAZqIggtAAAgBEEDcSIEIARBA0YiBBs6AA8gBCAIaiEEDAILIAggBC0ACCAELQAAIgZBBHYiBSAFQQ9GIgUbOgAAIAggBEEIaiAFaiIFLQAAIAZBD3EiBiAGQQ9GIgYbOgABIAggBSAGaiIGLQAAIAQtAAEiBUEEdiIHIAdBD0YiBxs6AAIgCCAGIAdqIgYtAAAgBUEPcSIFIAVBD0YiBRs6AAMgCCAFIAZqIgYtAAAgBC0AAiIFQQR2IgcgB0EPRiIHGzoABCAIIAYgB2oiBi0AACAFQQ9xIgUgBUEPRiIFGzoABSAIIAUgBmoiBi0AACAELQADIgVBBHYiByAHQQ9GIgcbOgAGIAggBiAHaiIGLQAAIAVBD3EiBSAFQQ9GIgUbOgAHIAggBSAGaiIGLQAAIAQtAAQiBUEEdiIHIAdBD0YiBxs6AAggCCAGIAdqIgYtAAAgBUEPcSIFIAVBD0YiBRs6AAkgCCAFIAZqIgYtAAAgBC0ABSIFQQR2IgcgB0EPRiIHGzoACiAIIAYgB2oiBi0AACAFQQ9xIgUgBUEPRiIFGzoACyAIIAUgBmoiBi0AACAELQAGIgVBBHYiByAHQQ9GIgcbOgAMIAggBiAHaiIGLQAAIAVBD3EiBSAFQQ9GIgUbOgANIAggBSAGaiIGLQAAIAQtAAciBEEEdiIFIAVBD0YiBRs6AA4gCCAFIAZqIggtAAAgBEEPcSIEIARBD0YiBBs6AA8gBCAIaiEEDAELIAggBCkAADcAACAIIAQpAAg3AAggBEEQaiEECyADQRBqIgMgEkkNAAsLIARFDQIgDQRAIAsgDmotAAAhCiAOIQMDQCALQYACaiADaiAKIAtBgMIAaiAJai0AACIKQQF2QQAgCkEBcWtzaiIKOgAAIAIgA2ohAyAJQQFqIgkgDUcNAAsLIAQhCiAOQQFqIg4gAkcNAAsLIAAgAiAMbGogC0GAAmogAiANbBAAGiALIAtBgAJqIA1Bf2ogAmxqIAIQABogBCEJCyANQQAgCRsgDGohDCAJDQALQX4MAQtBAEF9IA8gCWsgAkEgIAJBIEsbRhsLIQkgEEGAxABqJAAgCQsLCQEAQYAMCwLAZg=="; - var memory = new WebAssembly.Memory({ - initial: 1 - }); - var heap = new Uint8Array(memory.buffer); - var brk = 32768; // stack top - - var sbrk = function(size) { - var old = brk; - brk += size; - if (brk > heap.length) { - memory.grow(Math.ceil((brk - heap.length) / 65536)); - heap = new Uint8Array(memory.buffer); - } - return old; - }; - - var imports = { - env: { - memory: memory, - emscripten_memcpy_big: function(d, s, n) { - heap.set(heap.subarray(s, s + n), d); - }, - } - }; - - var instance = {}; + var instance; var promise = - (typeof fetch === 'function' - ? fetch('data:application/octet-stream;base64,' + wasm) - .then(response => response.arrayBuffer()) - : Promise.resolve(Buffer.from(wasm, 'base64').buffer)) - .then(bytes => WebAssembly.instantiate(bytes, imports)) - .then(result => instance = result.instance); + (typeof fetch === 'function' ? + fetch('data:application/octet-stream;base64,' + wasm) + .then(response => response.arrayBuffer()) : + Promise.resolve(Buffer.from(wasm, 'base64').buffer)) + .then(bytes => WebAssembly.instantiate(bytes, {})) + .then(result => instance = result.instance) - var decode = function(fun, target, count, size, source) { + function heap(offset, length) { + var memory = instance.exports["memory"]; + return new Uint8Array(memory.buffer, offset, length); + } + + function decode(fun, target, count, size, source) { + var sbrk = instance.exports["sbrk"]; var tp = sbrk(count * size); var sp = sbrk(source.length); - heap.set(source, sp); + heap(sp, source.length).set(source); var res = fun(tp, count, size, sp, source.length); - target.set(heap.subarray(tp, tp + count * size), 0); + target.set(heap(tp, count * size)); sbrk(tp - sbrk(0)); if (res != 0) { throw new Error("Malformed buffer data: " + res); @@ -58,7 +39,7 @@ var MeshoptDecoder = (function() { decodeIndexBuffer: function(target, count, size, source) { decode(instance.exports["meshopt_decodeIndexBuffer"], target, count, size, source); } - } + }; })(); if (typeof exports === 'object' && typeof module === 'object') diff --git a/3rdparty/meshoptimizer/src/indexcodec.cpp b/3rdparty/meshoptimizer/src/indexcodec.cpp index 1a62e1446..bf3e50ff8 100644 --- a/3rdparty/meshoptimizer/src/indexcodec.cpp +++ b/3rdparty/meshoptimizer/src/indexcodec.cpp @@ -161,9 +161,6 @@ static void writeTriangle(void* destination, size_t offset, size_t index_size, u static_cast(destination)[offset + 2] = (unsigned short)(c); } else -#ifdef __EMSCRIPTEN__ - if (index_size == 4) // work around Edge (ChakraCore) bug - without this compiler assumes index_size==2 -#endif { static_cast(destination)[offset + 0] = a; static_cast(destination)[offset + 1] = b; diff --git a/3rdparty/meshoptimizer/src/simplifier.cpp b/3rdparty/meshoptimizer/src/simplifier.cpp index 400c9ccde..dd0ff9b07 100644 --- a/3rdparty/meshoptimizer/src/simplifier.cpp +++ b/3rdparty/meshoptimizer/src/simplifier.cpp @@ -1443,6 +1443,9 @@ size_t meshopt_simplifyPoints(unsigned int* destination, const float* vertex_pos size_t target_cell_count = target_vertex_count; + if (target_cell_count == 0) + return 0; + meshopt_Allocator allocator; Vector3* vertex_positions = allocator.allocate(vertex_count); diff --git a/3rdparty/meshoptimizer/src/vertexcodec.cpp b/3rdparty/meshoptimizer/src/vertexcodec.cpp index f89f05c07..2e0e4e7b5 100644 --- a/3rdparty/meshoptimizer/src/vertexcodec.cpp +++ b/3rdparty/meshoptimizer/src/vertexcodec.cpp @@ -309,7 +309,7 @@ static const unsigned char* decodeBytesGroup(const unsigned char* data, unsigned memcpy(buffer, data, kByteGroupSize); return data + kByteGroupSize; default: - assert(!"Unexpected bit length"); // This can never happen since bitslog2 is a 2-bit value + assert(!"Unexpected bit length"); // unreachable since bitslog2 is a 2-bit value return data; } @@ -521,7 +521,7 @@ static const unsigned char* decodeBytesGroupSimd(const unsigned char* data, unsi } default: - assert(!"Unexpected bit length"); // This can never happen since bitslog2 is a 2-bit value + assert(!"Unexpected bit length"); // unreachable since bitslog2 is a 2-bit value return data; } } @@ -649,7 +649,7 @@ static const unsigned char* decodeBytesGroupSimd(const unsigned char* data, unsi } default: - assert(!"Unexpected bit length"); // This can never happen since bitslog2 is a 2-bit value + assert(!"Unexpected bit length"); // unreachable since bitslog2 is a 2-bit value return data; } }