From 028de44023b21851c0c021dafef6c326827f1caf Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Sun, 30 Dec 2018 14:07:39 -0800 Subject: [PATCH] Do color lookups in a separate table --- demo2/pathfinder.ts | 8 ++++++-- utils/tile-svg/src/main.rs | 18 ++++++++++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/demo2/pathfinder.ts b/demo2/pathfinder.ts index 5aaad8c9..c8c114e7 100644 --- a/demo2/pathfinder.ts +++ b/demo2/pathfinder.ts @@ -312,7 +312,7 @@ class App { redraw(): void { const gl = this.gl, canvas = this.canvas; - console.log("viewBox", this.viewBox); + //console.log("viewBox", this.viewBox); // Start timer. let timerQuery = null; @@ -479,6 +479,10 @@ class App { this.objectCount = subchunk.length() / 4; gl.activeTexture(gl.TEXTURE0); gl.bindTexture(gl.TEXTURE_2D, this.fillColorsTexture); + const textureDataView = subchunk.contents(); + const textureData = new Uint8Array(textureDataView.buffer, + textureDataView.byteOffset, + textureDataView.byteLength); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, @@ -487,7 +491,7 @@ class App { 0, gl.RGBA, gl.UNSIGNED_BYTE, - subchunk.contents()); + textureData); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); diff --git a/utils/tile-svg/src/main.rs b/utils/tile-svg/src/main.rs index 28534103..9ef8352d 100644 --- a/utils/tile-svg/src/main.rs +++ b/utils/tile-svg/src/main.rs @@ -1010,6 +1010,8 @@ impl<'o> Tiler<'o> { for strip_origin_y in tile_rect.origin.y..tile_rect.max_y() { self.generate_strip(strip_origin_y); } + + //println!("{:#?}", self.built_object); } #[inline(never)] @@ -1029,6 +1031,8 @@ impl<'o> Tiler<'o> { #[inline(never)] fn process_old_active_edges(&mut self, tile_y: i16) { + let tile_origin_y = tile_y as f32 * TILE_HEIGHT; + let mut current_tile_x = self.built_object.tile_rect.origin.x; let mut current_subtile_x = 0.0; let mut current_winding = 0; @@ -1058,7 +1062,8 @@ impl<'o> Tiler<'o> { debug_assert!(current_tile_x < self.built_object.tile_rect.max_x()); let current_x = (current_tile_x as f32) * TILE_WIDTH + current_subtile_x; if segment_x >= current_x { - let (left, right) = (Point2D::new(current_x, 0.0), Point2D::new(segment_x, 0.0)); + let left = Point2D::new(current_x, tile_origin_y); + let right = Point2D::new(segment_x, tile_origin_y); self.built_object.add_fill(if edge_winding < 0 { &left } else { &right }, if edge_winding < 0 { &right } else { &left }, current_tile_x, @@ -1240,6 +1245,9 @@ impl BuiltScene { } } } + + // Copy shader. + scene.shaders[object_index as usize] = object.shader; } scene @@ -1349,8 +1357,14 @@ impl BuiltObject { } fn add_fill(&mut self, from: &Point2D, to: &Point2D, tile_x: i16, tile_y: i16) { + let tile_origin = Vector2D::new(tile_x as f32 * TILE_WIDTH, tile_y as f32 * TILE_HEIGHT); let tile_index = self.tile_coords_to_index(tile_x, tile_y); - self.fills.push(FillObjectPrimitive { from: *from, to: *to, tile_x, tile_y }); + self.fills.push(FillObjectPrimitive { + from: *from - tile_origin, + to: *to - tile_origin, + tile_x, + tile_y, + }); self.mask_tiles.insert(tile_index as usize); }