From fdca3e6b07fd731a0d0e3ca1879b573fd07cb028 Mon Sep 17 00:00:00 2001 From: "A.Olokhtonov" Date: Fri, 8 Dec 2023 01:05:50 +0300 Subject: [PATCH] Fix epsilon calculation for RDP --- client/index.html | 2 +- client/index.js | 4 ++-- client/math.js | 3 ++- client/webgl_draw.js | 12 ++++++++++++ 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/client/index.html b/client/index.html index f1c1760..2e8cb41 100644 --- a/client/index.html +++ b/client/index.html @@ -56,7 +56,7 @@
- +
diff --git a/client/index.js b/client/index.js index 5fb5ae2..8a82057 100644 --- a/client/index.js +++ b/client/index.js @@ -19,8 +19,8 @@ const config = { second_finger_timeout: 500, buffer_first_touchmoves: 5, debug_print: false, - min_zoom: 0.0000005, - max_zoom: 10.0, + min_zoom: 1.0, + max_zoom: 1000, initial_offline_timeout: 1000, default_color: 0x00, default_width: 8, diff --git a/client/math.js b/client/math.js index 5d108e5..881ea28 100644 --- a/client/math.js +++ b/client/math.js @@ -7,7 +7,7 @@ function screen_to_canvas(state, p) { } function rdp_find_max(state, points, start, end) { - const EPS = 0.5 / Math.pow(state.canvas.zoom, 0.25); + const EPS = 1.0 / state.canvas.zoom; // const EPS = 10.0; let result = -1; @@ -86,6 +86,7 @@ function process_ewmv(points, round = false) { function process_stroke(state, points) { // const result0 = process_ewmv(points); const result1 = process_rdp(state, points, true); + console.debug('simplified to', points.length, 'points to', result1.length); return result1; } diff --git a/client/webgl_draw.js b/client/webgl_draw.js index d3b81ec..60bee84 100644 --- a/client/webgl_draw.js +++ b/client/webgl_draw.js @@ -164,6 +164,18 @@ function draw(state, context) { const dynamic_points = context.dynamic_serializer.offset / config.bytes_per_point; if (dynamic_points > 0) { + gl.drawBuffers([gl.BACK]); + + locations = context.locations['sdf'].main; + + gl.useProgram(context.programs['sdf'].main); + + gl.uniform2f(locations['u_res'], context.canvas.width, context.canvas.height); + gl.uniform2f(locations['u_scale'], state.canvas.zoom, state.canvas.zoom); + gl.uniform2f(locations['u_translation'], state.canvas.offset.x, state.canvas.offset.y); + gl.uniform1i(locations['u_stroke_count'], state.stroke_count); + gl.uniform1i(locations['u_debug_mode'], state.debug.red); + gl.clear(gl.DEPTH_BUFFER_BIT); gl.bindBuffer(gl.ARRAY_BUFFER, buffers['b_packed_dynamic']);