-
-
Notifications
You must be signed in to change notification settings - Fork 25
/
artoolkitNFT.multi_worker.js
106 lines (91 loc) · 2.8 KB
/
artoolkitNFT.multi_worker.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
var browser = (function() {
var test = function(regexp) {return regexp.test(navigator.userAgent)}
switch (true) {
case test(/edg/i): return "Microsoft Edge";
case test(/trident/i): return "Microsoft Internet Explorer";
case test(/firefox|fxios/i): return "Mozilla Firefox";
case test(/opr\//i): return "Opera";
case test(/ucbrowser/i): return "UC Browser";
case test(/samsungbrowser/i): return "Samsung Browser";
case test(/chrome|chromium|crios/i): return "Google Chrome";
case test(/safari/i): return "Apple Safari";
default: return "Other";
}
})();
if(browser == "Apple Safari") {
importScripts("../build/artoolkitNFT_wasm.js");
} else {
importScripts("../build/artoolkitNFT_wasm.simd.js");
}
self.onmessage = function (e) {
var msg = e.data;
switch (msg.type) {
case "load": {
load(msg);
return;
}
case "process": {
next = msg.imagedata;
process();
return;
}
}
};
var next = null;
var ar = null;
var markerResult = null;
var marker1, marker2, marker3;
function load(msg) {
self.addEventListener("artoolkitNFT-loaded", function () {
console.debug("Loading marker at: ", msg.marker);
var onLoad = function () {
ar = new ARControllerNFT(msg.pw, msg.ph, param);
var cameraMatrix = ar.getCameraMatrix();
ar.addEventListener("getNFTMarker", function (ev) {
markerResult = {
type: "found",
index: JSON.stringify(ev.data.index),
matrixGL_RH: JSON.stringify(ev.data.matrixGL_RH),
};
});
ar.loadNFTMarkers(msg.marker, function (ids) {
for (var i = 0; i < ids.length; i++) {
ar.trackNFTMarkerId(i);
}
marker1 = ar.getNFTData(ar.id, 0);
marker2 = ar.getNFTData(ar.id, 1);
marker3 = ar.getNFTData(ar.id, 2);
postMessage({
type: "markerInfos",
marker1: marker1,
marker2: marker2,
marker3: marker3,
});
console.log("loadNFTMarker -> ", ids);
postMessage({ type: "endLoading", end: true }),
function (err) {
console.error("Error in loading marker on Worker", err);
};
});
postMessage({ type: "loaded", proj: JSON.stringify(cameraMatrix) });
};
var onError = function (error) {
console.error(error);
};
console.debug("Loading camera at:", msg.camera_para);
// we cannot pass the entire ARControllerNFT, so we re-create one inside the Worker, starting from camera_param
var param = new ARCameraParamNFT(msg.camera_para, onLoad, onError);
});
}
function process() {
markerResult = null;
if (ar && ar.process) {
ar.process(next);
}
if (markerResult) {
postMessage(markerResult);
} else {
postMessage({ type: "not found" });
}
next = null;
}