comments
This commit is contained in:
parent
c4c53bfbdb
commit
55731b0251
2 changed files with 26 additions and 19 deletions
|
|
@ -1247,6 +1247,7 @@ let gs_kiri_sla = exports;
|
||||||
return {width, height, data:buf, png};
|
return {width, height, data:buf, png};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// write out a thumbnail image
|
||||||
function writePhotonImage(preview, writer) {
|
function writePhotonImage(preview, writer) {
|
||||||
let data = new Uint8Array(preview.data), len = data.byteLength;
|
let data = new Uint8Array(preview.data), len = data.byteLength;
|
||||||
writer.writeU32(preview.width, true);
|
writer.writeU32(preview.width, true);
|
||||||
|
|
@ -1310,15 +1311,15 @@ let gs_kiri_sla = exports;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// load wasm renderer in worker context
|
// load renderer code in worker context only
|
||||||
if (!self.window) {
|
if (!self.window) {
|
||||||
fetch('/wasm/kiri-sla.wasm')
|
fetch('/wasm/kiri-sla.wasm')
|
||||||
.then(response => response.arrayBuffer())
|
.then(response => response.arrayBuffer())
|
||||||
.then(bytes => WebAssembly.instantiate(bytes, {
|
.then(bytes => WebAssembly.instantiate(bytes, {
|
||||||
env: {
|
env: {
|
||||||
last: (a,b) => { console.log('last',a,b) },
|
reportf: (a,b) => { console.log('[f]',a,b) },
|
||||||
report: (a,b) => { console.log('report',a,b)
|
reporti: (a,b) => { console.log('[i]',a,b) }
|
||||||
}}
|
}
|
||||||
}))
|
}))
|
||||||
.then(results => {
|
.then(results => {
|
||||||
let {module, instance} = results;
|
let {module, instance} = results;
|
||||||
|
|
@ -1330,9 +1331,9 @@ let gs_kiri_sla = exports;
|
||||||
render: exports.render,
|
render: exports.render,
|
||||||
rle_encode: exports.rle_encode
|
rle_encode: exports.rle_encode
|
||||||
};
|
};
|
||||||
// console.log({heap});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// new WebAssembly rasterizer
|
||||||
self.renderLayerWasm = function renderLayer(params) {
|
self.renderLayerWasm = function renderLayer(params) {
|
||||||
let { width, height, index, widgets, scaleX, scaleY, masks } = params;
|
let { width, height, index, widgets, scaleX, scaleY, masks } = params;
|
||||||
let width2 = width / 2, height2 = height / 2;
|
let width2 = width / 2, height2 = height / 2;
|
||||||
|
|
@ -1356,6 +1357,7 @@ let gs_kiri_sla = exports;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// serialize poly into wasm heap memory
|
||||||
function writePoly(writer, poly) {
|
function writePoly(writer, poly) {
|
||||||
let pos = writer.skip(2);
|
let pos = writer.skip(2);
|
||||||
let inner = poly.inner;
|
let inner = poly.inner;
|
||||||
|
|
@ -1399,6 +1401,7 @@ let gs_kiri_sla = exports;
|
||||||
writer.writeU16(height, true);
|
writer.writeU16(height, true);
|
||||||
writer.writeU16(array.length, true);
|
writer.writeU16(array.length, true);
|
||||||
|
|
||||||
|
// scale and move all polys to fit in rendered platform coordinates
|
||||||
for (let i=0, il=array.length; i<il; i++) {
|
for (let i=0, il=array.length; i<il; i++) {
|
||||||
let poly = array[i];
|
let poly = array[i];
|
||||||
scaleMovePoly(poly);
|
scaleMovePoly(poly);
|
||||||
|
|
@ -1408,7 +1411,9 @@ let gs_kiri_sla = exports;
|
||||||
wasm.render(0, imagelen, 0);
|
wasm.render(0, imagelen, 0);
|
||||||
let image = wasm.heap.slice(0, imagelen), layers = [];
|
let image = wasm.heap.slice(0, imagelen), layers = [];
|
||||||
|
|
||||||
|
// one rle encoded bitstream for each mash (anti-alias sublayer)
|
||||||
for (let l=0; l<masks.length; l++) {
|
for (let l=0; l<masks.length; l++) {
|
||||||
|
// while the image is still in wasm heap memory, rle encode it
|
||||||
let rlelen = wasm.rle_encode(0, 0, imagelen, masks[l], imagelen, 0);
|
let rlelen = wasm.rle_encode(0, 0, imagelen, masks[l], imagelen, 0);
|
||||||
layers.push(wasm.heap.slice(imagelen, imagelen + rlelen));
|
layers.push(wasm.heap.slice(imagelen, imagelen + rlelen));
|
||||||
}
|
}
|
||||||
|
|
@ -1416,18 +1421,7 @@ let gs_kiri_sla = exports;
|
||||||
return { image, layers, end: count === 0 };
|
return { image, layers, end: count === 0 };
|
||||||
}
|
}
|
||||||
|
|
||||||
function polyout(poly, ctx, opt) {
|
// legacy JS-only rasterizer uses OffscreenCanvas
|
||||||
let { scaleX, scaleY, width, height, width2, height2 } = opt;
|
|
||||||
poly.forEachPoint((p,i) => {
|
|
||||||
if (i === 0) {
|
|
||||||
ctx.moveTo(height - (p.y * scaleY + height2), p.x * scaleX + width2);
|
|
||||||
} else {
|
|
||||||
ctx.lineTo(height - (p.y * scaleY + height2), p.x * scaleX + width2);
|
|
||||||
}
|
|
||||||
}, true);
|
|
||||||
ctx.closePath();
|
|
||||||
}
|
|
||||||
|
|
||||||
self.renderLayer = function renderLayer(params) {
|
self.renderLayer = function renderLayer(params) {
|
||||||
let {width, height, index, widgets, scaleX, scaleY} = params;
|
let {width, height, index, widgets, scaleX, scaleY} = params;
|
||||||
let layer = new OffscreenCanvas(height,width);
|
let layer = new OffscreenCanvas(height,width);
|
||||||
|
|
@ -1467,6 +1461,19 @@ let gs_kiri_sla = exports;
|
||||||
}
|
}
|
||||||
return { image: red, end: count === 0 };
|
return { image: red, end: count === 0 };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function polyout(poly, ctx, opt) {
|
||||||
|
let { scaleX, scaleY, width, height, width2, height2 } = opt;
|
||||||
|
poly.forEachPoint((p,i) => {
|
||||||
|
if (i === 0) {
|
||||||
|
ctx.moveTo(height - (p.y * scaleY + height2), p.x * scaleX + width2);
|
||||||
|
} else {
|
||||||
|
ctx.lineTo(height - (p.y * scaleY + height2), p.x * scaleX + width2);
|
||||||
|
}
|
||||||
|
}, true);
|
||||||
|
ctx.closePath();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
|
|
||||||
|
|
@ -29,8 +29,8 @@ struct point {
|
||||||
const Uint8 ph_size = sizeof(struct poly);
|
const Uint8 ph_size = sizeof(struct poly);
|
||||||
const Uint8 pt_size = sizeof(struct point);
|
const Uint8 pt_size = sizeof(struct point);
|
||||||
|
|
||||||
extern void last(float a, float b);
|
extern void reportf(float a, float b);
|
||||||
extern void report(int a, int b);
|
extern void reporti(int a, int b);
|
||||||
|
|
||||||
Uint32 readoff; // read position offset
|
Uint32 readoff; // read position offset
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue