refactor TileLayer:

- set specific TileRenderer in sub-class constructor
- remove TileLoader generics from TileLayer
This commit is contained in:
Hannes Janetzek 2014-02-16 22:52:31 +01:00
parent 5cffe3a3b3
commit adb56c7613
9 changed files with 50 additions and 55 deletions

View File

@ -36,7 +36,7 @@ public class PathOverlayActivity extends BitmapTileMapActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBitmapLayer.getTileRenderer().setBitmapAlpha(0.5f);
mBitmapLayer.tileRenderer().setBitmapAlpha(0.5f);
createLayers(1, true);

View File

@ -147,7 +147,7 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
}
}
public void setTileDataSource(ITileDataSource mapDatabase) {
public void setDataSource(ITileDataSource mapDatabase) {
if (mTileDataSource != null)
mTileDataSource.destroy();

View File

@ -30,6 +30,7 @@ import org.oscim.renderer.elements.ElementLayers;
import org.oscim.tiling.MapTile;
import org.oscim.tiling.TileLoader;
import org.oscim.tiling.TileManager;
import org.oscim.tiling.TileRenderer;
import org.oscim.tiling.source.ITileDataSink;
import org.oscim.tiling.source.ITileDataSource;
import org.oscim.tiling.source.ITileDataSource.QueryResult;
@ -38,7 +39,7 @@ import org.oscim.utils.FastMath;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class BitmapTileLayer extends TileLayer<TileLoader> {
public class BitmapTileLayer extends TileLayer {
protected static final Logger log = LoggerFactory.getLogger(BitmapTileLayer.class);
@ -65,7 +66,8 @@ public class BitmapTileLayer extends TileLayer<TileLoader> {
public BitmapTileLayer(Map map, TileSource tileSource, int cacheLimit) {
super(map, tileSource.getZoomLevelMin(), tileSource.getZoomLevelMax(), cacheLimit);
mTileSource = tileSource;
initLoader();
setRenderer(new TileRenderer(mTileManager));
initLoader(4);
}
@Override
@ -96,7 +98,7 @@ public class BitmapTileLayer extends TileLayer<TileLoader> {
break;
}
mRenderLayer.setBitmapAlpha(alpha);
tileRenderer().setBitmapAlpha(alpha);
}
@Override

View File

@ -16,18 +16,18 @@
*/
package org.oscim.layers.tile;
import java.util.ArrayList;
import org.oscim.core.MapPosition;
import org.oscim.layers.Layer;
import org.oscim.map.Map;
import org.oscim.map.Map.UpdateListener;
import org.oscim.tiling.TileLoader;
import org.oscim.tiling.TileManager;
import org.oscim.tiling.TileRenderer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public abstract class TileLayer<T extends TileLoader> extends Layer implements Map.UpdateListener {
public abstract class TileLayer extends Layer implements UpdateListener {
static final Logger log = LoggerFactory.getLogger(TileLayer.class);
private final static int MAX_ZOOMLEVEL = 17;
@ -35,10 +35,8 @@ public abstract class TileLayer<T extends TileLoader> extends Layer implements M
private final static int CACHE_LIMIT = 150;
protected final TileManager mTileManager;
protected final TileRenderer mRenderLayer;
protected final int mNumTileLoader = 4;
protected final ArrayList<T> mTileLoader;
protected TileLoader[] mTileLoader;
public TileLayer(Map map) {
this(map, MIN_ZOOMLEVEL, MAX_ZOOMLEVEL, CACHE_LIMIT);
@ -46,39 +44,36 @@ public abstract class TileLayer<T extends TileLoader> extends Layer implements M
public TileLayer(Map map, int minZoom, int maxZoom, int cacheLimit) {
super(map);
// TileManager responsible for adding visible tiles
// to load queue and managing in-memory tile cache.
/* TileManager responsible for adding visible tiles
* to load queue and managing in-memory tile cache. */
mTileManager = new TileManager(map, minZoom, maxZoom, cacheLimit);
// Instantiate TileLoader threads
mTileLoader = new ArrayList<T>();
// RenderLayer is working in GL Thread and actually
// drawing loaded tiles to screen.
mRenderer = mRenderLayer = new TileRenderer(mTileManager);
}
protected void initLoader() {
for (int i = 0; i < mNumTileLoader; i++) {
T tileGenerator = createLoader(mTileManager);
mTileLoader.add(tileGenerator);
tileGenerator.start();
}
abstract protected TileLoader createLoader(TileManager tm);
protected void setRenderer(TileRenderer renderer) {
mRenderer = renderer;
}
abstract protected T createLoader(TileManager tm);
public TileRenderer getTileRenderer() {
public TileRenderer tileRenderer() {
return (TileRenderer) mRenderer;
}
protected void initLoader(int numLoaders) {
mTileLoader = new TileLoader[numLoaders];
for (int i = 0; i < numLoaders; i++) {
mTileLoader[i] = createLoader(mTileManager);
mTileLoader[i].start();
}
}
@Override
public void onMapUpdate(MapPosition mapPosition, boolean changed, boolean clear) {
if (clear) {
// sync with TileRenderer
synchronized (mRenderLayer) {
mRenderLayer.clearTiles();
synchronized (mRenderer) {
tileRenderer().clearTiles();
mTileManager.init();
}
@ -91,7 +86,7 @@ public abstract class TileLayer<T extends TileLoader> extends Layer implements M
@Override
public void onDetach() {
for (T loader : mTileLoader) {
for (TileLoader loader : mTileLoader) {
loader.pause();
loader.interrupt();
loader.cleanup();
@ -99,27 +94,26 @@ public abstract class TileLayer<T extends TileLoader> extends Layer implements M
}
void notifyLoaders() {
for (int i = 0; i < mNumTileLoader; i++) {
mTileLoader.get(i).go();
}
for (TileLoader loader : mTileLoader)
loader.go();
}
protected void pauseLoaders(boolean wait) {
for (T loader : mTileLoader) {
for (TileLoader loader : mTileLoader) {
if (!loader.isPausing())
loader.pause();
}
if (!wait)
return;
for (T loader : mTileLoader) {
for (TileLoader loader : mTileLoader) {
if (!loader.isPausing())
loader.awaitPausing();
}
}
protected void resumeLoaders() {
for (T loader : mTileLoader)
for (TileLoader loader : mTileLoader)
loader.proceed();
}
}

View File

@ -21,7 +21,6 @@ import org.oscim.backend.canvas.Paint.Cap;
import org.oscim.core.GeometryBuffer;
import org.oscim.core.Tile;
import org.oscim.layers.tile.TileLayer;
import org.oscim.layers.tile.example.TestTileLayer.TestTileLoader;
import org.oscim.map.Map;
import org.oscim.renderer.elements.ElementLayers;
import org.oscim.renderer.elements.LineLayer;
@ -32,7 +31,7 @@ import org.oscim.tiling.TileManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class TestTileLayer extends TileLayer<TestTileLoader> {
public class TestTileLayer extends TileLayer {
static final Logger log = LoggerFactory.getLogger(TestTileLayer.class);
public TestTileLayer(Map map) {

View File

@ -29,7 +29,7 @@ public class BuildingLayer extends Layer {
public BuildingLayer(Map map, VectorTileLayer tileLayer) {
super(map);
mExtLayer = new ExtrusionRenderer(tileLayer.getTileRenderer()) {
mExtLayer = new ExtrusionRenderer(tileLayer.tileRenderer()) {
private long mStartTime;
@Override

View File

@ -21,7 +21,7 @@ import org.oscim.map.Map;
import org.oscim.theme.IRenderTheme;
import org.oscim.tiling.TileLoader;
import org.oscim.tiling.TileManager;
import org.oscim.tiling.source.ITileDataSource;
import org.oscim.tiling.TileRenderer;
import org.oscim.tiling.source.TileSource;
import org.oscim.tiling.source.TileSource.OpenResult;
import org.slf4j.Logger;
@ -32,19 +32,21 @@ import org.slf4j.LoggerFactory;
* {@link VectorTileLoader} that load and assemble vector tiles
* for rendering.
*/
public class VectorTileLayer extends TileLayer<VectorTileLoader> {
public class VectorTileLayer extends TileLayer {
static final Logger log = LoggerFactory.getLogger(VectorTileLayer.class);
private TileSource mTileSource;
public VectorTileLayer(Map map) {
super(map);
initLoader();
setRenderer(new TileRenderer(mTileManager));
initLoader(4);
}
public VectorTileLayer(Map map, int minZoom, int maxZoom, int cacheLimit) {
super(map, minZoom, maxZoom, cacheLimit);
initLoader();
setRenderer(new TileRenderer(mTileManager));
initLoader(4);
}
@Override
@ -75,10 +77,8 @@ public class VectorTileLayer extends TileLayer<VectorTileLoader> {
mTileSource = tileSource;
for (int i = 0; i < mNumTileLoader; i++) {
ITileDataSource tileDataSource = tileSource.getDataSource();
mTileLoader.get(i).setTileDataSource(tileDataSource);
}
for (TileLoader l : mTileLoader)
((VectorTileLoader) l).setDataSource(tileSource.getDataSource());
mMap.clearMap();
resumeLoaders();
@ -96,10 +96,10 @@ public class VectorTileLayer extends TileLayer<VectorTileLoader> {
pauseLoaders(true);
mTileManager.clearJobs();
for (VectorTileLoader g : mTileLoader)
g.setRenderTheme(theme);
for (TileLoader l : mTileLoader)
((VectorTileLoader) l).setRenderTheme(theme);
mRenderLayer.setOverdrawColor(theme.getMapBackground());
tileRenderer().setOverdrawColor(theme.getMapBackground());
resumeLoaders();
}

View File

@ -158,7 +158,7 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
}
}
public void setTileDataSource(ITileDataSource mapDatabase) {
public void setDataSource(ITileDataSource mapDatabase) {
if (mTileDataSource != null)
mTileDataSource.destroy();

View File

@ -43,7 +43,7 @@ public class LabelLayer extends Layer implements Map.InputListener, Map.UpdateLi
super(map);
l.getManager().events.bind(this);
mLabelPlacer = new LabelPlacement(map, l.getTileRenderer());
mLabelPlacer = new LabelPlacement(map, l.tileRenderer());
mWorker = new Worker(map);
mRenderer = new TextRenderer(mWorker);
}