From 8bea9202538f2c57e3a2a96f91d49e45f4808448 Mon Sep 17 00:00:00 2001 From: Hannes Janetzek Date: Sun, 28 Apr 2013 06:04:56 +0200 Subject: [PATCH] remove tilesChanged parameter of RenderLayer.update as there is no more global tile layer - fix PathOverlay update --- .../oscim/layers/tile/TileRenderLayer.java | 11 +++-- src/org/oscim/overlay/ItemizedOverlay.java | 14 +++--- src/org/oscim/overlay/PathOverlay.java | 31 +++++++------ src/org/oscim/renderer/GLRenderer.java | 3 +- src/org/oscim/renderer/RenderLayer.java | 17 +++---- .../oscim/renderer/overlays/AtlasTest.java | 3 +- .../renderer/overlays/CustomOverlay.java | 4 +- .../renderer/overlays/ExtrusionOverlay.java | 12 +++-- .../oscim/renderer/overlays/GridOverlay.java | 3 +- .../oscim/renderer/overlays/TestOverlay.java | 2 +- .../oscim/renderer/overlays/TextOverlay.java | 4 +- .../oscim/renderer/overlays/ViewOverlay.java | 45 ------------------- 12 files changed, 49 insertions(+), 100 deletions(-) delete mode 100644 src/org/oscim/renderer/overlays/ViewOverlay.java diff --git a/src/org/oscim/layers/tile/TileRenderLayer.java b/src/org/oscim/layers/tile/TileRenderLayer.java index ebaa66d0..554a11b1 100644 --- a/src/org/oscim/layers/tile/TileRenderLayer.java +++ b/src/org/oscim/layers/tile/TileRenderLayer.java @@ -20,8 +20,8 @@ import static org.oscim.layers.tile.MapTile.STATE_READY; import org.oscim.core.MapPosition; import org.oscim.renderer.BufferObject; import org.oscim.renderer.GLRenderer; -import org.oscim.renderer.RenderLayer; import org.oscim.renderer.GLRenderer.Matrices; +import org.oscim.renderer.RenderLayer; import org.oscim.utils.ScanBox; import org.oscim.view.MapView; @@ -44,11 +44,10 @@ public class TileRenderLayer extends RenderLayer { } @Override - public void update(MapPosition curPos, boolean positionChanged, boolean tilesChanged, - Matrices matrices) { + public void update(MapPosition pos, boolean positionChanged, Matrices m) { int serial = 0; - mMapPosition.copy(curPos); + mMapPosition.copy(pos); if (mDrawTiles != null) serial = mDrawTiles.getSerial(); @@ -85,9 +84,9 @@ public class TileRenderLayer extends RenderLayer { /* prepare tile for rendering */ int uploadCnt = compileTileLayers(tiles, tileCnt); - tilesChanged |= (uploadCnt > 0); + //tilesChanged |= (uploadCnt > 0); - TileRenderer.draw(tiles, tileCnt, curPos, matrices, mFaded); + TileRenderer.draw(tiles, tileCnt, pos, m, mFaded); } @Override diff --git a/src/org/oscim/overlay/ItemizedOverlay.java b/src/org/oscim/overlay/ItemizedOverlay.java index 00cbbc00..39bd187f 100644 --- a/src/org/oscim/overlay/ItemizedOverlay.java +++ b/src/org/oscim/overlay/ItemizedOverlay.java @@ -88,18 +88,16 @@ public abstract class ItemizedOverlay extends Overlay // note: this is called from GL-Thread. so check your syncs! @Override - public synchronized void update(MapPosition curPos, - boolean positionChanged, - boolean tilesChanged, Matrices matrices) { + public synchronized void update(MapPosition pos, boolean changed, Matrices m) { - if (!positionChanged && !mUpdate) + if (!changed && !mUpdate) return; mUpdate = false; - double mx = curPos.x; - double my = curPos.y; - double scale = Tile.SIZE * curPos.scale; + double mx = pos.x; + double my = pos.y; + double scale = Tile.SIZE * pos.scale; int changesInvisible = 0; int changedVisible = 0; @@ -146,7 +144,7 @@ public abstract class ItemizedOverlay extends Overlay // keep position for current state // updateMapPosition(); - mMapPosition.copy(curPos); + mMapPosition.copy(pos); layers.clear(); diff --git a/src/org/oscim/overlay/PathOverlay.java b/src/org/oscim/overlay/PathOverlay.java index 96764063..154b51e7 100644 --- a/src/org/oscim/overlay/PathOverlay.java +++ b/src/org/oscim/overlay/PathOverlay.java @@ -69,13 +69,20 @@ public class PathOverlay extends Layer { mMapPoint = new PointD(); MAX_SCALE = (1 << MAX_ZOOM) * Tile.SIZE; } + private final int mCurX = -1; + private final int mCurY = -1; + private final int mCurZ = -1; // note: this is called from GL-Thread. so check your syncs! // TODO use an Overlay-Thread to build up layers (like for Labeling) @Override - public synchronized void update(MapPosition curPos, - boolean positionChanged, - boolean tilesChanged, Matrices matrices) { + public synchronized void update(MapPosition pos, boolean changed, Matrices m) { + int tz = 1 << pos.zoomLevel; + int tx = (int) (pos.x * tz); + int ty = (int) (pos.y * tz); + + // update layers when map moved by at least one tile + boolean tilesChanged = (tx != mCurX || ty != mCurY || tz != mCurZ); if (!tilesChanged && !mUpdatePoints) return; @@ -122,13 +129,11 @@ public class PathOverlay extends Layer { // Hack: reset verticesCnt to reuse layer ll.verticesCnt = 0; - int x, y, prevX, prevY; - - int z = curPos.zoomLevel; + int z = pos.zoomLevel; float div = FastMath.pow(z - MAX_ZOOM); - int mx = (int) (curPos.x * (Tile.SIZE << z)); - int my = (int) (curPos.y * (Tile.SIZE << z)); + int mx = (int) (pos.x * (Tile.SIZE << z)); + int my = (int) (pos.y * (Tile.SIZE << z)); int j = 0; @@ -136,8 +141,8 @@ public class PathOverlay extends Layer { int flip = 0; int flipMax = Tile.SIZE << (z - 1); - x = (int)(mPreprojected[j++] * div) - mx; - y = (int)(mPreprojected[j++] * div) - my; + int x = (int)(mPreprojected[j++] * div) - mx; + int y = (int)(mPreprojected[j++] * div) - my; if (x > flipMax) { x -= (flipMax * 2); @@ -151,8 +156,8 @@ public class PathOverlay extends Layer { int i = addPoint(projected, 0, x, y); - prevX = x; - prevY = y; + int prevX = x; + int prevY = y; for (; j < size; j += 2) { x = (int)(mPreprojected[j + 0] * div) - mx; @@ -206,7 +211,7 @@ public class PathOverlay extends Layer { ll.addLine(projected, i, false); // keep position to render relative to current state - mMapPosition.copy(curPos); + mMapPosition.copy(pos); // items are placed relative to scale 1 mMapPosition.scale = 1 << z; diff --git a/src/org/oscim/renderer/GLRenderer.java b/src/org/oscim/renderer/GLRenderer.java index e5a91074..d0d6e4e9 100644 --- a/src/org/oscim/renderer/GLRenderer.java +++ b/src/org/oscim/renderer/GLRenderer.java @@ -242,7 +242,6 @@ public class GLRenderer implements GLSurfaceView.Renderer { | GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_STENCIL_BUFFER_BIT); - boolean tilesChanged = false; boolean positionChanged = false; // get current MapPosition, set mBoxCoords (mapping of screen to model @@ -269,7 +268,7 @@ public class GLRenderer implements GLSurfaceView.Renderer { RenderLayer[] overlays = mMapView.getLayerManager().getRenderLayers(); for (int i = 0, n = overlays.length; i < n; i++) - overlays[i].update(mMapPosition, positionChanged, tilesChanged, mMatrices); + overlays[i].update(mMapPosition, positionChanged, mMatrices); /* draw layers */ for (int i = 0, n = overlays.length; i < n; i++) { diff --git a/src/org/oscim/renderer/RenderLayer.java b/src/org/oscim/renderer/RenderLayer.java index 90702f3b..565d58f9 100644 --- a/src/org/oscim/renderer/RenderLayer.java +++ b/src/org/oscim/renderer/RenderLayer.java @@ -38,33 +38,30 @@ public abstract class RenderLayer { // /////////////// called from GLRender Thread //////////////////////// /** - * called 1. by GLRenderer. Set 'newData' true when 'compile()' should be - * called - * before next 'render()' + * Called first by GLRenderer: Set 'newData' true when 'compile()' should be + * called before next 'render()' * * @param curPos TODO * @param positionChanged * true when MapPosition has changed - * @param tilesChanged - * true when current tiles changed * @param matrices TODO */ - public abstract void update(MapPosition curPos, boolean positionChanged, boolean tilesChanged, + public abstract void update(MapPosition curPos, boolean positionChanged, Matrices matrices); /** - * called 2. compile everything for drawing + * 2: Compile everything for drawing * Set 'isReady' true when things are ready for 'render()' */ public abstract void compile(); /** - * called 3. draw overlay + * 3: Draw layer * * @param pos - * current MapPosition + * Current MapPosition * @param m - * current render matrices + matrix for temporary use + * Current render matrices + matrix for temporary use */ public abstract void render(MapPosition pos, Matrices m); diff --git a/src/org/oscim/renderer/overlays/AtlasTest.java b/src/org/oscim/renderer/overlays/AtlasTest.java index 6d5c35d1..923b7e79 100644 --- a/src/org/oscim/renderer/overlays/AtlasTest.java +++ b/src/org/oscim/renderer/overlays/AtlasTest.java @@ -116,8 +116,7 @@ public class AtlasTest extends BasicOverlay { boolean initial = true; @Override - public void update(MapPosition pos, boolean positionChanged, - boolean tilesChanged, Matrices m) { + public void update(MapPosition pos, boolean changed, Matrices m) { if (initial) { mMapPosition.copy(pos); diff --git a/src/org/oscim/renderer/overlays/CustomOverlay.java b/src/org/oscim/renderer/overlays/CustomOverlay.java index 8ff2efff..2dfe7f33 100644 --- a/src/org/oscim/renderer/overlays/CustomOverlay.java +++ b/src/org/oscim/renderer/overlays/CustomOverlay.java @@ -55,7 +55,7 @@ public class CustomOverlay extends RenderLayer { // ---------- everything below runs in GLRender Thread ---------- @Override - public void update(MapPosition curPos, boolean positionChanged, boolean tilesChanged, Matrices matrices) { + public void update(MapPosition pos, boolean changed, Matrices matrices) { if (!mInitialized) { if (!init()) return; @@ -66,7 +66,7 @@ public class CustomOverlay extends RenderLayer { newData = true; // fix current MapPosition - mMapPosition.copy(curPos); + mMapPosition.copy(pos); } } diff --git a/src/org/oscim/renderer/overlays/ExtrusionOverlay.java b/src/org/oscim/renderer/overlays/ExtrusionOverlay.java index 8847081c..d305be12 100644 --- a/src/org/oscim/renderer/overlays/ExtrusionOverlay.java +++ b/src/org/oscim/renderer/overlays/ExtrusionOverlay.java @@ -21,13 +21,12 @@ import java.nio.ShortBuffer; import org.oscim.core.MapPosition; import org.oscim.core.Tile; import org.oscim.layers.tile.MapTile; -import org.oscim.layers.tile.MapTile; import org.oscim.layers.tile.TileRenderLayer; import org.oscim.layers.tile.TileSet; import org.oscim.renderer.GLRenderer; -import org.oscim.renderer.RenderLayer; import org.oscim.renderer.GLRenderer.Matrices; import org.oscim.renderer.GLState; +import org.oscim.renderer.RenderLayer; import org.oscim.renderer.layer.ExtrusionLayer; import org.oscim.utils.GlUtils; import org.oscim.view.MapView; @@ -66,8 +65,7 @@ public class ExtrusionOverlay extends RenderLayer { private int mTileCnt; @Override - public void update(MapPosition curPos, boolean positionChanged, - boolean tilesChanged, Matrices matrices) { + public void update(MapPosition pos, boolean changed, Matrices matrices) { mMapView.getMapViewPosition().getMapPosition(mMapPosition); @@ -103,7 +101,7 @@ public class ExtrusionOverlay extends RenderLayer { MapTile[] tiles = mTileSet.tiles; // FIXME just release tiles in this case - if (mAlpha == 0 || curPos.zoomLevel < 16) { + if (mAlpha == 0 || pos.zoomLevel < 16) { isReady = false; return; } @@ -113,7 +111,7 @@ public class ExtrusionOverlay extends RenderLayer { mTiles = new MapTile[mTileSet.cnt * 4]; ExtrusionLayer el; - if (curPos.zoomLevel >= 17) { + if (pos.zoomLevel >= 17) { for (int i = 0; i < mTileSet.cnt; i++) { if (!tiles[i].isVisible) continue; @@ -139,7 +137,7 @@ public class ExtrusionOverlay extends RenderLayer { if (el.compiled) mTiles[ready++] = tiles[i]; } - } else if (curPos.zoomLevel == 16) { + } else if (pos.zoomLevel == 16) { for (int i = 0; i < mTileSet.cnt; i++) { if (!tiles[i].isVisible) continue; diff --git a/src/org/oscim/renderer/overlays/GridOverlay.java b/src/org/oscim/renderer/overlays/GridOverlay.java index 1580b663..94cc363f 100644 --- a/src/org/oscim/renderer/overlays/GridOverlay.java +++ b/src/org/oscim/renderer/overlays/GridOverlay.java @@ -104,8 +104,7 @@ public class GridOverlay extends BasicOverlay { private int mCurZ = -1; @Override - public synchronized void update(MapPosition curPos, boolean positionChanged, - boolean tilesChanged, Matrices matrices) { + public synchronized void update(MapPosition curPos, boolean changed, Matrices m) { int z = 1 << curPos.zoomLevel; int x = (int) (curPos.x * z); diff --git a/src/org/oscim/renderer/overlays/TestOverlay.java b/src/org/oscim/renderer/overlays/TestOverlay.java index ec974161..c5b280dc 100644 --- a/src/org/oscim/renderer/overlays/TestOverlay.java +++ b/src/org/oscim/renderer/overlays/TestOverlay.java @@ -122,7 +122,7 @@ public class TestOverlay extends BasicOverlay { @Override public synchronized void update(MapPosition curPos, boolean positionChanged, - boolean tilesChanged, Matrices matrices) { + Matrices matrices) { // keep position constant (or update layer relative to new position) //mMapPosition.copy(curPos); diff --git a/src/org/oscim/renderer/overlays/TextOverlay.java b/src/org/oscim/renderer/overlays/TextOverlay.java index 158bde2c..8ef05039 100644 --- a/src/org/oscim/renderer/overlays/TextOverlay.java +++ b/src/org/oscim/renderer/overlays/TextOverlay.java @@ -678,7 +678,7 @@ private final static String TAG = TextOverlay.class.getName(); @Override public synchronized void update(MapPosition curPos, boolean positionChanged, - boolean tilesChanged, Matrices matrices) { + Matrices matrices) { if (mNextLayer != null) { // keep text layer, not recrating its canvas each time @@ -703,7 +703,7 @@ private final static String TAG = TextOverlay.class.getName(); this.newData = true; - if (!(positionChanged || tilesChanged)) + if (!positionChanged) return; } diff --git a/src/org/oscim/renderer/overlays/ViewOverlay.java b/src/org/oscim/renderer/overlays/ViewOverlay.java deleted file mode 100644 index 19366761..00000000 --- a/src/org/oscim/renderer/overlays/ViewOverlay.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2013 Hannes Janetzek - * - * This program is free software: you can redistribute it and/or modify it under the - * terms of the GNU Lesser General Public License as published by the Free Software - * Foundation, either version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A - * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License along with - * this program. If not, see . - */ -package org.oscim.renderer.overlays; - -import org.oscim.core.MapPosition; -import org.oscim.renderer.RenderLayer; -import org.oscim.renderer.GLRenderer.Matrices; -import org.oscim.view.MapView; - -public class ViewOverlay extends RenderLayer { - - - public ViewOverlay(MapView mapView) { - super(mapView); - } - - @Override - public void update(MapPosition curPos, boolean positionChanged, boolean tilesChanged, - Matrices matrices) { - - } - - @Override - public void compile() { - - } - - @Override - public void render(MapPosition pos, Matrices m) { - - } - -}