205 lines
32 KiB
JavaScript
205 lines
32 KiB
JavaScript
|
|
// This file is part of meshoptimizer library and is distributed under the terms of MIT License.
|
||
|
|
// Copyright (C) 2016-2025, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)
|
||
|
|
var MeshoptDecoder = (function () {
|
||
|
|
'use strict';
|
||
|
|
// Built with clang version 19.1.5-wasi-sdk
|
||
|
|
// Built from meshoptimizer 0.25
|
||
|
|
var wasm_base =
|
||
|
|
'b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuixkbeeeddddillviebeoweuec:W:Odkr;Neqo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949WboY9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVJ9V29VVbrl79IV9Rbwq;BZkdbk;jYi5ud9:du8Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnalTmbcuhoaiRbbgrc;WeGc:Ge9hmbarcsGgwce0mbc9:hoalcufadcd4cbawEgDadfgrcKcaawEgqaraq0Egk6mbaicefhxcj;abad9Uc;WFbGcjdadca0EhmaialfgPar9Rgoadfhsavaoadz:jjjjbgzceVhHcbhOdndninaeaO9nmeaPax9RaD6mdamaeaO9RaOamfgoae6EgAcsfglc9WGhCabaOad2fhXaAcethQaxaDfhiaOaeaoaeao6E9RhLalcl4cifcd4hKazcj;cbfaAfhYcbh8AazcjdfhEaHh3incbhodnawTmbaxa8Acd4fRbbhokaocFeGh5cbh8Eazcj;cbfhqinaih8Fdndndndna5a8Ecet4ciGgoc9:fPdebdkaPa8F9RaA6mrazcj;cbfa8EaA2fa8FaAz:jjjjb8Aa8FaAfhixdkazcj;cbfa8EaA2fcbaAz:kjjjb8Aa8FhixekaPa8F9RaK6mva8FaKfhidnaCTmbaPai9RcK6mbaocdtc:q1jjbfcj1jjbawEhaczhrcbhlinargoc9Wfghaqfhrdndndndndndnaaa8Fahco4fRbbalcoG4ciGcdtfydbPDbedvivvvlvkar9cb83bbarcwf9cb83bbxlkarcbaiRbdai8Xbb9c:c:qj:bw9:9c:q;c1:I1e:d9c:b:c:e1z9:gg9cjjjjjz:dg8J9qE86bbaqaofgrcGfag9c8F1:NghcKtc8F91aicdfa8J9c8N1:Nfg8KRbbG86bbarcVfcba8KahcjeGcr4fghRbbag9cjjjjjl:dg8J9qE86bbarc7fcbaha8J9c8L1:NfghRbbag9cjjjjjd:dg8J9qE86bbarctfcbaha8J9c8K1:NfghRbbag9cjjjjje:dg8J9qE86bbarc91fcbaha8J9c8J1:NfghRbbag9cjjjj;ab:dg8J9qE86bbarc4fcbaha8J9cg1:NfghRbbag9cjjjja:dg8J9qE86bbarc93fcbaha8J9ch1:NfghRbbag9cjjjjz:dgg9qE86bbarc94fcbahag9ca1:NfghRbbai8Xbe9c:c:qj:bw9:9c:q;c1:I1e:d9c:b:c:e1z9:gg9cjjjjjz:dg8J9qE86bbarc95fag9c8F1:NgicKtc8F91aha8J9c8N1:NfghRbbG86bbarc96fcbahaicjeGcr4fgiRbbag9cjjjjjl:dg8J9qE86bbarc97fcbaia8J9c8L1:NfgiRbbag9cjjjjjd:dg8J9qE86bbarc98fcbaia8J9c8K1:NfgiRbbag9cjjjjje:dg8J9qE86bbarc99fcbaia8J9c8J1:NfgiRbbag9cjjjj;ab:dg8J9qE86bbarc9:fcbaia8J9cg1:NfgiRbbag9cjjjja:dg8J9qE86bbarcufcbaia8J9ch1:NfgiRbbag9cjjjjz:dgg9qE86bbaiag9ca1:NfhixikaraiRblaiRbbghco4g8Ka8KciSg8KE86bbaqaofgrcGfaiclfa8Kfg8KRbbahcl4ciGg8La8LciSg8LE86bbarcVfa8Ka8Lfg8KRbbahcd4ciGg8La8LciSg8LE86bbarc7fa8Ka8Lfg8KRbbahciGghahciSghE86bbarctfa8Kahfg8KRbbaiRbeghco4g8La8LciSg8LE86bbarc91fa8Ka8Lfg8KRbbahcl4ciGg8La8LciSg8LE86bbarc4fa8Ka8Lfg8KRbbahcd4ciGg8La8LciSg8LE86bbarc93fa8Ka8Lfg8KRbbahciGghahciSghE86bbarc94fa8Kahfg8KRbbaiRbdghco4g8La8LciSg8LE86bbarc95fa8Ka8Lfg8KRbbahcl4ciGg8La8LciSg8LE86bbarc96fa8Ka8Lfg8KRbbahcd4ciGg8La8LciSg8LE86bbarc97fa8Ka8Lfg8KRbbahciGghahciSghE86bbarc98fa8KahfghRbbaiRbigico4g8Ka8KciSg8KE86bbarc99faha8KfghRbbaicl4ciGg8Ka8KciSg8KE86bbarc9:faha8KfghRbbaicd4ciGg8Ka8KciSg8KE86bbarcufaha8KfgrRbbaiciGgiaiciSgiE86bbaraifhixdkaraiRbwaiRbbghcl4g8Ka8KcsSg8KE86bbaqaofgrcGfaicwfa8Kfg8KRbbahcsGghahcsSghE86bbarcVfa8KahfghRbbaiRbeg8Kcl4g8La8LcsSg8LE86bbarc7faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarctfaha8KfghRbbaiRbdg8Kcl4g8La8LcsSg8LE86bbarc91faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc4faha8KfghRbbaiRbig8Kcl4g8La8LcsSg8LE86bbarc93faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc94faha8KfghRbbaiRblg8Kcl4g8La8LcsSg8LE86bbarc95faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc96faha8KfghRbbaiRbvg8Kcl4g8La8LcsSg8LE86bbarc97faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc98faha8KfghRbbaiRbog8Kcl4g8La8LcsSg8LE86bbarc99faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc9:faha8KfghRbbaiRbrgicl4g8Ka8KcsSg8KE86bbarcufaha8KfgrRbbaicsGgiaicsSgiE86bbaraifhixekarai8Pbb83bbarcwfaicwf8Pbb83bbaiczfhikdnaoaC9pmbalcdfhlaoczfhraPai9RcL0mekkaoaC6moaimexokaCmva8FTmvkaqaAfhqa8Ecefg8Ecl9hmbkdndndndnawTmbasa8Acd4fRbbgociGPlbedrbkaATmdaza8Afh8Fazcj;cbfhhcbh8EaEhaina8FRbbhraahocbhlinaoahalfRbbgqce4cbaqceG9R7arfgr86bbaoadfhoaAalcefgl9hmbkaacefhaa8Fcefh8FahaAfhha8Ecefg8Ecl9hmbxikkaATmeaza8Afhaazcj;cbfhhcbhoceh8EaYh8FinaEaofhlaa8Vbbhrcbhoinala8FaofRbbcwtahaofRbbgqVc;:FiGce4cbaqceG9R7arfgr87bbaladfhlaLaocefgofmbka8FaQfh8FcdhoaacdfhaahaQfhha8EceGhlcbh8EalmbxdkkaATmbcbaocl49Rh8Eaza8AfRbbhqcwhoa3hlinalRbbaotaqVhqalcefhlaocwfgoca9hmbkcbhhaEh8FaYhainazcj;cbfahfRbbhrcwhoaahlinalRbbaotarVhralaAfhlaocwfgoca9hmbkara8E93aq7hqcbhoa8Fhlinalaqao486bbalcefhlaocwfgoca9hmbka8Fadfh8FaacefhaahcefghaA9hmbkkaEclfhEa3clfh3a8Aclfg8Aad6mbkaXazcjdfaAad2z:jjj
|
||
|
|
var wasm_simd =
|
||
|
|
'b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuixkbbebeeddddilve9Weeeviebeoweuec:q:6dkr;Neqo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949WbwY9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVJ9V29VVbDl79IV9Rbqq;Ctklbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk:183lYud97dur978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnalTmbcuhoaiRbbgrc;WeGc:Ge9hmbarcsGgwce0mbc9:hoalcufadcd4cbawEgDadfgrcKcaawEgqaraq0Egk6mbaicefhxavaialfgmar9Rgoad;8qbbcj;abad9Uc;WFbGcjdadca0EhPdndndnadTmbaoadfhscbhzinaeaz9nmdamax9RaD6miabazad2fhHaxaDfhOaPaeaz9RazaPfae6EgAcsfgocl4cifcd4hCavcj;cbfaoc9WGgXcetfhQavcj;cbfaXci2fhLavcj;cbfaXfhKcbhYaoc;ab6h8AincbhodnawTmbaxaYcd4fRbbhokaocFeGhEcbh3avcj;cbfh5indndndndnaEa3cet4ciGgoc9:fPdebdkamaO9RaX6mwavcj;cbfa3aX2faOaX;8qbbaOaAfhOxdkavcj;cbfa3aX2fcbaX;8kbxekamaO9RaC6moaoclVcbawEhraOaCfhocbhidna8Ambamao9Rc;Gb6mbcbhlina5alfhidndndndndndnaOalco4fRbbgqciGarfPDbedibledibkaipxbbbbbbbbbbbbbbbbpklbxlkaiaopbblaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLg8Ecdp:mea8EpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9og8Fpxiiiiiiiiiiiiiiiip8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaoclffahc:q:yjjbfRbbfhoxikaiaopbbwaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9og8Fpxssssssssssssssssp8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaocwffahc:q:yjjbfRbbfhoxdkaiaopbbbpklbaoczfhoxekaiaopbbdaoRbbgacitc:q1jjbfpbibaac:q:yjjbfRbbgapsaoRbeghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPpklbaaaocdffahc:q:yjjbfRbbfhokdndndndndndnaqcd4ciGarfPDbedibledibkaiczfpxbbbbbbbbbbbbbbbbpklbxlkaiczfaopbblaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLg8Ecdp:mea8EpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9og8Fpxiiiiiiiiiiiiiiiip8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaoclffahc:q:yjjbfRbbfhoxikaiczfaopbbwaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9og8Fpxssssssssssssssssp8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaocwffahc:q:yjjbfRbbfhoxdkaiczfaopbbbpklbaoczfhoxekaiczfaopbbdaoRbbgacitc:q1jjbfpbibaac:q:yjjbfRbbgapsaoRbeghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPpklbaaaocdffahc:q:yjjbfRbbfhokdndndndndndnaqcl4ciGarfPDbedibledibkaicafpxbbbbbbbbbbbbbbbbpklbxlkaicafaopbblaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLg8Ecdp:mea8EpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9og8Fpxiiiiiiiiiiiiiiiip8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaoclffahc:q:yjjbfRbbfhoxikaicafaopbbwaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9og8Fpxssssssssssssssssp8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaocwffahc:q:yjjbfRbbfhoxdkaicafaopbbbpklbaoczfhoxekaicafaopbbdaoRbbgacitc:q1jjbfpbibaac:q:yjjbfRbbgapsaoRbeghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPpklbaaaocdffahc:q:yjjbfRbbfhokdndndndndndnaqco4arfPDbedibledibkaic8Wfpxbbbbbbbbbbbbbbbbpklbxlkaic8Wfaopbblaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLg8Ecdp:mea8EpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9og8Fpxiiiiiiiiiiiiiiiip8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngicitc:q1jjbfpbibaic:q:yjjbfRbbgipsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Ngqcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaiaoclffaqc:q:yjjbfRbbfhoxikaic8Wfaopbbwaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9og8Fpxssssssssssssssssp8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngicitc:q1jjbfpbibaic:q:yjjbfRbbgipsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Ngqcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaiaocwffaqc:q:yjjbf
|
||
|
|
|
||
|
|
var detector = new Uint8Array([
|
||
|
|
0, 97, 115, 109, 1, 0, 0, 0, 1, 4, 1, 96, 0, 0, 3, 3, 2, 0, 0, 5, 3, 1, 0, 1, 12, 1, 0, 10, 22, 2, 12, 0, 65, 0, 65, 0, 65, 0, 252, 10, 0, 0,
|
||
|
|
11, 7, 0, 65, 0, 253, 15, 26, 11,
|
||
|
|
]);
|
||
|
|
var wasmpack = new Uint8Array([
|
||
|
|
32, 0, 65, 2, 1, 106, 34, 33, 3, 128, 11, 4, 13, 64, 6, 253, 10, 7, 15, 116, 127, 5, 8, 12, 40, 16, 19, 54, 20, 9, 27, 255, 113, 17, 42, 67,
|
||
|
|
24, 23, 146, 148, 18, 14, 22, 45, 70, 69, 56, 114, 101, 21, 25, 63, 75, 136, 108, 28, 118, 29, 73, 115,
|
||
|
|
]);
|
||
|
|
|
||
|
|
if (typeof WebAssembly !== 'object') {
|
||
|
|
return {
|
||
|
|
supported: false,
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
var wasm = WebAssembly.validate(detector) ? unpack(wasm_simd) : unpack(wasm_base);
|
||
|
|
|
||
|
|
var instance;
|
||
|
|
|
||
|
|
var ready = WebAssembly.instantiate(wasm, {}).then(function (result) {
|
||
|
|
instance = result.instance;
|
||
|
|
instance.exports.__wasm_call_ctors();
|
||
|
|
});
|
||
|
|
|
||
|
|
function unpack(data) {
|
||
|
|
var result = new Uint8Array(data.length);
|
||
|
|
for (var i = 0; i < data.length; ++i) {
|
||
|
|
var ch = data.charCodeAt(i);
|
||
|
|
result[i] = ch > 96 ? ch - 97 : ch > 64 ? ch - 39 : ch + 4;
|
||
|
|
}
|
||
|
|
var write = 0;
|
||
|
|
for (var i = 0; i < data.length; ++i) {
|
||
|
|
result[write++] = result[i] < 60 ? wasmpack[result[i]] : (result[i] - 60) * 64 + result[++i];
|
||
|
|
}
|
||
|
|
return result.buffer.slice(0, write);
|
||
|
|
}
|
||
|
|
|
||
|
|
function decode(instance, fun, target, count, size, source, filter) {
|
||
|
|
var sbrk = instance.exports.sbrk;
|
||
|
|
var count4 = (count + 3) & ~3;
|
||
|
|
var tp = sbrk(count4 * size);
|
||
|
|
var sp = sbrk(source.length);
|
||
|
|
var heap = new Uint8Array(instance.exports.memory.buffer);
|
||
|
|
heap.set(source, sp);
|
||
|
|
var res = fun(tp, count, size, sp, source.length);
|
||
|
|
if (res == 0 && filter) {
|
||
|
|
filter(tp, count4, size);
|
||
|
|
}
|
||
|
|
target.set(heap.subarray(tp, tp + count * size));
|
||
|
|
sbrk(tp - sbrk(0));
|
||
|
|
if (res != 0) {
|
||
|
|
throw new Error('Malformed buffer data: ' + res);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
var filters = {
|
||
|
|
NONE: '',
|
||
|
|
OCTAHEDRAL: 'meshopt_decodeFilterOct',
|
||
|
|
QUATERNION: 'meshopt_decodeFilterQuat',
|
||
|
|
EXPONENTIAL: 'meshopt_decodeFilterExp',
|
||
|
|
COLOR: 'meshopt_decodeFilterColor',
|
||
|
|
};
|
||
|
|
|
||
|
|
var decoders = {
|
||
|
|
ATTRIBUTES: 'meshopt_decodeVertexBuffer',
|
||
|
|
TRIANGLES: 'meshopt_decodeIndexBuffer',
|
||
|
|
INDICES: 'meshopt_decodeIndexSequence',
|
||
|
|
};
|
||
|
|
|
||
|
|
var workers = [];
|
||
|
|
var requestId = 0;
|
||
|
|
|
||
|
|
function createWorker(url) {
|
||
|
|
var worker = {
|
||
|
|
object: new Worker(url),
|
||
|
|
pending: 0,
|
||
|
|
requests: {},
|
||
|
|
};
|
||
|
|
|
||
|
|
worker.object.onmessage = function (event) {
|
||
|
|
var data = event.data;
|
||
|
|
|
||
|
|
worker.pending -= data.count;
|
||
|
|
worker.requests[data.id][data.action](data.value);
|
||
|
|
delete worker.requests[data.id];
|
||
|
|
};
|
||
|
|
|
||
|
|
return worker;
|
||
|
|
}
|
||
|
|
|
||
|
|
function initWorkers(count) {
|
||
|
|
var source =
|
||
|
|
'self.ready = WebAssembly.instantiate(new Uint8Array([' +
|
||
|
|
new Uint8Array(wasm) +
|
||
|
|
']), {})' +
|
||
|
|
'.then(function(result) { result.instance.exports.__wasm_call_ctors(); return result.instance; });' +
|
||
|
|
'self.onmessage = ' +
|
||
|
|
workerProcess.name +
|
||
|
|
';' +
|
||
|
|
decode.toString() +
|
||
|
|
workerProcess.toString();
|
||
|
|
|
||
|
|
var blob = new Blob([source], { type: 'text/javascript' });
|
||
|
|
var url = URL.createObjectURL(blob);
|
||
|
|
|
||
|
|
for (var i = workers.length; i < count; ++i) {
|
||
|
|
workers[i] = createWorker(url);
|
||
|
|
}
|
||
|
|
|
||
|
|
for (var i = count; i < workers.length; ++i) {
|
||
|
|
workers[i].object.postMessage({});
|
||
|
|
}
|
||
|
|
|
||
|
|
workers.length = count;
|
||
|
|
|
||
|
|
URL.revokeObjectURL(url);
|
||
|
|
}
|
||
|
|
|
||
|
|
function decodeWorker(count, size, source, mode, filter) {
|
||
|
|
var worker = workers[0];
|
||
|
|
|
||
|
|
for (var i = 1; i < workers.length; ++i) {
|
||
|
|
if (workers[i].pending < worker.pending) {
|
||
|
|
worker = workers[i];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return new Promise(function (resolve, reject) {
|
||
|
|
var data = new Uint8Array(source);
|
||
|
|
var id = ++requestId;
|
||
|
|
|
||
|
|
worker.pending += count;
|
||
|
|
worker.requests[id] = { resolve: resolve, reject: reject };
|
||
|
|
worker.object.postMessage({ id: id, count: count, size: size, source: data, mode: mode, filter: filter }, [data.buffer]);
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
function workerProcess(event) {
|
||
|
|
var data = event.data;
|
||
|
|
if (!data.id) {
|
||
|
|
return self.close();
|
||
|
|
}
|
||
|
|
self.ready.then(function (instance) {
|
||
|
|
try {
|
||
|
|
var target = new Uint8Array(data.count * data.size);
|
||
|
|
decode(instance, instance.exports[data.mode], target, data.count, data.size, data.source, instance.exports[data.filter]);
|
||
|
|
self.postMessage({ id: data.id, count: data.count, action: 'resolve', value: target }, [target.buffer]);
|
||
|
|
} catch (error) {
|
||
|
|
self.postMessage({ id: data.id, count: data.count, action: 'reject', value: error });
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
return {
|
||
|
|
ready: ready,
|
||
|
|
supported: true,
|
||
|
|
useWorkers: function (count) {
|
||
|
|
initWorkers(count);
|
||
|
|
},
|
||
|
|
decodeVertexBuffer: function (target, count, size, source, filter) {
|
||
|
|
decode(instance, instance.exports.meshopt_decodeVertexBuffer, target, count, size, source, instance.exports[filters[filter]]);
|
||
|
|
},
|
||
|
|
decodeIndexBuffer: function (target, count, size, source) {
|
||
|
|
decode(instance, instance.exports.meshopt_decodeIndexBuffer, target, count, size, source);
|
||
|
|
},
|
||
|
|
decodeIndexSequence: function (target, count, size, source) {
|
||
|
|
decode(instance, instance.exports.meshopt_decodeIndexSequence, target, count, size, source);
|
||
|
|
},
|
||
|
|
decodeGltfBuffer: function (target, count, size, source, mode, filter) {
|
||
|
|
decode(instance, instance.exports[decoders[mode]], target, count, size, source, instance.exports[filters[filter]]);
|
||
|
|
},
|
||
|
|
decodeGltfBufferAsync: function (count, size, source, mode, filter) {
|
||
|
|
if (workers.length > 0) {
|
||
|
|
return decodeWorker(count, size, source, decoders[mode], filters[filter]);
|
||
|
|
}
|
||
|
|
|
||
|
|
return ready.then(function () {
|
||
|
|
var target = new Uint8Array(count * size);
|
||
|
|
decode(instance, instance.exports[decoders[mode]], target, count, size, source, instance.exports[filters[filter]]);
|
||
|
|
return target;
|
||
|
|
});
|
||
|
|
},
|
||
|
|
};
|
||
|
|
})();
|
||
|
|
|
||
|
|
// export! MeshoptDecoder
|
||
|
|
if (typeof exports === 'object' && typeof module === 'object') module.exports = MeshoptDecoder;
|
||
|
|
else if (typeof define === 'function' && define['amd'])
|
||
|
|
define([], function () {
|
||
|
|
return MeshoptDecoder;
|
||
|
|
});
|
||
|
|
else if (typeof exports === 'object') exports['MeshoptDecoder'] = MeshoptDecoder;
|
||
|
|
else (typeof self !== 'undefined' ? self : this).MeshoptDecoder = MeshoptDecoder;
|