From 8abe88373fbbca1ebd9e60d2b571eecc20022e65 Mon Sep 17 00:00:00 2001 From: "A.Olokhtonov" Date: Sat, 13 Jan 2024 14:45:08 +0300 Subject: [PATCH] Skip copying out segments and segments_from. Use wasm_points and wasm_ids as is --- client/index.js | 2 +- client/speed.js | 21 +++++---------------- 2 files changed, 6 insertions(+), 17 deletions(-) diff --git a/client/index.js b/client/index.js index dc44cd5..310686a 100644 --- a/client/index.js +++ b/client/index.js @@ -212,7 +212,7 @@ async function main() { 'debug': { 'red': false, 'do_prepass': true, - 'use_wasm': false, + 'use_wasm': true, 'limit_from': false, 'limit_to': false, 'render_from': 0, diff --git a/client/speed.js b/client/speed.js index 28406d0..efba904 100644 --- a/client/speed.js +++ b/client/speed.js @@ -1,7 +1,7 @@ async function init_wasm(state) { const results = await WebAssembly.instantiateStreaming(fetch('wasm/lod.wasm')); state.wasm.exports = results.instance.exports; - state.wasm.exports.memory.grow(1024); + state.wasm.exports.memory.grow(4096); } function rdp_find_max(state, zoom, coords_from, start, end) { @@ -45,6 +45,8 @@ function rdp_find_max(state, zoom, coords_from, start, end) { } function do_lod_wasm(state, context) { + state.wasm.exports.total_free(); + const clipped_indices = state.wasm.exports.alloc(context.clipped_indices.size * 4); const stroke_coords_from = state.wasm.exports.alloc(state.coords_from.size * 4); const stroke_coords_to = state.wasm.exports.alloc(state.coords_to.size * 4); @@ -68,28 +70,15 @@ function do_lod_wasm(state, context) { ); // copy result back - const wasm_segments = new Uint32Array(state.wasm.exports.memory.buffer, segments, segment_count); - const wasm_segments_from = new Uint32Array(state.wasm.exports.memory.buffer, segments_from, context.clipped_indices.size + 1); const wasm_points = new Float32Array(state.wasm.exports.memory.buffer, coordinates + state.coordinates.size * 4, segment_count * 2); const wasm_ids = new Uint32Array(state.wasm.exports.memory.buffer, coordinates + (state.coordinates.size + segment_count * 2) * 4, segment_count); - - state.segments.data.set(wasm_segments); - state.segments.size = segment_count; - state.segments_from.data.set(wasm_segments_from); - state.segments_from.size = context.clipped_indices.size + 1; - - tv_ensure(context.instance_data_points, segment_count * 2); - tv_ensure(context.instance_data_ids, segment_count); - - context.instance_data_points.data.set(wasm_points); + context.instance_data_points.data = wasm_points; context.instance_data_points.size = segment_count * 2; - context.instance_data_ids.data.set(wasm_ids); + context.instance_data_ids.data = wasm_ids; context.instance_data_ids.size = segment_count; - state.wasm.exports.total_free(); - return segment_count; }