Skip to content

Commit acb5055

Browse files
committed
cache functions for gl-vis
1 parent b1891ad commit acb5055

File tree

1 file changed

+332
-7
lines changed

1 file changed

+332
-7
lines changed

contour.js

+332-7
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,327 @@ function permBitmask(dimension, mask, order) {
6767
return r
6868
}
6969

70+
var allFns = {
71+
"false,0,1": function surfaceProcedure(vertex, face, phase, mallocUint32, freeUint32) {
72+
return function extractContour0_1(a0, x0, x1, x2) {
73+
var s0 = a0.shape[0] | 0,
74+
s1 = a0.shape[1] | 0,
75+
d0 = a0.data,
76+
o0 = a0.offset | 0,
77+
t0_0 = a0.stride[0] | 0,
78+
t0_1 = a0.stride[1] | 0,
79+
p0 = o0,
80+
c0_0,
81+
d0_1 = -t0_0 | 0,
82+
c0_1 = 0,
83+
d0_2 = -t0_1 | 0,
84+
c0_2 = 0,
85+
d0_3 = (-t0_0 - t0_1) | 0,
86+
c0_3 = 0,
87+
u0_0 = t0_0 | 0,
88+
u0_1 = (t0_1 - t0_0 * s0) | 0,
89+
i0 = 0,
90+
i1 = 0,
91+
N = 0,
92+
Q = (2 * s0) | 0,
93+
P = mallocUint32(Q),
94+
V = mallocUint32(Q),
95+
X = 0,
96+
b0 = 0,
97+
e1 = -1 | 0,
98+
y1 = -1 | 0,
99+
b1 = 0,
100+
e2 = -s0 | 0,
101+
y2 = s0 | 0,
102+
b2 = 0,
103+
e3 = (-s0 - 1) | 0,
104+
y3 = (s0 - 1) | 0,
105+
b3 = 0,
106+
v0 = 0,
107+
T = 0
108+
for (i0 = 0; i0 < s0; ++i0) {
109+
P[X++] = phase(d0[p0], x0, x1, x2)
110+
p0 += u0_0
111+
}
112+
p0 += u0_1
113+
if (s1 > 0) {
114+
i1 = 1
115+
P[X++] = phase(d0[p0], x0, x1, x2)
116+
p0 += u0_0
117+
if (s0 > 0) {
118+
i0 = 1
119+
c0_0 = d0[p0]
120+
b0 = P[X] = phase(c0_0, x0, x1, x2)
121+
b1 = P[X + e1]
122+
b2 = P[X + e2]
123+
b3 = P[X + e3]
124+
if (b0 !== b1 || b0 !== b2 || b0 !== b3) {
125+
c0_1 = d0[p0 + d0_1]
126+
c0_2 = d0[p0 + d0_2]
127+
c0_3 = d0[p0 + d0_3]
128+
vertex(i0, i1, c0_0, c0_1, c0_2, c0_3, b0, b1, b2, b3, x0, x1, x2)
129+
v0 = V[X] = N++
130+
}
131+
X += 1
132+
p0 += u0_0
133+
for (i0 = 2; i0 < s0; ++i0) {
134+
c0_0 = d0[p0]
135+
b0 = P[X] = phase(c0_0, x0, x1, x2)
136+
b1 = P[X + e1]
137+
b2 = P[X + e2]
138+
b3 = P[X + e3]
139+
if (b0 !== b1 || b0 !== b2 || b0 !== b3) {
140+
c0_1 = d0[p0 + d0_1]
141+
c0_2 = d0[p0 + d0_2]
142+
c0_3 = d0[p0 + d0_3]
143+
vertex(i0, i1, c0_0, c0_1, c0_2, c0_3, b0, b1, b2, b3, x0, x1, x2)
144+
v0 = V[X] = N++
145+
if (b3 !== b1) {
146+
face(V[X + e1], v0, c0_3, c0_1, b3, b1, x0, x1, x2)
147+
}
148+
}
149+
X += 1
150+
p0 += u0_0
151+
}
152+
}
153+
p0 += u0_1
154+
X = 0
155+
T = e1
156+
e1 = y1
157+
y1 = T
158+
T = e2
159+
e2 = y2
160+
y2 = T
161+
T = e3
162+
e3 = y3
163+
y3 = T
164+
for (i1 = 2; i1 < s1; ++i1) {
165+
P[X++] = phase(d0[p0], x0, x1, x2)
166+
p0 += u0_0
167+
if (s0 > 0) {
168+
i0 = 1
169+
c0_0 = d0[p0]
170+
b0 = P[X] = phase(c0_0, x0, x1, x2)
171+
b1 = P[X + e1]
172+
b2 = P[X + e2]
173+
b3 = P[X + e3]
174+
if (b0 !== b1 || b0 !== b2 || b0 !== b3) {
175+
c0_1 = d0[p0 + d0_1]
176+
c0_2 = d0[p0 + d0_2]
177+
c0_3 = d0[p0 + d0_3]
178+
vertex(i0, i1, c0_0, c0_1, c0_2, c0_3, b0, b1, b2, b3, x0, x1, x2)
179+
v0 = V[X] = N++
180+
if (b3 !== b2) {
181+
face(V[X + e2], v0, c0_2, c0_3, b2, b3, x0, x1, x2)
182+
}
183+
}
184+
X += 1
185+
p0 += u0_0
186+
for (i0 = 2; i0 < s0; ++i0) {
187+
c0_0 = d0[p0]
188+
b0 = P[X] = phase(c0_0, x0, x1, x2)
189+
b1 = P[X + e1]
190+
b2 = P[X + e2]
191+
b3 = P[X + e3]
192+
if (b0 !== b1 || b0 !== b2 || b0 !== b3) {
193+
c0_1 = d0[p0 + d0_1]
194+
c0_2 = d0[p0 + d0_2]
195+
c0_3 = d0[p0 + d0_3]
196+
vertex(i0, i1, c0_0, c0_1, c0_2, c0_3, b0, b1, b2, b3, x0, x1, x2)
197+
v0 = V[X] = N++
198+
if (b3 !== b2) {
199+
face(V[X + e2], v0, c0_2, c0_3, b2, b3, x0, x1, x2)
200+
}
201+
if (b3 !== b1) {
202+
face(V[X + e1], v0, c0_3, c0_1, b3, b1, x0, x1, x2)
203+
}
204+
}
205+
X += 1
206+
p0 += u0_0
207+
}
208+
}
209+
if (i1 & 1) {
210+
X = 0
211+
}
212+
T = e1
213+
e1 = y1
214+
y1 = T
215+
T = e2
216+
e2 = y2
217+
y2 = T
218+
T = e3
219+
e3 = y3
220+
y3 = T
221+
p0 += u0_1
222+
}
223+
}
224+
freeUint32(V)
225+
freeUint32(P)
226+
}
227+
},
228+
"false,1,0": function anonymous(vertex, face, phase, mallocUint32, freeUint32) {
229+
return function extractContour1_0(a0, x0, x1, x2) {
230+
var s0 = a0.shape[0] | 0,
231+
s1 = a0.shape[1] | 0,
232+
d0 = a0.data,
233+
o0 = a0.offset | 0,
234+
t0_0 = a0.stride[0] | 0,
235+
t0_1 = a0.stride[1] | 0,
236+
p0 = o0,
237+
c0_0,
238+
d0_1 = -t0_0 | 0,
239+
c0_1 = 0,
240+
d0_2 = -t0_1 | 0,
241+
c0_2 = 0,
242+
d0_3 = (-t0_0 - t0_1) | 0,
243+
c0_3 = 0,
244+
u0_1 = t0_1 | 0,
245+
u0_0 = (t0_0 - t0_1 * s1) | 0,
246+
i0 = 0,
247+
i1 = 0,
248+
N = 0,
249+
Q = (2 * s1) | 0,
250+
P = mallocUint32(Q),
251+
V = mallocUint32(Q),
252+
X = 0,
253+
b0 = 0,
254+
e2 = -1 | 0,
255+
y2 = -1 | 0,
256+
b2 = 0,
257+
e1 = -s1 | 0,
258+
y1 = s1 | 0,
259+
b1 = 0,
260+
e3 = (-s1 - 1) | 0,
261+
y3 = (s1 - 1) | 0,
262+
b3 = 0,
263+
v0 = 0,
264+
T = 0
265+
for (i1 = 0; i1 < s1; ++i1) {
266+
P[X++] = phase(d0[p0], x0, x1, x2)
267+
p0 += u0_1
268+
}
269+
p0 += u0_0
270+
if (s0 > 0) {
271+
i0 = 1
272+
P[X++] = phase(d0[p0], x0, x1, x2)
273+
p0 += u0_1
274+
if (s1 > 0) {
275+
i1 = 1
276+
c0_0 = d0[p0]
277+
b0 = P[X] = phase(c0_0, x0, x1, x2)
278+
b1 = P[X + e1]
279+
b2 = P[X + e2]
280+
b3 = P[X + e3]
281+
if (b0 !== b1 || b0 !== b2 || b0 !== b3) {
282+
c0_1 = d0[p0 + d0_1]
283+
c0_2 = d0[p0 + d0_2]
284+
c0_3 = d0[p0 + d0_3]
285+
vertex(i0, i1, c0_0, c0_1, c0_2, c0_3, b0, b1, b2, b3, x0, x1, x2)
286+
v0 = V[X] = N++
287+
}
288+
X += 1
289+
p0 += u0_1
290+
for (i1 = 2; i1 < s1; ++i1) {
291+
c0_0 = d0[p0]
292+
b0 = P[X] = phase(c0_0, x0, x1, x2)
293+
b1 = P[X + e1]
294+
b2 = P[X + e2]
295+
b3 = P[X + e3]
296+
if (b0 !== b1 || b0 !== b2 || b0 !== b3) {
297+
c0_1 = d0[p0 + d0_1]
298+
c0_2 = d0[p0 + d0_2]
299+
c0_3 = d0[p0 + d0_3]
300+
vertex(i0, i1, c0_0, c0_1, c0_2, c0_3, b0, b1, b2, b3, x0, x1, x2)
301+
v0 = V[X] = N++
302+
if (b3 !== b2) {
303+
face(V[X + e2], v0, c0_2, c0_3, b2, b3, x0, x1, x2)
304+
}
305+
}
306+
X += 1
307+
p0 += u0_1
308+
}
309+
}
310+
p0 += u0_0
311+
X = 0
312+
T = e1
313+
e1 = y1
314+
y1 = T
315+
T = e2
316+
e2 = y2
317+
y2 = T
318+
T = e3
319+
e3 = y3
320+
y3 = T
321+
for (i0 = 2; i0 < s0; ++i0) {
322+
P[X++] = phase(d0[p0], x0, x1, x2)
323+
p0 += u0_1
324+
if (s1 > 0) {
325+
i1 = 1
326+
c0_0 = d0[p0]
327+
b0 = P[X] = phase(c0_0, x0, x1, x2)
328+
b1 = P[X + e1]
329+
b2 = P[X + e2]
330+
b3 = P[X + e3]
331+
if (b0 !== b1 || b0 !== b2 || b0 !== b3) {
332+
c0_1 = d0[p0 + d0_1]
333+
c0_2 = d0[p0 + d0_2]
334+
c0_3 = d0[p0 + d0_3]
335+
vertex(i0, i1, c0_0, c0_1, c0_2, c0_3, b0, b1, b2, b3, x0, x1, x2)
336+
v0 = V[X] = N++
337+
if (b3 !== b1) {
338+
face(V[X + e1], v0, c0_3, c0_1, b3, b1, x0, x1, x2)
339+
}
340+
}
341+
X += 1
342+
p0 += u0_1
343+
for (i1 = 2; i1 < s1; ++i1) {
344+
c0_0 = d0[p0]
345+
b0 = P[X] = phase(c0_0, x0, x1, x2)
346+
b1 = P[X + e1]
347+
b2 = P[X + e2]
348+
b3 = P[X + e3]
349+
if (b0 !== b1 || b0 !== b2 || b0 !== b3) {
350+
c0_1 = d0[p0 + d0_1]
351+
c0_2 = d0[p0 + d0_2]
352+
c0_3 = d0[p0 + d0_3]
353+
vertex(i0, i1, c0_0, c0_1, c0_2, c0_3, b0, b1, b2, b3, x0, x1, x2)
354+
v0 = V[X] = N++
355+
if (b3 !== b2) {
356+
face(V[X + e2], v0, c0_2, c0_3, b2, b3, x0, x1, x2)
357+
}
358+
if (b3 !== b1) {
359+
face(V[X + e1], v0, c0_3, c0_1, b3, b1, x0, x1, x2)
360+
}
361+
}
362+
X += 1
363+
p0 += u0_1
364+
}
365+
}
366+
if (i0 & 1) {
367+
X = 0
368+
}
369+
T = e1
370+
e1 = y1
371+
y1 = T
372+
T = e2
373+
e2 = y2
374+
y2 = T
375+
T = e3
376+
e3 = y3
377+
y3 = T
378+
p0 += u0_0
379+
}
380+
}
381+
freeUint32(V)
382+
freeUint32(P)
383+
}
384+
},
385+
}
386+
70387
//Generates the surface procedure
71388
function compileSurfaceProcedure(vertexFunc, faceFunc, phaseFunc, scalarArgs, order, typesig) {
389+
var key = [typesig, order].join(',')
390+
72391
var arrayArgs = typesig.length
73392
var dimension = order.length
74393

@@ -353,13 +672,19 @@ function compileSurfaceProcedure(vertexFunc, faceFunc, phaseFunc, scalarArgs, or
353672
"}",
354673
"return ", funcName ].join("")
355674

356-
var proc = new Function(
357-
"vertex",
358-
"face",
359-
"phase",
360-
"mallocUint32",
361-
"freeUint32",
362-
procedureCode)
675+
var proc = allFns[key]
676+
if(!proc) {
677+
proc = new Function(
678+
"vertex",
679+
"face",
680+
"phase",
681+
"mallocUint32",
682+
"freeUint32",
683+
procedureCode)
684+
685+
console.log(key, proc)
686+
}
687+
363688
return proc(
364689
vertexFunc,
365690
faceFunc,

0 commit comments

Comments
 (0)