diff --git a/src/org/oscim/renderer/GLRenderer.java b/src/org/oscim/renderer/GLRenderer.java index 1b65a7fb..dffd4592 100644 --- a/src/org/oscim/renderer/GLRenderer.java +++ b/src/org/oscim/renderer/GLRenderer.java @@ -58,7 +58,7 @@ public class GLRenderer implements GLSurfaceView.Renderer { private static final int CACHE_TILES_MAX = 250; private static final int LIMIT_BUFFERS = 16 * MB; - public static final float COORD_MULTIPLIER = 8.0f; + public static final float COORD_SCALE = 8.0f; static int CACHE_TILES = CACHE_TILES_MAX; diff --git a/src/org/oscim/renderer/LineRenderer.java b/src/org/oscim/renderer/LineRenderer.java index da4a9051..d49f289f 100644 --- a/src/org/oscim/renderer/LineRenderer.java +++ b/src/org/oscim/renderer/LineRenderer.java @@ -42,7 +42,7 @@ public final class LineRenderer { // factor to normalize extrusion vector and scale to coord scale private final static float COORD_SCALE_BY_DIR_SCALE = - GLRenderer.COORD_MULTIPLIER / LineLayer.DIR_SCALE; + GLRenderer.COORD_SCALE / LineLayer.DIR_SCALE; // shader handles private static int[] lineProgram = new int[2]; diff --git a/src/org/oscim/renderer/layer/ExtrusionLayer.java b/src/org/oscim/renderer/layer/ExtrusionLayer.java index bb95f2f9..03c332aa 100644 --- a/src/org/oscim/renderer/layer/ExtrusionLayer.java +++ b/src/org/oscim/renderer/layer/ExtrusionLayer.java @@ -36,7 +36,7 @@ import android.util.Log; */ public class ExtrusionLayer extends Layer { private final static String TAG = ExtrusionLayer.class.getName(); - private static final float S = GLRenderer.COORD_MULTIPLIER; + private static final float S = GLRenderer.COORD_SCALE; private int mNumVertices = 0; private final VertexPoolItem mVertices; private VertexPoolItem mCurVertices; diff --git a/src/org/oscim/renderer/layer/LineLayer.java b/src/org/oscim/renderer/layer/LineLayer.java index d1443e3b..7fbb55e8 100644 --- a/src/org/oscim/renderer/layer/LineLayer.java +++ b/src/org/oscim/renderer/layer/LineLayer.java @@ -28,7 +28,7 @@ import android.graphics.Paint.Cap; * @author Hannes Janetzek */ public final class LineLayer extends Layer { - private static final float COORD_SCALE = GLRenderer.COORD_MULTIPLIER; + private static final float COORD_SCALE = GLRenderer.COORD_SCALE; // scale factor mapping extrusion vector to short values public static final float DIR_SCALE = 2048; // mask for packing last two bits of extrusion vector with texture diff --git a/src/org/oscim/renderer/layer/LineTexLayer.java b/src/org/oscim/renderer/layer/LineTexLayer.java index 95cfc3f4..b43857fe 100644 --- a/src/org/oscim/renderer/layer/LineTexLayer.java +++ b/src/org/oscim/renderer/layer/LineTexLayer.java @@ -65,7 +65,7 @@ public final class LineTexLayer extends Layer { // - in our case there is always the polygon fill array at start // - see addLine hack otherwise. - private static final float COORD_SCALE = GLRenderer.COORD_MULTIPLIER; + private static final float COORD_SCALE = GLRenderer.COORD_SCALE; // scale factor mapping extrusion vector to short values public static final float DIR_SCALE = 2048; diff --git a/src/org/oscim/renderer/layer/PolygonLayer.java b/src/org/oscim/renderer/layer/PolygonLayer.java index 77a0b0cc..65b77d2d 100644 --- a/src/org/oscim/renderer/layer/PolygonLayer.java +++ b/src/org/oscim/renderer/layer/PolygonLayer.java @@ -21,7 +21,7 @@ import org.oscim.renderer.GLRenderer; import org.oscim.theme.renderinstruction.Area; public final class PolygonLayer extends Layer { - private static final float S = GLRenderer.COORD_MULTIPLIER; + private static final float S = GLRenderer.COORD_SCALE; public Area area; diff --git a/src/org/oscim/renderer/overlays/BuildingOverlay.java b/src/org/oscim/renderer/overlays/BuildingOverlay.java index 96ab6b02..372d6b58 100644 --- a/src/org/oscim/renderer/overlays/BuildingOverlay.java +++ b/src/org/oscim/renderer/overlays/BuildingOverlay.java @@ -438,7 +438,7 @@ public class BuildingOverlay extends RenderOverlay { m.mvp[13] = y * scale; // scale to current tile world coordinates scale = (curPos.scale / oPos.scale) / div; - scale /= GLRenderer.COORD_MULTIPLIER; + scale /= GLRenderer.COORD_SCALE; m.mvp[0] = scale; m.mvp[5] = scale; m.mvp[10] = scale / 1000f; diff --git a/src/org/oscim/renderer/overlays/ModelOverlay.java b/src/org/oscim/renderer/overlays/ModelOverlay.java index 0770a5d7..4e382f06 100644 --- a/src/org/oscim/renderer/overlays/ModelOverlay.java +++ b/src/org/oscim/renderer/overlays/ModelOverlay.java @@ -238,7 +238,7 @@ public class ModelOverlay extends RenderOverlay { m.mvp[13] = y * scale; // scale to current tile world coordinates scale = (curPos.scale / oPos.scale) / div; - scale /= GLRenderer.COORD_MULTIPLIER; + scale /= GLRenderer.COORD_SCALE; m.mvp[0] = scale; m.mvp[5] = scale; m.mvp[10] = scale; // 1000f; diff --git a/src/org/oscim/renderer/overlays/RenderOverlay.java b/src/org/oscim/renderer/overlays/RenderOverlay.java index 4bf93e80..cda73c44 100644 --- a/src/org/oscim/renderer/overlays/RenderOverlay.java +++ b/src/org/oscim/renderer/overlays/RenderOverlay.java @@ -103,7 +103,7 @@ public abstract class RenderOverlay { float s = (curPos.scale / oPos.scale) / div; GlUtils.setMatrix(m.mvp, x * scale, y * scale, - s / GLRenderer.COORD_MULTIPLIER); + s / GLRenderer.COORD_SCALE); if (project) Matrix.multiplyMM(m.mvp, 0, m.viewproj, 0, m.mvp, 0); diff --git a/src/org/oscim/renderer/overlays/TestLineOverlay.java b/src/org/oscim/renderer/overlays/TestLineOverlay.java index 1d420e02..c2024bb1 100644 --- a/src/org/oscim/renderer/overlays/TestLineOverlay.java +++ b/src/org/oscim/renderer/overlays/TestLineOverlay.java @@ -425,7 +425,7 @@ public class TestLineOverlay extends RenderOverlay { m.mvp[13] = y * scale; // scale to current tile world coordinates scale = (curPos.scale / oPos.scale) / div; - scale /= GLRenderer.COORD_MULTIPLIER; + scale /= GLRenderer.COORD_SCALE; m.mvp[0] = scale; m.mvp[5] = scale; m.mvp[10] = 1; //scale; // 1000f; diff --git a/src/org/oscim/renderer/overlays/TextOverlay.java b/src/org/oscim/renderer/overlays/TextOverlay.java index 57626af5..dc691dc5 100644 --- a/src/org/oscim/renderer/overlays/TextOverlay.java +++ b/src/org/oscim/renderer/overlays/TextOverlay.java @@ -15,6 +15,17 @@ package org.oscim.renderer.overlays; +// TODO +// 1. rewrite :) +// 1.1 test if label is actually visible +// 2. compare previous to current state +// 2.1 test for new labels to be placed +// 2.2 handle collisions +// 3 join segments that belong to one feature +// 4 handle zoom-level changes +// 5 R-Tree might be handy +// + import org.oscim.core.MapPosition; import org.oscim.core.Tile; import org.oscim.renderer.GLRenderer; @@ -50,10 +61,45 @@ public class TextOverlay extends BasicOverlay { private MapPosition mWorkPos; - // TextLayer that is updating - private TextLayer mWorkLayer; // TextLayer that is ready to be added to 'layers' private TextLayer mCurLayer; + private TextLayer mNextLayer; + + // local pool, avoids synchronized TextItem.get()/release() + private Label mPool; + private Label mPrevLabels; + + private final float[] mTmpCoords = new float[8]; + + //private HashMap mItemMap; + //private Label mNewLabels; + //private final HashMap mActiveTiles; + + class Label extends TextItem { + TextItem item; + + //Link blocking; + //Link blockedBy; + // shared list of all label for a tile + //Link siblings; + + MapTile tile; + + public byte origin; + public int active; + public OBB2D bbox; + } + + // class Conflict { + // Conflict next; + // Label other; + // } + // + // class ActiveTile { + // MapTile tile; + // int activeLabels; + // Label labels; + // } /* package */boolean mRun; /* package */boolean mRerun; @@ -422,10 +468,10 @@ public class TextOverlay extends BasicOverlay { float x = (float) (oPos.x - curPos.x * div); float y = (float) (oPos.y - curPos.y * div); - float scale = curPos.scale / div; - - GlUtils.setMatrix(m.mvp, x * scale, y * scale, - scale / GLRenderer.COORD_MULTIPLIER); + float scale = (curPos.scale / mMapPosition.scale) / div; + float s = curPos.scale / div; + GlUtils.setMatrix(m.mvp, x * s, y * s, + scale / GLRenderer.COORD_SCALE); Matrix.multiplyMM(m.mvp, 0, m.view, 0, m.mvp, 0); }