cleanups + comments
This commit is contained in:
parent
f2b7a9fdf8
commit
fada95f380
@ -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:
|
||||
|
@ -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;
|
||||
|
@ -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)'
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);"
|
||||
// + "}";
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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);"
|
||||
// + "}";
|
||||
|
||||
}
|
@ -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<Bitmap> 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<Bitmap>(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;
|
||||
}
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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();
|
||||
|
Loading…
x
Reference in New Issue
Block a user