From fada95f380dc8647965e02e6761fb61ff12b83fd Mon Sep 17 00:00:00 2001 From: Hannes Janetzek Date: Wed, 6 Feb 2013 11:06:47 +0100 Subject: [PATCH] cleanups + comments --- src/org/oscim/renderer/BaseMap.java | 58 +++++++------ src/org/oscim/renderer/BufferObject.java | 1 - src/org/oscim/renderer/LineRenderer.java | 3 - src/org/oscim/renderer/MapTile.java | 41 ++++----- src/org/oscim/renderer/PolygonRenderer.java | 52 +++++------ src/org/oscim/renderer/QuadTree.java | 4 +- src/org/oscim/renderer/Shaders.java | 90 -------------------- src/org/oscim/renderer/TextureObject.java | 57 ++++++++----- src/org/oscim/renderer/layer/VertexPool.java | 24 +----- src/org/oscim/utils/Point.java | 9 +- src/org/oscim/view/MapViewPosition.java | 7 +- 11 files changed, 127 insertions(+), 219 deletions(-) delete mode 100644 src/org/oscim/renderer/Shaders.java diff --git a/src/org/oscim/renderer/BaseMap.java b/src/org/oscim/renderer/BaseMap.java index 98bfd458..54199d3f 100644 --- a/src/org/oscim/renderer/BaseMap.java +++ b/src/org/oscim/renderer/BaseMap.java @@ -25,19 +25,23 @@ import org.oscim.utils.GlUtils; import android.opengl.GLES20; import android.opengl.Matrix; +import android.util.Log; /** * @author Hannes Janetzek */ public class BaseMap { - //private final static String TAG = BaseMap.class.getName(); + private final static String TAG = BaseMap.class.getName(); + + private static float[] mMVPMatrix = new float[16]; + private static float[] mVPMatrix = new float[16]; + private static float[] mfProjMatrix = new float[16]; + + // used to increase polygon-offset for each tile drawn. + private static int mDrawCnt; // used to not draw a tile twice per frame. private static int mDrawSerial = 0; - private static float[] mMVPMatrix = new float[16]; - - private static float[] mVPMatrix = new float[16]; - private static float[] mfProjMatrix = new float[16]; static void setProjection(float[] projMatrix) { System.arraycopy(projMatrix, 0, mfProjMatrix, 0, 16); @@ -46,43 +50,45 @@ public class BaseMap { mfProjMatrix[14] = 0; } - private static int mDrawCnt; - static void draw(MapTile[] tiles, int tileCnt, MapPosition pos) { - //long start = SystemClock.uptimeMillis(); - Matrix.multiplyMM(mVPMatrix, 0, mfProjMatrix, 0, pos.viewMatrix, 0); mDrawCnt = 0; + Matrix.multiplyMM(mVPMatrix, 0, mfProjMatrix, 0, pos.viewMatrix, 0); + GLES20.glDepthFunc(GLES20.GL_LESS); + + // load texture for line caps LineRenderer.beginLines(); + // Draw visible tiles for (int i = 0; i < tileCnt; i++) { MapTile t = tiles[i]; if (t.isVisible && t.state == STATE_READY) drawTile(t, pos); } - // proxies are clipped to the region where nothing was drawn to depth buffer. - // draw child or parent proxies. - // TODO draw proxies for placeholder... + // Draw parent or children as proxy for visibile tiles that dont + // have data yet. Proxies are clipped to the region where nothing + // was drawn to depth buffer. + // TODO draw proxies for placeholder for (int i = 0; i < tileCnt; i++) { MapTile t = tiles[i]; if (t.isVisible && (t.state != STATE_READY) && (t.holder == null)) drawProxyTile(t, pos, true); } - // draw grandparents + // Draw grandparents for (int i = 0; i < tileCnt; i++) { MapTile t = tiles[i]; if (t.isVisible && (t.state != STATE_READY) && (t.holder == null)) drawProxyTile(t, pos, false); } - LineRenderer.endLines(); - glStencilMask(0x0); + // make sure stencil buffer write is disabled + glStencilMask(0x00); + + LineRenderer.endLines(); - //long end = SystemClock.uptimeMillis(); - //Log.d(TAG, "base took " + (end - start)); mDrawSerial++; } @@ -93,23 +99,24 @@ public class BaseMap { tile.lastDraw = mDrawSerial; - float[] mvp = mMVPMatrix; - - //setMatrix(mvp, tile, div, pos); - MapTile t = tile; if (t.holder != null) t = t.holder; if (t.layers == null || t.vbo == null) { - //Log.d(TAG, "missing data " + (t.layers == null) + " " + (t.vbo == null)); + Log.d(TAG, "missing data " + (t.layers == null) + " " + (t.vbo == null)); return; } - // set Model matrix for tile + + GLES20.glBindBuffer(GL_ARRAY_BUFFER, t.vbo.id); + + // place tile relative to map position float div = FastMath.pow(tile.zoomLevel - pos.zoomLevel); float x = (float) (tile.pixelX - pos.x * div); float y = (float) (tile.pixelY - pos.y * div); float scale = pos.scale / div; + + float[] mvp = mMVPMatrix; GlUtils.setTileMatrix(mvp, x, y, scale); // add view-projection matrix @@ -120,12 +127,11 @@ public class BaseMap { if (mDrawCnt > 20) mDrawCnt = 0; - GLES20.glBindBuffer(GL_ARRAY_BUFFER, t.vbo.id); - - boolean clipped = false; // simple line shader does not take forward shortening into account int simpleShader = (pos.tilt < 1 ? 1 : 0); + boolean clipped = false; + for (Layer l = t.layers.layers; l != null;) { switch (l.type) { case Layer.POLYGON: diff --git a/src/org/oscim/renderer/BufferObject.java b/src/org/oscim/renderer/BufferObject.java index 91d5ef77..1729478b 100644 --- a/src/org/oscim/renderer/BufferObject.java +++ b/src/org/oscim/renderer/BufferObject.java @@ -48,7 +48,6 @@ public final class BufferObject { prev.next = bo.next; bo.next = null; - //Log.d(TAG, "requested: " + size + " got " + bo.size); return bo; } prev = bo; diff --git a/src/org/oscim/renderer/LineRenderer.java b/src/org/oscim/renderer/LineRenderer.java index 484effd0..365d987b 100644 --- a/src/org/oscim/renderer/LineRenderer.java +++ b/src/org/oscim/renderer/LineRenderer.java @@ -42,12 +42,10 @@ public final class LineRenderer { private final static String TAG = "LineRenderer"; private static final int LINE_VERTICES_DATA_POS_OFFSET = 0; - //private static final int LINE_VERTICES_DATA_TEX_OFFSET = 4; // shader handles private static int[] lineProgram = new int[2]; private static int[] hLineVertexPosition = new int[2]; - //private static int[] hLineTexturePosition = new int[2]; private static int[] hLineColor = new int[2]; private static int[] hLineMatrix = new int[2]; private static int[] hLineScale = new int[2]; @@ -77,7 +75,6 @@ public final class LineRenderer { hLineColor[i] = glGetUniformLocation(lineProgram[i], "u_color"); hLineMode[i] = glGetUniformLocation(lineProgram[i], "u_mode"); hLineVertexPosition[i] = glGetAttribLocation(lineProgram[i], "a_pos"); - //hLineTexturePosition[i] = glGetAttribLocation(lineProgram[i], "a_st"); } // create lookup table as texture for 'length(0..1,0..1)' diff --git a/src/org/oscim/renderer/MapTile.java b/src/org/oscim/renderer/MapTile.java index 97894b36..37632f50 100644 --- a/src/org/oscim/renderer/MapTile.java +++ b/src/org/oscim/renderer/MapTile.java @@ -21,36 +21,27 @@ import org.oscim.renderer.layer.TextItem; public final class MapTile extends JobTile { /** - * VBO layout: - 16 bytes fill coordinates, n bytes polygon vertices, m - * bytes lines vertices + * VBO holds all vertex data to draw lines and polygons + * layout: + * 16 bytes fill coordinates, + * n bytes polygon vertices, + * m bytes lines vertices */ BufferObject vbo; - // TextTexture texture; - /** - * Tile data set by TileGenerator: + * Tile data set by TileGenerator. */ public TextItem labels; public Layers layers; /** - * tile has new data to upload to gl - */ - //boolean newData; - - /** - * tile is loaded and ready for drawing. - */ - //boolean isReady; - - /** - * tile is in view region. + * Tile is in view region. Set by GLRenderer. */ public boolean isVisible; /** - * pointer to access relatives in QuadTree + * Pointer to access relatives in QuadTree */ public QuadTree rel; @@ -68,18 +59,20 @@ public final class MapTile extends JobTile { public byte proxies; // check which labels were joined - public final static int JOIN_T = 1 << 0; - public final static int JOIN_B = 1 << 1; - public final static int JOIN_L = 1 << 2; - public final static int JOIN_R = 1 << 3; - public final static int JOINED = 15; - public byte joined; + // public final static int JOIN_T = 1 << 0; + // public final static int JOIN_B = 1 << 1; + // public final static int JOIN_L = 1 << 2; + // public final static int JOIN_R = 1 << 3; + // public final static int JOINED = 15; + // public byte joined; // counting the tiles that use this tile as proxy byte refs; + + // up to 255 Threads may lock a tile byte locked; - // used when this tile sits in fo another tile. + // only used GLRenderer when this tile sits in for another tile. // e.g. x:-1,y:0,z:1 for x:1,y:0 MapTile holder; diff --git a/src/org/oscim/renderer/PolygonRenderer.java b/src/org/oscim/renderer/PolygonRenderer.java index 8552f612..c26d1f02 100644 --- a/src/org/oscim/renderer/PolygonRenderer.java +++ b/src/org/oscim/renderer/PolygonRenderer.java @@ -45,7 +45,7 @@ import org.oscim.utils.GlUtils; import android.opengl.GLES20; public final class PolygonRenderer { - private static final String TAG = PolygonRenderer.class.getName(); + //private static final String TAG = PolygonRenderer.class.getName(); private static final int POLYGON_VERTICES_DATA_POS_OFFSET = 0; private static final int STENCIL_BITS = 8; @@ -374,31 +374,6 @@ public final class PolygonRenderer { + " gl_FragColor = u_color;" + "}"; - private final static String polygonTexVertexShader = "" - + "precision mediump float;" - + "uniform mat4 u_mvp;" - + "attribute vec4 a_pos;" - + "varying vec2 v_st;" - + "void main() {" - + " if(gl_VertexID == 0)" - + " v_st = vec2(0.0,0.0);" - + " else if(gl_VertexID == 1)" - + " v_st = vec2(1.0,0.0);" - + " else if(gl_VertexID == 2)" - + " v_st = vec2(1.0,1.0);" - + " else if(gl_VertexID == 3)" - + " v_st = vec2(0.0,1.0);" - + " gl_Position = u_mvp * a_pos;" - + "}"; - private final static String polygonTexFragmentShader = "" - + "precision mediump float;" - + "uniform vec4 u_color;" - + "uniform sampler2D tex;" - + "varying vec2 v_st;" - + "void main() {" - + " gl_FragColor = u_color * texture2D(tex, v_st);" - + "}"; - private final static String polygonVertexShaderZ = "" + "precision highp float;" + "uniform mat4 u_mvp;" @@ -422,4 +397,29 @@ public final class PolygonRenderer { + "else" + " gl_FragColor = vec4(0.0, z - 1.0, 0.0, 1.0)*0.8;" + "}"; + + // private final static String polygonTexVertexShader = "" + // + "precision mediump float;" + // + "uniform mat4 u_mvp;" + // + "attribute vec4 a_pos;" + // + "varying vec2 v_st;" + // + "void main() {" + // + " if(gl_VertexID == 0)" + // + " v_st = vec2(0.0,0.0);" + // + " else if(gl_VertexID == 1)" + // + " v_st = vec2(1.0,0.0);" + // + " else if(gl_VertexID == 2)" + // + " v_st = vec2(1.0,1.0);" + // + " else if(gl_VertexID == 3)" + // + " v_st = vec2(0.0,1.0);" + // + " gl_Position = u_mvp * a_pos;" + // + "}"; + // private final static String polygonTexFragmentShader = "" + // + "precision mediump float;" + // + "uniform vec4 u_color;" + // + "uniform sampler2D tex;" + // + "varying vec2 v_st;" + // + "void main() {" + // + " gl_FragColor = u_color * texture2D(tex, v_st);" + // + "}"; } diff --git a/src/org/oscim/renderer/QuadTree.java b/src/org/oscim/renderer/QuadTree.java index 7f9ee4e8..a3cf0ca3 100644 --- a/src/org/oscim/renderer/QuadTree.java +++ b/src/org/oscim/renderer/QuadTree.java @@ -17,7 +17,7 @@ package org.oscim.renderer; import android.util.Log; public class QuadTree { - private static String TAG = "QuadTree"; + private static String TAG = QuadTree.class.getName(); // pointer to tile 0/0/0 private static QuadTree root; @@ -45,7 +45,7 @@ public class QuadTree { static boolean remove(MapTile t) { if (t.rel == null) { // Bad Things(tm) happened - Log.d(TAG, "already removed " + t); + Log.d(TAG, "BUG already removed " + t); return true; } diff --git a/src/org/oscim/renderer/Shaders.java b/src/org/oscim/renderer/Shaders.java deleted file mode 100644 index bb40cdb0..00000000 --- a/src/org/oscim/renderer/Shaders.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 2012 Hannes Janetzek - * - * This program is free software: you can redistribute it and/or modify it under the - * terms of the GNU Lesser General 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 License for more details. - * - * You should have received a copy of the GNU Lesser General License along with - * this program. If not, see . - */ - -package org.oscim.renderer; - -public final class Shaders { - - // final static String lineVertexZigZagShader = "" - // + "precision mediump float;" - // + "uniform mat4 mvp;" - // + "attribute vec4 a_pos1;" - // + "attribute vec2 a_st1;" - // + "attribute vec4 a_pos2;" - // + "attribute vec2 a_st2;" - // + "varying vec2 v_st;" - // + "uniform vec2 u_mode;" - // + "const float dscale = 1.0/1000.0;" - // + "void main() {" - // + "if (gl_VertexID & 1 == 0) {" - // + " vec2 dir = dscale * u_mode[1] * a_pos1.zw;" - // + " gl_Position = mvp * vec4(a_pos1.xy + dir, 0.0,1.0);" - // + " v_st = u_mode[1] * a_st1;" - // + "} else {" - // + " vec2 dir = dscale * u_mode[1] * a_pos2.zw;" - // + " gl_Position = mvp * vec4( a_pos1.xy, dir, 0.0,1.0);" - // + " v_st = u_mode[1] * vec2(-a_st2.s , a_st2.t);" - // + "}"; - - // final static String lineVertexShader = "" - // + "precision mediump float;" - // + "uniform mat4 mvp;" - // + "attribute vec4 a_position;" - // + "attribute vec2 a_st;" - // + "varying vec2 v_st;" - // + "uniform float u_width;" - // + "const float dscale = 8.0/1000.0;" - // + "void main() {" - // + " vec2 dir = dscale * u_width * a_position.zw;" - // + " gl_Position = mvp * vec4(a_position.xy + dir, 0.0,1.0);" - // + " v_st = u_width * a_st;" - // + "}"; - // final static String lineFragmentShader = "" - // + "#extension GL_OES_standard_derivatives : enable\n" - // + "precision mediump float;" - // + "uniform float u_wscale;" - // + "uniform float u_width;" - // + "uniform int u_mode;" - // + "uniform vec4 u_color;" - // + "varying vec2 v_st;" - // + "void main() {" - // + " gl_FragColor = u_color * 0.5;" - // + "}"; - - // final static String buildingVertexShader = "" - // + "precision mediump float;" - // + "uniform mat4 u_mvp;" - // + "uniform vec4 u_color;" - // + "uniform int u_mode;" - // + "uniform float u_scale;" - // + "attribute vec4 a_position;" - // + "attribute float a_light;" - // + "varying vec4 color;" - // + "const float ff = 256.0;" - // + "const float ffff = 65536.0;" - // + "void main() {" - // + " gl_Position = u_mvp * vec4(a_position.xy, a_position.z/u_scale, 1.0);" - // + " if (u_mode == 0)" - // // roof / depth pass - // + " color = u_color;" - // + " else if (u_mode == 1)" - // // sides 1 - use 0xff00 - // + " color = vec4(u_color.rgb * (a_light / ffff), 0.9);" - // + " else" - // // sides 2 - use 0x00ff - // + " color = vec4(u_color.rgb * fract(a_light/ff), 0.9);" - // + "}"; - -} diff --git a/src/org/oscim/renderer/TextureObject.java b/src/org/oscim/renderer/TextureObject.java index fd5c1919..928ebcd2 100644 --- a/src/org/oscim/renderer/TextureObject.java +++ b/src/org/oscim/renderer/TextureObject.java @@ -23,25 +23,32 @@ import android.opengl.GLUtils; import android.util.Log; public class TextureObject { + private final static String TAG = TextureObject.class.getName(); + private static TextureObject pool; + private static int poolCount; private static ArrayList mBitmaps; - // shared bitmap and canvas for default texture size public final static int TEXTURE_WIDTH = 256; public final static int TEXTURE_HEIGHT = 256; private static int mBitmapFormat; private static int mBitmapType; - private static int objectCount = 10; + /** + * Get a TextureObject with Bitmap to draw to. + * 'uploadTexture()' uploads the Bitmap as texture. + * + * @return obtained TextureObject + */ public static synchronized TextureObject get() { TextureObject to; if (pool == null) { - objectCount += 1; + poolCount += 1; if (TextureRenderer.debug) - Log.d("...", "textures: " + objectCount); + Log.d(TAG, "textures: " + poolCount); pool = new TextureObject(-1); } @@ -54,7 +61,7 @@ public class TextureObject { to.bitmap.eraseColor(Color.TRANSPARENT); if (TextureRenderer.debug) - Log.d("...", "get texture " + to.id + " " + to.bitmap); + Log.d(TAG, "get texture " + to.id + " " + to.bitmap); return to; } @@ -62,7 +69,7 @@ public class TextureObject { public static synchronized void release(TextureObject to) { while (to != null) { if (TextureRenderer.debug) - Log.d("...", "release texture " + to.id); + Log.d(TAG, "release texture " + to.id); TextureObject next = to.next; @@ -78,9 +85,14 @@ public class TextureObject { } } + /** + * This function may only be used in GLRenderer Thread. + * + * @param to the TextureObjet to compile and upload + */ public static synchronized void uploadTexture(TextureObject to) { if (TextureRenderer.debug) - Log.d("...", "upload texture " + to.id); + Log.d(TAG, "upload texture " + to.id); if (to.id < 0) { int[] textureIds = new int[1]; @@ -88,7 +100,7 @@ public class TextureObject { to.id = textureIds[0]; initTexture(to.id); if (TextureRenderer.debug) - Log.d("...", "new texture " + to.id); + Log.d(TAG, "new texture " + to.id); } uploadTexture(to, to.bitmap, mBitmapFormat, mBitmapType, @@ -102,7 +114,7 @@ public class TextureObject { int format, int type, int w, int h) { if (to == null) { - Log.d("...", "no texture!"); + Log.d(TAG, "no texture!"); return; } GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, to.id); @@ -130,15 +142,14 @@ public class TextureObject { static void init(int num) { pool = null; - - TextureObject to; + poolCount = num; int[] textureIds = new int[num]; GLES20.glGenTextures(num, textureIds, 0); for (int i = 1; i < num; i++) { initTexture(textureIds[i]); - to = new TextureObject(textureIds[i]); + TextureObject to = new TextureObject(textureIds[i]); to.next = pool; pool = to; @@ -147,7 +158,8 @@ public class TextureObject { mBitmaps = new ArrayList(10); for (int i = 0; i < 4; i++) { - Bitmap bitmap = Bitmap.createBitmap(TEXTURE_WIDTH, TEXTURE_HEIGHT, + Bitmap bitmap = Bitmap.createBitmap( + TEXTURE_WIDTH, TEXTURE_HEIGHT, Bitmap.Config.ARGB_8888); mBitmaps.add(bitmap); @@ -160,30 +172,31 @@ public class TextureObject { private static Bitmap getBitmap() { int size = mBitmaps.size(); if (size == 0) { - for (int i = 0; i < 4; i++) { - Bitmap bitmap = Bitmap.createBitmap(TEXTURE_WIDTH, TEXTURE_HEIGHT, - Bitmap.Config.ARGB_8888); + Bitmap bitmap = Bitmap.createBitmap( + TEXTURE_WIDTH, TEXTURE_HEIGHT, + Bitmap.Config.ARGB_8888); - mBitmaps.add(bitmap); - } - size = 4; + return bitmap; } return mBitmaps.remove(size - 1); } + // ----------------------- public TextureObject next; - public Bitmap bitmap; - + // texture ID int id; + int width; int height; // vertex offset from which this texture is referenced - // or store texture id with vertex? public short offset; public short vertices; + // temporary Bitmap + public Bitmap bitmap; + TextureObject(int id) { this.id = id; } diff --git a/src/org/oscim/renderer/layer/VertexPool.java b/src/org/oscim/renderer/layer/VertexPool.java index c66cfd68..4258f9ca 100644 --- a/src/org/oscim/renderer/layer/VertexPool.java +++ b/src/org/oscim/renderer/layer/VertexPool.java @@ -17,7 +17,7 @@ package org.oscim.renderer.layer; import android.util.Log; public class VertexPool { - private static final int POOL_LIMIT = 6000; + private static final int POOL_LIMIT = 5000; static private VertexPoolItem pool = null; static private int count = 0; @@ -41,7 +41,7 @@ public class VertexPool { public static synchronized VertexPoolItem get() { if (pool == null && count > 0) { - Log.d("VertexPool", "XXX wrong count: " + count); + Log.d("VertexPool", "BUG wrong count: " + count); } if (pool == null) { countAll++; @@ -56,7 +56,7 @@ public class VertexPool { for (VertexPoolItem tmp = pool; tmp != null; tmp = tmp.next) c++; - Log.d("VertexPool", "XXX wrong count: " + count + " left" + c); + Log.d("VertexPool", "BUG wrong count: " + count + " left" + c); return new VertexPoolItem(); } @@ -67,16 +67,10 @@ public class VertexPool { return it; } - // private static float load = 1.0f; - // private static int loadCount = 0; - public static synchronized void release(VertexPoolItem items) { if (items == null) return; - // int pall = countAll; - // int pcnt = count; - // limit pool items if (countAll < POOL_LIMIT) { @@ -84,8 +78,6 @@ public class VertexPool { while (true) { count++; - // load += (float) last.used / VertexPoolItem.SIZE; - // loadCount++; if (last.next == null) break; @@ -95,27 +87,17 @@ public class VertexPool { last.next = pool; pool = items; - // Log.d("Pool", "added: " + (count - pcnt) + " " + count + " " + - // countAll - // + " load: " + (load / loadCount)); } else { - // int cleared = 0; VertexPoolItem prev, tmp = items; while (tmp != null) { prev = tmp; tmp = tmp.next; countAll--; - - // load += (float) prev.used / VertexPoolItem.SIZE; - // loadCount++; - prev.next = null; } - // Log.d("Pool", "dropped: " + (pall - countAll) + " " + count + " " - // + countAll + " load: " + (load / loadCount)); } } } diff --git a/src/org/oscim/utils/Point.java b/src/org/oscim/utils/Point.java index 228e1ce3..5ee846bb 100644 --- a/src/org/oscim/utils/Point.java +++ b/src/org/oscim/utils/Point.java @@ -21,11 +21,18 @@ public class Point { public float x; public float y; + public Point() { + } + Point(float x, float y) { this.x = x; this.y = y; } - Point() { + public void set(float x, float y) { + this.x = x; + this.y = y; + } + } diff --git a/src/org/oscim/view/MapViewPosition.java b/src/org/oscim/view/MapViewPosition.java index b48557d2..c75ef901 100644 --- a/src/org/oscim/view/MapViewPosition.java +++ b/src/org/oscim/view/MapViewPosition.java @@ -43,7 +43,7 @@ import android.util.Log; public class MapViewPosition { - private static final String TAG = MapViewPosition.class.getSimpleName(); + private static final String TAG = MapViewPosition.class.getName(); public final static int MAX_ZOOMLEVEL = 17; public final static int MIN_ZOOMLEVEL = 2; @@ -315,7 +315,7 @@ public class MapViewPosition { out.x = (int) (mPosX + mu[0] / mScale); out.y = (int) (mPosY + mu[1] / mScale); - Log.d(">>>", "getScreenPointOnMap " + reuse); + //Log.d(TAG, "getScreenPointOnMap " + reuse); return out; } @@ -340,7 +340,7 @@ public class MapViewPosition { MercatorProjection.pixelYToLatitude(dy, mZoomLevel), MercatorProjection.pixelXToLongitude(dx, mZoomLevel)); - Log.d(">>>", "fromScreenPixels " + p); + //Log.d(TAG, "fromScreenPixels " + p); return p; } @@ -550,6 +550,7 @@ public class MapViewPosition { */ public synchronized void rotateMap(float angle, float cx, float cy) { moveMap(cx, cy); + mRotation += angle; updateMatrix();