diff --git a/vtm/src/org/oscim/layers/overlay/MapScaleBar.java b/vtm-android/src/org/oscim/android/MapScaleBar.java
similarity index 99%
rename from vtm/src/org/oscim/layers/overlay/MapScaleBar.java
rename to vtm-android/src/org/oscim/android/MapScaleBar.java
index 860c9d1f..3187b222 100644
--- a/vtm/src/org/oscim/layers/overlay/MapScaleBar.java
+++ b/vtm-android/src/org/oscim/android/MapScaleBar.java
@@ -1,3 +1,4 @@
+package org.oscim.android;
///*
// * Copyright 2010, 2011, 2012 mapsforge.org
// * Copyright 2013 Hannes Janetzek
diff --git a/vtm-gdx-android/.classpath b/vtm-gdx-android/.classpath
index 346a9895..82570028 100644
--- a/vtm-gdx-android/.classpath
+++ b/vtm-gdx-android/.classpath
@@ -1,13 +1,13 @@
-
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/vtm-gdx-android/src/org/oscim/gdx/MainActivity.java b/vtm-gdx-android/src/org/oscim/gdx/MainActivity.java
index 729eaa3d..5b6a71da 100644
--- a/vtm-gdx-android/src/org/oscim/gdx/MainActivity.java
+++ b/vtm-gdx-android/src/org/oscim/gdx/MainActivity.java
@@ -14,6 +14,7 @@ import android.os.Bundle;
import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;
import com.badlogic.gdx.backends.android.AndroidGL20;
+import com.badlogic.gdx.utils.SharedLibraryLoader;
public class MainActivity extends AndroidApplication {
@@ -34,6 +35,7 @@ public class MainActivity extends AndroidApplication {
AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();
cfg.useGL20 = true;
+ new SharedLibraryLoader().load("vtm-jni");
initialize(new GdxMap(), cfg);
}
}
\ No newline at end of file
diff --git a/vtm-gdx-desktop/.classpath b/vtm-gdx-desktop/.classpath
index b24402d4..6d4b041e 100644
--- a/vtm-gdx-desktop/.classpath
+++ b/vtm-gdx-desktop/.classpath
@@ -1,12 +1,12 @@
-
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/vtm-gdx-desktop/src/org/oscim/awt/AwtBitmap.java b/vtm-gdx-desktop/src/org/oscim/awt/AwtBitmap.java
index 9895cec9..ca66883c 100644
--- a/vtm-gdx-desktop/src/org/oscim/awt/AwtBitmap.java
+++ b/vtm-gdx-desktop/src/org/oscim/awt/AwtBitmap.java
@@ -7,6 +7,7 @@ import java.nio.IntBuffer;
import javax.imageio.ImageIO;
+import org.oscim.backend.Log;
import org.oscim.backend.canvas.Bitmap;
import com.badlogic.gdx.Gdx;
@@ -27,6 +28,10 @@ public class AwtBitmap implements Bitmap {
AwtBitmap(InputStream inputStream) throws IOException {
this.bitmap = ImageIO.read(inputStream);
+ this.width = this.bitmap.getWidth();
+ this.height = this.bitmap.getHeight();
+ if(!this.bitmap.isAlphaPremultiplied())
+ this.bitmap.coerceData(true);
}
@Override
public int getWidth() {
@@ -49,20 +54,23 @@ public class AwtBitmap implements Bitmap {
// TODO Auto-generated method stub
}
- private static IntBuffer tmpBuffer = BufferUtils.newIntBuffer(256 * 256);
- private static int[] tmpPixel = new int[256 * 256];
+ private static IntBuffer tmpBuffer = BufferUtils.newIntBuffer(512 * 256);
+ private static int[] tmpPixel = new int[512 * 256];
+
@Override
public int uploadToTexture(boolean replace) {
int[] pixels;
IntBuffer buffer;
- if (width == 256 && height == 256){
+ if (width == 512 && height == 256){
pixels = tmpPixel;
buffer = tmpBuffer;
buffer.clear();
+ Log.d("AwtBitmap", "default texture");
}else{
pixels = new int[width * height];
buffer = BufferUtils.newIntBuffer(width * height);
+ Log.d("AwtBitmap", "create texture buffer " + width + "x" + height);
}
diff --git a/vtm-gdx-desktop/src/org/oscim/awt/AwtCanvas.java b/vtm-gdx-desktop/src/org/oscim/awt/AwtCanvas.java
index 2452dff1..816b3a0f 100644
--- a/vtm-gdx-desktop/src/org/oscim/awt/AwtCanvas.java
+++ b/vtm-gdx-desktop/src/org/oscim/awt/AwtCanvas.java
@@ -1,9 +1,27 @@
+/*
+ * Copyright 2010, 2011, 2012, 2013 mapsforge.org
+ * 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.awt;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
+import java.awt.font.TextLayout;
+import java.awt.geom.AffineTransform;
import org.oscim.backend.canvas.Bitmap;
import org.oscim.backend.canvas.Canvas;
@@ -44,17 +62,48 @@ public class AwtCanvas implements Canvas {
}
-
@Override
- public void drawText(String string, float x, float y, Paint stroke) {
- AwtPaint p = (AwtPaint)stroke;
+ public void drawText(String text, float x, float y, Paint paint) {
- canvas.setFont(p.font);
- canvas.setColor(p.color);
+// if (paint.isTransparent()) {
+// return;
+// }
- canvas.drawString(string, (int)x, (int)y);
+ AwtPaint awtPaint = (AwtPaint)paint;
+
+ //AwtPaint awtPaint = AwtGraphicFactory.getAwtPaint(paint);
+
+ if (awtPaint.stroke == null) {
+ canvas.setColor(awtPaint.color);
+ canvas.setFont(awtPaint.font);
+ canvas.drawString(text, x, y);
+ } else {
+ setColorAndStroke(awtPaint);
+
+ TextLayout textLayout = new TextLayout(text, awtPaint.font, canvas.getFontRenderContext());
+ AffineTransform affineTransform = new AffineTransform();
+ affineTransform.translate(x, y);
+ canvas.draw(textLayout.getOutline(affineTransform));
+ }
}
+ private void setColorAndStroke(AwtPaint awtPaint) {
+ canvas.setColor(awtPaint.color);
+ if (awtPaint.stroke != null) {
+ canvas.setStroke(awtPaint.stroke);
+ }
+ }
+
+// @Override
+// public void drawText(String string, float x, float y, Paint stroke) {
+// AwtPaint p = (AwtPaint)stroke;
+//
+// canvas.setFont(p.font);
+// canvas.setColor(p.color);
+//
+// canvas.drawString(string, (int)x, (int)y);
+// }
+
@Override
public void drawBitmap(Bitmap bitmap, float x, float y) {
// TODO Auto-generated method stub
diff --git a/vtm-gdx-desktop/src/org/oscim/awt/AwtGraphics.java b/vtm-gdx-desktop/src/org/oscim/awt/AwtGraphics.java
index 944b2b28..a2cec837 100644
--- a/vtm-gdx-desktop/src/org/oscim/awt/AwtGraphics.java
+++ b/vtm-gdx-desktop/src/org/oscim/awt/AwtGraphics.java
@@ -52,7 +52,7 @@ public class AwtGraphics extends CanvasAdapter {
static final Graphics2D canvas;
static {
- image = new BufferedImage(64, 64, BufferedImage.TYPE_INT_ARGB);
+ image = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
canvas = image.createGraphics();
canvas.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON );
//canvas.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
@@ -72,7 +72,8 @@ public class AwtGraphics extends CanvasAdapter {
}
static synchronized float getTextWidth(FontMetrics fm, String text) {
- return (float)fm.getStringBounds(text, canvas).getWidth();
+ //return (float)fm.getStringBounds(text, canvas).getWidth();
+ return fm.stringWidth(text);
}
@Override
diff --git a/vtm-gdx-desktop/src/org/oscim/awt/AwtPaint.java b/vtm-gdx-desktop/src/org/oscim/awt/AwtPaint.java
index 8186240e..4705c394 100644
--- a/vtm-gdx-desktop/src/org/oscim/awt/AwtPaint.java
+++ b/vtm-gdx-desktop/src/org/oscim/awt/AwtPaint.java
@@ -1,22 +1,50 @@
+/*
+ * Copyright 2010, 2011, 2012, 2013 mapsforge.org
+ * 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.awt;
+import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
+import java.awt.Stroke;
import java.awt.font.TextAttribute;
import java.text.AttributedCharacterIterator.Attribute;
import java.util.HashMap;
import java.util.Map;
-//import org.oscim.graphics.Align;
import org.oscim.backend.canvas.Bitmap;
-//import org.oscim.graphics.Cap;
-//import org.oscim.graphics.FontFamily;
-//import org.oscim.graphics.FontStyle;
import org.oscim.backend.canvas.Paint;
-//import org.oscim.graphics.Style;
+
+import com.badlogic.gdx.Gdx;
public class AwtPaint implements Paint {
+
+ private static int getCap(Cap cap) {
+ switch (cap) {
+ case BUTT:
+ return BasicStroke.CAP_BUTT;
+ case ROUND:
+ return BasicStroke.CAP_ROUND;
+ case SQUARE:
+ return BasicStroke.CAP_SQUARE;
+ }
+
+ throw new IllegalArgumentException("unknown cap: " + cap);
+ }
+
static final Font defaultFont;
static {
Map textAttributes = new HashMap();
@@ -25,13 +53,16 @@ public class AwtPaint implements Paint {
textAttributes.put(TextAttribute.SIZE, 13);
defaultFont = Font.getFont(textAttributes);
-
}
- Font font = defaultFont; //new Font("Default", Font.PLAIN, 13);
-
+ Font font = defaultFont; // new Font("Default", Font.PLAIN, 13);
+ Stroke stroke;
FontMetrics fm;
- Color color = new Color(0.1f,0.1f,0.1f,1);
+ Color color = new Color(0.1f, 0.1f, 0.1f, 1);
+
+ private int cap;
+ private float strokeWidth;
+ private Align mAlign;
@Override
public int getColor() {
@@ -58,13 +89,11 @@ public class AwtPaint implements Paint {
}
@Override
- public void setColor(int color) {
- this.color = new Color(
- ((color >> 16) & 0xff)/255f,
- ((color >> 8) & 0xff)/255f,
- ((color >> 0) & 0xff)/255f,
- ((color >> 24) & 0xff)/255f
- );
+ public void setColor(int c) {
+ color = new Color(((c >> 16) & 0xff) / 255f,
+ ((c >> 8) & 0xff) / 255f,
+ ((c >> 0) & 0xff) / 255f,
+ ((c >> 24) & 0xff) / 255f);
}
@Override
@@ -75,14 +104,17 @@ public class AwtPaint implements Paint {
@Override
public void setStrokeCap(Cap cap) {
- // TODO Auto-generated method stub
-
+ this.cap = getCap(cap);
+ createStroke();
}
@Override
public void setStrokeWidth(float width) {
- //int size = font.getSize();
- //font = font.deriveFont(size + width * 4);
+ strokeWidth = width;
+ createStroke();
+
+ // int size = font.getSize();
+ // font = font.deriveFont(size + width * 4);
// TODO Auto-generated method stub
@@ -96,8 +128,7 @@ public class AwtPaint implements Paint {
@Override
public void setTextAlign(Align align) {
- // TODO Auto-generated method stub
-
+ mAlign = align;
}
@Override
@@ -116,12 +147,13 @@ public class AwtPaint implements Paint {
public float measureText(String text) {
if (fm == null)
fm = AwtGraphics.getFontMetrics(this.font);
+
float w = AwtGraphics.getTextWidth(fm, text);
//Gdx.app.log("text width:", text + " " + w);
return w;
- //return fm.getStringBounds(text, A).getWidth();
- //return AwtGraphics.getTextWidth(fm, text);
- //return fm.stringWidth(text);
+ // return fm.getStringBounds(text, A).getWidth();
+ // return AwtGraphics.getTextWidth(fm, text);
+ // return fm.stringWidth(text);
}
@Override
@@ -131,7 +163,6 @@ public class AwtPaint implements Paint {
float height = fm.getHeight();
- //Gdx.app.log("text height", " " + height);
return height;
}
@@ -141,9 +172,14 @@ public class AwtPaint implements Paint {
fm = AwtGraphics.getFontMetrics(this.font);
float desc = fm.getDescent();
- //Gdx.app.log("text descent", " " + desc);
return desc;
}
+ private void createStroke() {
+ if (strokeWidth <= 0) {
+ return;
+ }
+ stroke = new BasicStroke(strokeWidth, cap, BasicStroke.JOIN_ROUND, 0, null, 0);
+ }
}
diff --git a/vtm-gdx-desktop/src/org/oscim/gdx/Main.java b/vtm-gdx-desktop/src/org/oscim/gdx/Main.java
index 568bf1be..fc7ab848 100644
--- a/vtm-gdx-desktop/src/org/oscim/gdx/Main.java
+++ b/vtm-gdx-desktop/src/org/oscim/gdx/Main.java
@@ -4,9 +4,11 @@ import org.oscim.awt.AwtGraphics;
import org.oscim.backend.CanvasAdapter;
import org.oscim.backend.GLAdapter;
import org.oscim.core.Tile;
+import org.oscim.renderer.GLRenderer;
import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;
+import com.badlogic.gdx.utils.SharedLibraryLoader;
public class Main {
@@ -17,12 +19,16 @@ public class Main {
cfg.width = 1280;
cfg.height = 800;
cfg.stencil= 8;
+ cfg.foregroundFPS = 20;
//cfg.samples = 4;
// set our globals
CanvasAdapter.g = AwtGraphics.INSTANCE;
GLAdapter.INSTANCE = new GdxGLAdapter();
Tile.SIZE = 256;
+ GLRenderer.alwaysAllocBuffer = true;
+
+ new SharedLibraryLoader().load("vtm-jni");
new LwjglApplication(new GdxMap(), cfg);
}
diff --git a/vtm-gdx-html/.classpath b/vtm-gdx-html/.classpath
index f8a695fa..17fa2010 100644
--- a/vtm-gdx-html/.classpath
+++ b/vtm-gdx-html/.classpath
@@ -1,13 +1,13 @@
-
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/vtm-gdx-html/src/org/oscim/gdx/GwtDefinition.gwt.xml b/vtm-gdx-html/src/org/oscim/gdx/GwtDefinition.gwt.xml
index 774e9625..1f913749 100644
--- a/vtm-gdx-html/src/org/oscim/gdx/GwtDefinition.gwt.xml
+++ b/vtm-gdx-html/src/org/oscim/gdx/GwtDefinition.gwt.xml
@@ -1,8 +1,7 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+
+
+
diff --git a/vtm-gdx/.classpath b/vtm-gdx/.classpath
index 2e40bfda..53ba33a4 100644
--- a/vtm-gdx/.classpath
+++ b/vtm-gdx/.classpath
@@ -1,8 +1,8 @@
-
+
-
-
-
-
-
+
+
+
+
+
diff --git a/vtm-gdx/src/org/oscim/gdx/GdxMap.java b/vtm-gdx/src/org/oscim/gdx/GdxMap.java
index ffc358f0..c28b2f42 100644
--- a/vtm-gdx/src/org/oscim/gdx/GdxMap.java
+++ b/vtm-gdx/src/org/oscim/gdx/GdxMap.java
@@ -1,7 +1,6 @@
package org.oscim.gdx;
import org.oscim.backend.AssetAdapter;
-import org.oscim.backend.GL20;
import org.oscim.backend.Log;
import org.oscim.backend.input.MotionEvent;
import org.oscim.layers.tile.vector.MapTileLayer;
@@ -9,7 +8,7 @@ import org.oscim.renderer.GLRenderer;
import org.oscim.renderer.GLState;
import org.oscim.theme.InternalRenderTheme;
import org.oscim.tilesource.TileSource;
-import org.oscim.tilesource.oscimap4.OSciMap4TileSource;
+import org.oscim.tilesource.oscimap2.OSciMap2TileSource;
import org.oscim.view.MapRenderCallback;
import org.oscim.view.MapView;
import org.oscim.view.MapViewPosition;
@@ -18,11 +17,6 @@ import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Buttons;
import com.badlogic.gdx.InputProcessor;
-import com.badlogic.gdx.graphics.Color;
-import com.badlogic.gdx.graphics.g2d.BitmapFont;
-import com.badlogic.gdx.scenes.scene2d.Stage;
-import com.badlogic.gdx.scenes.scene2d.ui.Label;
-import com.badlogic.gdx.utils.SharedLibraryLoader;
public class GdxMap implements ApplicationListener, MapRenderCallback {
@@ -30,22 +24,20 @@ public class GdxMap implements ApplicationListener, MapRenderCallback {
private final GLRenderer mMapRenderer;
public GdxMap() {
- new SharedLibraryLoader().load("vtm-jni");
-
AssetAdapter.g = new GdxAssetAdapter();
mMapView = new MapView(this);
mMapRenderer = new GLRenderer(mMapView);
}
- Stage ui;
- Label fps;
- BitmapFont font;
+ // Stage ui;
+ // Label fps;
+ // BitmapFont font;
@Override
public void create() {
- // Gdx.graphics.setContinuousRendering(false);
+ Gdx.graphics.setContinuousRendering(false);
if (Log.logger == null)
Log.logger = new GdxLog();
@@ -58,17 +50,17 @@ public class GdxMap implements ApplicationListener, MapRenderCallback {
mWidth = w;
mHeight = h;
- // TileSource tileSource = new OSciMap2TileSource();
- // tileSource.setOption("url",
- // "http://city.informatik.uni-bremen.de/osci/map-live");
- TileSource tileSource = new OSciMap4TileSource();
- tileSource.setOption("url", "http://city.informatik.uni-bremen.de/osci/testing");
+ TileSource tileSource = new OSciMap2TileSource();
+ tileSource.setOption("url",
+ "http://city.informatik.uni-bremen.de/osci/map-live");
+ //TileSource tileSource = new OSciMap4TileSource();
+ //tileSource.setOption("url", "http://city.informatik.uni-bremen.de/osci/testing");
MapTileLayer l = mMapView.setBaseMap(tileSource);
l.setRenderTheme(InternalRenderTheme.DEFAULT);
- // mMapView.getLayerManager().add(new GenericOverlay(mMapView, new
- // GridRenderLayer(mMapView)));
+ //mMapView.getLayerManager().add(new GenericOverlay(mMapView, new
+ // GridRenderLayer(mMapView)));
mMapView.getMapViewPosition().setViewport(w, h);
@@ -77,21 +69,21 @@ public class GdxMap implements ApplicationListener, MapRenderCallback {
Gdx.input.setInputProcessor(new TouchHandler());
- ui = new Stage(w, h, false);
-
- font = new BitmapFont(false);
-
- fps = new Label("fps: 0", new Label.LabelStyle(font, Color.WHITE));
- fps.setPosition(10, 30);
- fps.setColor(0, 1, 0, 1);
- ui.addActor(fps);
+ // ui = new Stage(w, h, false);
+ // font = new BitmapFont(false);
+ // fps = new Label("fps: 0", new Label.LabelStyle(font, Color.WHITE));
+ // fps.setPosition(10, 30);
+ // fps.setColor(0, 1, 0, 1);
+ // ui.addActor(fps);
}
@Override
public void dispose() {
}
+
private int fpsCnt = 0;
+
@Override
public void render() {
// GLState.enableVertexArrays(-1, -1);
@@ -101,14 +93,14 @@ public class GdxMap implements ApplicationListener, MapRenderCallback {
mMapRenderer.onDrawFrame();
// Gdx.gl20.glBindBuffer(GL20.GL_ARRAY_BUFFER, 0);
-
// Gdx.gl20.glBindBuffer(GL20.GL_ELEMENT_ARRAY_BUFFER, 0);
- int f = Gdx.graphics.getFramesPerSecond();
- if (f != fpsCnt){
- Log.d("fps", ">" +f);
- fpsCnt = f;
- }
+// int f = Gdx.graphics.getFramesPerSecond();
+// if (f != fpsCnt) {
+// Log.d("fps", ">" + f);
+// fpsCnt = f;
+// }
+
// fps.setText("fps: " + Gdx.graphics.getFramesPerSecond());
// ui.draw();
}
@@ -137,16 +129,17 @@ public class GdxMap implements ApplicationListener, MapRenderCallback {
* also render frame FIXME (does nothing atm)
*/
void redrawMapInternal(boolean forceRedraw) {
-
- if (forceRedraw && !mClearMap)
- Gdx.graphics.requestRendering();
+ GLState.blend(false);
+ GLState.test(false, false);
+ //if (forceRedraw && !mClearMap)
+ // Gdx.graphics.requestRendering();
mMapView.updateLayers();
- if (mClearMap) {
- Gdx.graphics.requestRendering();
- mClearMap = false;
- }
+ //if (mClearMap) {
+ Gdx.graphics.requestRendering();
+ mClearMap = false;
+ //}
}
private boolean mClearMap;
@@ -349,7 +342,7 @@ public class GdxMap implements ApplicationListener, MapRenderCallback {
}
if (changed)
- updateMap(false);
+ updateMap(true);
return true;
}
diff --git a/vtm/src/org/oscim/layers/labeling/TextRenderLayer.java b/vtm/src/org/oscim/layers/labeling/TextRenderLayer.java
index 3e4b08de..2bf3b949 100644
--- a/vtm/src/org/oscim/layers/labeling/TextRenderLayer.java
+++ b/vtm/src/org/oscim/layers/labeling/TextRenderLayer.java
@@ -600,10 +600,17 @@ class TextRenderLayer extends BasicRenderLayer {
return true;
}
+ long lastDraw = 0;
+
@Override
public synchronized void update(MapPosition pos, boolean changed,
Matrices matrices) {
+ if (System.currentTimeMillis() - lastDraw > 1000){
+ updateLabels();
+ lastDraw = System.currentTimeMillis();
+
+ }
if (mNextLayer.ready) {
// exchange current with next layers
TextureLayers tmp = mCurLayer;
@@ -626,6 +633,7 @@ class TextRenderLayer extends BasicRenderLayer {
this.newData = true;
}
+
//if (!mHolding)
// postLabelTask((mLastRun + MAX_RELABEL_DELAY) - System.currentTimeMillis());
}
diff --git a/vtm/src/org/oscim/layers/tile/TileRenderer.java b/vtm/src/org/oscim/layers/tile/TileRenderer.java
index c5b5bd54..466e23b0 100644
--- a/vtm/src/org/oscim/layers/tile/TileRenderer.java
+++ b/vtm/src/org/oscim/layers/tile/TileRenderer.java
@@ -66,7 +66,8 @@ public class TileRenderer {
mProjMatrix.setValue(14, 0);
mProjMatrix.multiplyRhs(m.view);
- GL.glDepthMask(true);
+
+ //GL.glDepthMask(true);
GL.glClear(GL20.GL_DEPTH_BUFFER_BIT);
GL.glDepthFunc(GL20.GL_LESS);
diff --git a/vtm/src/org/oscim/renderer/layers/GridRenderLayer.java b/vtm/src/org/oscim/renderer/layers/GridRenderLayer.java
index da73522b..9b622561 100644
--- a/vtm/src/org/oscim/renderer/layers/GridRenderLayer.java
+++ b/vtm/src/org/oscim/renderer/layers/GridRenderLayer.java
@@ -71,7 +71,7 @@ public class GridRenderLayer extends BasicRenderLayer {
mTextLayer = layers.addTextLayer(new TextLayer());
mLineLayer = layers.addLineLayer(0,
- new Line(Color.BLUE, 1.5f, Cap.BUTT));
+ new Line(Color.BLUE, 1.5f, Cap.BUTT));
}
private void addLabels(int x, int y, int z) {
@@ -83,11 +83,14 @@ public class GridRenderLayer extends BasicRenderLayer {
for (int yy = -2; yy < 2; yy++) {
for (int xx = -2; xx < 2; xx++) {
- String label = String.format(
- Locale.ROOT, TILE_FORMAT,
- Integer.valueOf(x + xx),
- Integer.valueOf(y + yy),
- Integer.valueOf(z));
+ // String label = String.format(
+ // Locale.ROOT, TILE_FORMAT,
+ // Integer.valueOf(x + xx),
+ // Integer.valueOf(y + yy),
+ // Integer.valueOf(z));
+ String label = Integer.valueOf(x + xx) + "/" +
+ Integer.valueOf(y + yy) + "/" +
+ Integer.valueOf(z);
TextItem ti = TextItem.pool.get();
ti.set(s * xx + s / 2, s * yy + s / 2, label, mText);
diff --git a/vtm/src/org/oscim/renderer/sublayers/LineRenderer.java b/vtm/src/org/oscim/renderer/sublayers/LineRenderer.java
index 7cd1bbe5..2e89bdf1 100644
--- a/vtm/src/org/oscim/renderer/sublayers/LineRenderer.java
+++ b/vtm/src/org/oscim/renderer/sublayers/LineRenderer.java
@@ -88,15 +88,16 @@ public final class LineRenderer {
GL20.GL_NEAREST, GL20.GL_NEAREST,
GL20.GL_MIRRORED_REPEAT, GL20.GL_MIRRORED_REPEAT);
+ Log.d(TAG, "Line Texture >>>>>>>>> " + mTexID);
return true;
}
public static void beginLines() {
- GL.glBindTexture(GL20.GL_TEXTURE_2D, mTexID);
+ //GL.glBindTexture(GL20.GL_TEXTURE_2D, mTexID);
}
public static void endLines() {
- GL.glBindTexture(GL20.GL_TEXTURE_2D, 0);
+ //GL.glBindTexture(GL20.GL_TEXTURE_2D, 0);
}
public static Layer draw(Layers layers, Layer curLayer, MapPosition pos,
@@ -280,8 +281,10 @@ public final class LineRenderer {
//+ " len = abs(v_st.s);"
//+ " else"
//+ " len = texture2D(tex, v_st).a;"
+ //+ " len = u_mode * length(v_st);"
// this avoids branching, need to check performance
- + " float len = max((1.0 - u_mode) * abs(v_st.s), u_mode * texture2D(tex, v_st).a);"
+ //+ " float len = max((1.0 - u_mode) * abs(v_st.s), u_mode * texture2D(tex, v_st).a);"
+ + " float len = max((1.0 - u_mode) * abs(v_st.s), u_mode * length(v_st));"
// interpolate alpha between: 0.0 < 1.0 - len < u_wscale
// where wscale is 'filter width' / 'line width' and 0 <= len <= sqrt(2)
//+ " gl_FragColor = u_color * smoothstep(0.0, u_wscale, 1.0 - len);"
@@ -304,8 +307,8 @@ public final class LineRenderer {
+ " len = abs(v_st.s);"
+ " fuzz = fwidth(v_st.s);"
+ " } else {"
- + " len = texture2D(tex, v_st).a;"
- //+ " len = length(v_st);"
+ //+ " len = texture2D(tex, v_st).a;"
+ + " len = length(v_st);"
+ " vec2 st_width = fwidth(v_st);"
+ " fuzz = max(st_width.s, st_width.t);"
+ " }"
diff --git a/vtm/src/org/oscim/renderer/sublayers/TextLayer.java b/vtm/src/org/oscim/renderer/sublayers/TextLayer.java
index c257bee0..6b902959 100644
--- a/vtm/src/org/oscim/renderer/sublayers/TextLayer.java
+++ b/vtm/src/org/oscim/renderer/sublayers/TextLayer.java
@@ -129,9 +129,9 @@ public final class TextLayer extends TextureLayer {
yy = y + height - it.text.fontDescent; // - mFontPadY;
if (it.text.stroke != null)
- mCanvas.drawText(it.string, x + it.width / 2, yy, it.text.stroke);
+ mCanvas.drawText(it.string, x, yy, it.text.stroke);
- mCanvas.drawText(it.string, x + it.width / 2, yy, it.text.paint);
+ mCanvas.drawText(it.string, x, yy, it.text.paint);
// FIXME !!!
if (width > TEXTURE_WIDTH)
diff --git a/vtm/src/org/oscim/renderer/sublayers/TextureItem.java b/vtm/src/org/oscim/renderer/sublayers/TextureItem.java
index 7d3b7385..59d29d47 100644
--- a/vtm/src/org/oscim/renderer/sublayers/TextureItem.java
+++ b/vtm/src/org/oscim/renderer/sublayers/TextureItem.java
@@ -81,6 +81,7 @@ public class TextureItem extends Inlist {
*/
public synchronized static TextureItem get(boolean initBitmap) {
TextureItem ti = pool.get();
+ Log.d(TAG, "get texture item " + ti.id);
if (initBitmap) {
ti.bitmap = getBitmap();
ti.bitmap.eraseColor(Color.TRANSPARENT);
@@ -171,8 +172,11 @@ public class TextureItem extends Inlist {
int[] tmp = new int[size];
for (int i = 0; i < size; i++)
tmp[i] = mTextures.get(i).intValue();
+
mTextures.clear();
GlUtils.glDeleteTextures(size, tmp);
+
+ mTexCnt -= size;
}
if (to.id < 0) {
@@ -180,9 +184,9 @@ public class TextureItem extends Inlist {
int[] textureIds = GlUtils.glGenTextures(1);
to.id = textureIds[0];
initTexture(to.id);
- if (TextureRenderer.debug)
- Log.d(TAG, pool.getCount() + " " + pool.getFill()
- + " " + mTexCnt + " new texture " + to.id);
+ //if (TextureRenderer.debug)
+ Log.d(TAG, "poolCnt:" + pool.getCount() + " poolFill:" + pool.getFill()
+ + " texCnt:" + mTexCnt + " new texture " + to.id);
}
uploadTexture(to, to.bitmap, mBitmapFormat, mBitmapType,
@@ -203,8 +207,9 @@ public class TextureItem extends Inlist {
Log.d(TAG, "no texture!");
return;
}
- GL.glBindTexture(GL20.GL_TEXTURE_2D, to.id);
+ GL.glBindTexture(GL20.GL_TEXTURE_2D, to.id);
+ Log.d(TAG, "upload " + to.id);
if (to.ownBitmap) {
bitmap.uploadToTexture(false);
//GLUtils.texImage2D(GL20.GL_TEXTURE_2D, 0, bitmap, 0);
diff --git a/vtm/src/org/oscim/renderer/sublayers/TextureRenderer.java b/vtm/src/org/oscim/renderer/sublayers/TextureRenderer.java
index 4f013af7..6b7ceeb9 100644
--- a/vtm/src/org/oscim/renderer/sublayers/TextureRenderer.java
+++ b/vtm/src/org/oscim/renderer/sublayers/TextureRenderer.java
@@ -82,6 +82,7 @@ public final class TextureRenderer {
for (TextureItem ti = tl.textures; ti != null; ti = ti.next) {
GL.glBindTexture(GL20.GL_TEXTURE_2D, ti.id);
+
int maxVertices = GLRenderer.maxQuads * INDICES_PER_SPRITE;
GL.glUniform2f(hTextureSize,
@@ -110,6 +111,8 @@ public final class TextureRenderer {
GL.glBindBuffer(GL20.GL_ELEMENT_ARRAY_BUFFER, 0);
+ //GL.glBindTexture(GL20.GL_TEXTURE_2D, 0);
+
return layer.next;
}
diff --git a/vtm/src/org/oscim/theme/renderinstruction/Line.java b/vtm/src/org/oscim/theme/renderinstruction/Line.java
index 4f7495b7..a6e53aa6 100644
--- a/vtm/src/org/oscim/theme/renderinstruction/Line.java
+++ b/vtm/src/org/oscim/theme/renderinstruction/Line.java
@@ -14,9 +14,6 @@
*/
package org.oscim.theme.renderinstruction;
-import java.util.Locale;
-import java.util.regex.Pattern;
-
import org.oscim.backend.canvas.Color;
import org.oscim.backend.canvas.Paint.Cap;
import org.oscim.theme.IRenderCallback;
@@ -27,7 +24,7 @@ import org.xml.sax.Attributes;
* Represents a polyline on the map.
*/
public final class Line extends RenderInstruction {
- private static final Pattern SPLIT_PATTERN = Pattern.compile(",");
+ //private static final Pattern SPLIT_PATTERN = Pattern.compile(",");
/**
* @param line
@@ -92,7 +89,7 @@ public final class Line extends RenderInstruction {
} else if ("width".equals(name)) {
width = Float.parseFloat(value);
} else if ("cap".equals(name)) {
- cap = Cap.valueOf(value.toUpperCase(Locale.ENGLISH));
+ cap = Cap.valueOf(value.toUpperCase());
} else if ("fix".equals(name)) {
fixed = Boolean.parseBoolean(value);
} else if ("stipple".equals(name)) {
@@ -136,14 +133,14 @@ public final class Line extends RenderInstruction {
}
}
- static float[] parseFloatArray(String dashString) {
- String[] dashEntries = SPLIT_PATTERN.split(dashString);
- float[] dashIntervals = new float[dashEntries.length];
- for (int i = 0; i < dashEntries.length; ++i) {
- dashIntervals[i] = Float.parseFloat(dashEntries[i]);
- }
- return dashIntervals;
- }
+// static float[] parseFloatArray(String dashString) {
+// String[] dashEntries = SPLIT_PATTERN.split(dashString);
+// float[] dashIntervals = new float[dashEntries.length];
+// for (int i = 0; i < dashEntries.length; ++i) {
+// dashIntervals[i] = Float.parseFloat(dashEntries[i]);
+// }
+// return dashIntervals;
+// }
private final int level;
diff --git a/vtm/src/org/oscim/theme/renderinstruction/Text.java b/vtm/src/org/oscim/theme/renderinstruction/Text.java
index 6975d864..c95a5464 100644
--- a/vtm/src/org/oscim/theme/renderinstruction/Text.java
+++ b/vtm/src/org/oscim/theme/renderinstruction/Text.java
@@ -63,9 +63,9 @@ public final class Text extends RenderInstruction {
else if ("k".equals(name)) {
textKey = value.intern();
} else if ("font-family".equals(name)) {
- fontFamily = FontFamily.valueOf(value.toUpperCase(Locale.ENGLISH));
+ fontFamily = FontFamily.valueOf(value.toUpperCase());
} else if ("font-style".equals(name)) {
- fontStyle = FontStyle.valueOf(value.toUpperCase(Locale.ENGLISH));
+ fontStyle = FontStyle.valueOf(value.toUpperCase());
} else if ("font-size".equals(name)) {
fontSize = Float.parseFloat(value);
} else if ("fill".equals(name)) {
diff --git a/vtm/src/org/oscim/theme/rule/Rule.java b/vtm/src/org/oscim/theme/rule/Rule.java
index a78dd201..5b727338 100644
--- a/vtm/src/org/oscim/theme/rule/Rule.java
+++ b/vtm/src/org/oscim/theme/rule/Rule.java
@@ -18,10 +18,8 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
-import java.util.Locale;
import java.util.Map;
import java.util.Stack;
-import java.util.regex.Pattern;
import org.oscim.core.Tag;
import org.oscim.theme.RenderThemeHandler;
@@ -31,7 +29,7 @@ import org.xml.sax.Attributes;
public abstract class Rule {
private static final Map, AttributeMatcher> MATCHERS_CACHE_KEY = new HashMap, AttributeMatcher>();
private static final Map, AttributeMatcher> MATCHERS_CACHE_VALUE = new HashMap, AttributeMatcher>();
- private static final Pattern SPLIT_PATTERN = Pattern.compile("\\|");
+ //private static final Pattern SPLIT_PATTERN = Pattern.compile("\\|");
private static final String STRING_NEGATION = "~";
private static final String STRING_EXCLUSIVE = "-";
private static final String STRING_WILDCARD = "*";
@@ -52,7 +50,8 @@ public abstract class Rule {
if (values == null) {
valueMatcher = AnyMatcher.getInstance();
} else {
- valueList = new ArrayList(Arrays.asList(SPLIT_PATTERN.split(values)));
+ //valueList = new ArrayList(Arrays.asList(SPLIT_PATTERN.split(values)));
+ valueList = new ArrayList(Arrays.asList(values.split("\\|")));
if (valueList.remove(STRING_NEGATION))
negativeRule = true;
else if (valueList.remove(STRING_EXCLUSIVE))
@@ -69,7 +68,8 @@ public abstract class Rule {
}
keyMatcher = AnyMatcher.getInstance();
} else {
- keyList = new ArrayList(Arrays.asList(SPLIT_PATTERN.split(keys)));
+ //keyList = new ArrayList(Arrays.asList(SPLIT_PATTERN.split(keys)));
+ keyList = new ArrayList(Arrays.asList(keys.split("\\|")));
keyMatcher = getKeyMatcher(keyList);
if ((keyMatcher instanceof AnyMatcher) && (negativeRule || exclusionRule)) {
@@ -150,7 +150,7 @@ public abstract class Rule {
String value = attributes.getValue(i);
if ("e".equals(name)) {
- String val = value.toUpperCase(Locale.ENGLISH);
+ String val = value.toUpperCase();
if ("WAY".equals(val))
element = Element.WAY;
else if ("NODE".equals(val))
@@ -160,7 +160,7 @@ public abstract class Rule {
} else if ("v".equals(name)) {
values = value;
} else if ("closed".equals(name)) {
- String val = value.toUpperCase(Locale.ENGLISH);
+ String val = value.toUpperCase();
if ("YES".equals(val))
closed = Closed.YES;
else if ("NO".equals(val))
diff --git a/vtm/src/org/oscim/utils/GlUtils.java b/vtm/src/org/oscim/utils/GlUtils.java
index f6d12ffa..3c2019c6 100644
--- a/vtm/src/org/oscim/utils/GlUtils.java
+++ b/vtm/src/org/oscim/utils/GlUtils.java
@@ -326,6 +326,8 @@ public class GlUtils {
public static int[] glGenBuffers(int num) {
IntBuffer buf = GLRenderer.getIntBuffer(num);
+ buf.position(0);
+ buf.limit(num);
GL.glGenBuffers(num, buf);
int[] ret = new int[num];
buf.position(0);
@@ -343,6 +345,8 @@ public class GlUtils {
public static int[] glGenTextures(int num) {
IntBuffer buf = GLRenderer.getIntBuffer(num);
+ buf.position(0);
+ buf.limit(num);
GL.glGenTextures(num, buf);
int[] ret = new int[num];
buf.position(0);