diff --git a/src/render/draw_hillshade.js b/src/render/draw_hillshade.js index f9d7a1577e8..bcaefbafa89 100644 --- a/src/render/draw_hillshade.js +++ b/src/render/draw_hillshade.js @@ -116,13 +116,23 @@ function prepareHillshade(painter, tile) { gl.activeTexture(gl.TEXTURE1); + // if UNPACK_PREMULTIPLY_ALPHA_WEBGL is set to true prior to drawHillshade being called + // tiles will appear blank, because as you can see above the alpha value for these textures + // is always 0 + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, (false: any)); + + + tile.demTexture = tile.demTexture || painter.getTileTexture(tile.tileSize); if (tile.demTexture) { tile.demTexture.update(pixelData[0], false); + // for some reason flow thinks tile.demTexture can be null or undefined here :sob: + (tile.demTexture: any).bind(gl.NEAREST, gl.CLAMP_TO_EDGE); } else { tile.demTexture = new Texture(gl, pixelData[0], gl.RGBA, false); + tile.demTexture.bind(gl.NEAREST, gl.CLAMP_TO_EDGE); } - (tile.demTexture: any).bind(gl.NEAREST, gl.CLAMP_TO_EDGE); + gl.activeTexture(gl.TEXTURE0); if (!tile.texture) { @@ -131,7 +141,6 @@ function prepareHillshade(painter, tile) { tile.texture.clear(TERRAIN_TILE_HEIGHT, TERRAIN_TILE_WIDTH); } - gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, (false: any)); gl.viewport(0, 0, TERRAIN_TILE_WIDTH, TERRAIN_TILE_HEIGHT); diff --git a/src/source/raster_dem_tile_source.js b/src/source/raster_dem_tile_source.js index 5d94ddcf5f9..a3c8158eb5f 100644 --- a/src/source/raster_dem_tile_source.js +++ b/src/source/raster_dem_tile_source.js @@ -121,7 +121,11 @@ class RasterDEMTileSource extends RasterTileSource implements Source { unloadTile(tile: Tile) { - tile.unloadDEMData(); + if (tile.demTexture) this.map.painter.saveTileTexture(tile.demTexture); + if (tile.dem) delete tile.dem; + delete tile.neighboringTiles; + + tile.state = 'unloaded'; this.dispatcher.send('removeDEMTile', { uid: tile.uid, source: this.id }, undefined, tile.workerID); } diff --git a/src/source/tile.js b/src/source/tile.js index 1601068a0a3..d7752024c26 100644 --- a/src/source/tile.js +++ b/src/source/tile.js @@ -226,12 +226,6 @@ class Tile { this.state = 'unloaded'; } - unloadDEMData() { - this.dem = null; - this.neighboringTiles = null; - this.state = 'unloaded'; - } - redoPlacement(source: any) { if (source.type !== 'vector' && source.type !== 'geojson') { return;