move renderer.layer to renderer.sublayers and renderer.overlays to renderer.layers
This commit is contained in:
parent
c682ae518c
commit
2ff67d078d
@ -42,7 +42,7 @@ static void printPoly(TriangleIO *in) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
jint Java_org_oscim_renderer_layer_ExtrusionLayer_triangulate(JNIEnv *env, jclass c,
|
jint Java_org_oscim_renderer_sublayers_ExtrusionLayer_triangulate(JNIEnv *env, jclass c,
|
||||||
jfloatArray obj_points, jint pos, jint len, jint num_rings, jobject indice_buf, jint offset) {
|
jfloatArray obj_points, jint pos, jint len, jint num_rings, jobject indice_buf, jint offset) {
|
||||||
|
|
||||||
jshort* indices = (jshort*) (*env)->GetDirectBufferAddress(env, indice_buf);
|
jshort* indices = (jshort*) (*env)->GetDirectBufferAddress(env, indice_buf);
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
package org.oscim.layers.overlay;
|
package org.oscim.layers.overlay;
|
||||||
|
|
||||||
import org.oscim.core.MapPosition;
|
import org.oscim.core.MapPosition;
|
||||||
import org.oscim.renderer.overlays.ExtrusionOverlay;
|
import org.oscim.renderer.layers.ExtrusionRenderLayer;
|
||||||
import org.oscim.view.MapView;
|
import org.oscim.view.MapView;
|
||||||
|
|
||||||
import android.os.CountDownTimer;
|
import android.os.CountDownTimer;
|
||||||
@ -28,11 +28,11 @@ import android.view.MotionEvent;
|
|||||||
public class BuildingOverlay extends Overlay {
|
public class BuildingOverlay extends Overlay {
|
||||||
private final static String TAG = BuildingOverlay.class.getName();
|
private final static String TAG = BuildingOverlay.class.getName();
|
||||||
|
|
||||||
final ExtrusionOverlay mExtLayer;
|
final ExtrusionRenderLayer mExtLayer;
|
||||||
|
|
||||||
public BuildingOverlay(MapView mapView, org.oscim.layers.tile.TileRenderLayer tileRenderLayer) {
|
public BuildingOverlay(MapView mapView, org.oscim.layers.tile.TileRenderLayer tileRenderLayer) {
|
||||||
super(mapView);
|
super(mapView);
|
||||||
mExtLayer = new ExtrusionOverlay(mapView, tileRenderLayer);
|
mExtLayer = new ExtrusionRenderLayer(mapView, tileRenderLayer);
|
||||||
mLayer = mExtLayer;
|
mLayer = mExtLayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,8 +27,8 @@ import org.oscim.core.PointD;
|
|||||||
import org.oscim.core.Tile;
|
import org.oscim.core.Tile;
|
||||||
import org.oscim.layers.overlay.OverlayItem.HotspotPlace;
|
import org.oscim.layers.overlay.OverlayItem.HotspotPlace;
|
||||||
import org.oscim.renderer.GLRenderer.Matrices;
|
import org.oscim.renderer.GLRenderer.Matrices;
|
||||||
import org.oscim.renderer.layer.SymbolLayer;
|
import org.oscim.renderer.layers.BasicRenderLayer;
|
||||||
import org.oscim.renderer.overlays.BasicOverlay;
|
import org.oscim.renderer.sublayers.SymbolLayer;
|
||||||
import org.oscim.utils.GeometryUtils;
|
import org.oscim.utils.GeometryUtils;
|
||||||
import org.oscim.view.MapView;
|
import org.oscim.view.MapView;
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ public abstract class ItemizedOverlay<Item extends OverlayItem> extends Overlay
|
|||||||
|
|
||||||
private int mSize;
|
private int mSize;
|
||||||
|
|
||||||
class ItemOverlay extends BasicOverlay {
|
class ItemOverlay extends BasicRenderLayer {
|
||||||
|
|
||||||
private final SymbolLayer mSymbolLayer;
|
private final SymbolLayer mSymbolLayer;
|
||||||
private final float[] mBox = new float[8];
|
private final float[] mBox = new float[8];
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
package org.oscim.layers.overlay;
|
package org.oscim.layers.overlay;
|
||||||
|
|
||||||
import org.oscim.layers.tile.TileRenderLayer;
|
import org.oscim.layers.tile.TileRenderLayer;
|
||||||
import org.oscim.renderer.overlays.TextOverlay;
|
import org.oscim.renderer.layers.TextRenderLayer;
|
||||||
import org.oscim.view.MapView;
|
import org.oscim.view.MapView;
|
||||||
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@ -26,11 +26,11 @@ import android.view.MotionEvent;
|
|||||||
*/
|
*/
|
||||||
public class LabelingOverlay extends Overlay {
|
public class LabelingOverlay extends Overlay {
|
||||||
private final static String TAG = LabelingOverlay.class.getName();
|
private final static String TAG = LabelingOverlay.class.getName();
|
||||||
final TextOverlay mTextLayer;
|
final TextRenderLayer mTextLayer;
|
||||||
|
|
||||||
public LabelingOverlay(MapView mapView, TileRenderLayer tileRenderLayer) {
|
public LabelingOverlay(MapView mapView, TileRenderLayer tileRenderLayer) {
|
||||||
super(mapView);
|
super(mapView);
|
||||||
mTextLayer = new TextOverlay(mapView, tileRenderLayer);
|
mTextLayer = new TextRenderLayer(mapView, tileRenderLayer);
|
||||||
mLayer = mTextLayer;
|
mLayer = mTextLayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,10 +21,7 @@ import java.util.Map;
|
|||||||
import org.oscim.core.MapPosition;
|
import org.oscim.core.MapPosition;
|
||||||
import org.oscim.core.MercatorProjection;
|
import org.oscim.core.MercatorProjection;
|
||||||
import org.oscim.layers.Layer;
|
import org.oscim.layers.Layer;
|
||||||
import org.oscim.renderer.GLRenderer.Matrices;
|
import org.oscim.renderer.layers.BitmapRenderLayer;
|
||||||
import org.oscim.renderer.layer.BitmapLayer;
|
|
||||||
import org.oscim.renderer.layer.BitmapRenderer;
|
|
||||||
import org.oscim.renderer.overlays.BasicOverlay;
|
|
||||||
import org.oscim.view.MapView;
|
import org.oscim.view.MapView;
|
||||||
|
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
@ -74,8 +71,8 @@ public class MapScaleBar extends Layer {
|
|||||||
private final double mPrevScale = -1;
|
private final double mPrevScale = -1;
|
||||||
private final Map<TextField, String> mTextFields;
|
private final Map<TextField, String> mTextFields;
|
||||||
|
|
||||||
/* private */final Bitmap mMapScaleBitmap;
|
private final Bitmap mMapScaleBitmap;
|
||||||
/* private */boolean mUpdateBitmap;
|
private final BitmapRenderLayer mBitmapLayer;
|
||||||
|
|
||||||
public MapScaleBar(MapView mapView) {
|
public MapScaleBar(MapView mapView) {
|
||||||
super(mapView);
|
super(mapView);
|
||||||
@ -91,39 +88,10 @@ public class MapScaleBar extends Layer {
|
|||||||
configurePaints();
|
configurePaints();
|
||||||
|
|
||||||
mRedrawNeeded = true;
|
mRedrawNeeded = true;
|
||||||
|
mLayer = mBitmapLayer = new BitmapRenderLayer(mapView);
|
||||||
mLayer = new BasicOverlay(mapView) {
|
mBitmapLayer.setBitmap(mMapScaleBitmap, 0, 0,
|
||||||
private boolean initialized;
|
(int)(BITMAP_WIDTH * 1.2f),
|
||||||
|
(int)(BITMAP_HEIGHT * 1.2f));
|
||||||
@Override
|
|
||||||
public void update(MapPosition pos, boolean changed, Matrices m) {
|
|
||||||
if (!initialized) {
|
|
||||||
BitmapLayer l = new BitmapLayer(true);
|
|
||||||
l.setBitmap(mMapScaleBitmap, BITMAP_WIDTH, BITMAP_HEIGHT);
|
|
||||||
layers.textureLayers = l;
|
|
||||||
newData = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mUpdateBitmap) {
|
|
||||||
newData = true;
|
|
||||||
mUpdateBitmap = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void compile() {
|
|
||||||
synchronized (mMapScaleBitmap) {
|
|
||||||
super.compile();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public synchronized void render(MapPosition pos, Matrices m) {
|
|
||||||
// scale up 1.2
|
|
||||||
m.useScreenCoordinates(false, 8 / 1.2f);
|
|
||||||
BitmapRenderer.draw(layers.textureLayers, 1, m);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -163,9 +131,10 @@ public class MapScaleBar extends Layer {
|
|||||||
}
|
}
|
||||||
synchronized (mMapScaleBitmap) {
|
synchronized (mMapScaleBitmap) {
|
||||||
redrawMapScaleBitmap(scaleBarLength, mapScaleValue);
|
redrawMapScaleBitmap(scaleBarLength, mapScaleValue);
|
||||||
mUpdateBitmap = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mBitmapLayer.updateBitmap();
|
||||||
|
|
||||||
mRedrawNeeded = false;
|
mRedrawNeeded = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,8 +27,8 @@ import org.oscim.core.Tile;
|
|||||||
import org.oscim.graphics.Paint.Cap;
|
import org.oscim.graphics.Paint.Cap;
|
||||||
import org.oscim.layers.Layer;
|
import org.oscim.layers.Layer;
|
||||||
import org.oscim.renderer.GLRenderer.Matrices;
|
import org.oscim.renderer.GLRenderer.Matrices;
|
||||||
import org.oscim.renderer.layer.LineLayer;
|
import org.oscim.renderer.layers.BasicRenderLayer;
|
||||||
import org.oscim.renderer.overlays.BasicOverlay;
|
import org.oscim.renderer.sublayers.LineLayer;
|
||||||
import org.oscim.theme.renderinstruction.Line;
|
import org.oscim.theme.renderinstruction.Line;
|
||||||
import org.oscim.utils.FastMath;
|
import org.oscim.utils.FastMath;
|
||||||
import org.oscim.utils.LineClipper;
|
import org.oscim.utils.LineClipper;
|
||||||
@ -44,7 +44,7 @@ public class PathOverlay extends Layer {
|
|||||||
/** Line style */
|
/** Line style */
|
||||||
/* package */Line mLineStyle;
|
/* package */Line mLineStyle;
|
||||||
|
|
||||||
class RenderPath extends BasicOverlay {
|
class RenderPath extends BasicRenderLayer {
|
||||||
|
|
||||||
private static final byte MAX_ZOOM = 20;
|
private static final byte MAX_ZOOM = 20;
|
||||||
private final double MAX_SCALE;
|
private final double MAX_SCALE;
|
||||||
|
@ -15,8 +15,9 @@
|
|||||||
package org.oscim.layers.tile;
|
package org.oscim.layers.tile;
|
||||||
|
|
||||||
import org.oscim.core.Tile;
|
import org.oscim.core.Tile;
|
||||||
import org.oscim.renderer.layer.Layers;
|
import org.oscim.renderer.BufferObject;
|
||||||
import org.oscim.renderer.layer.TextItem;
|
import org.oscim.renderer.sublayers.Layers;
|
||||||
|
import org.oscim.renderer.sublayers.TextItem;
|
||||||
import org.oscim.utils.quadtree.QuadTree;
|
import org.oscim.utils.quadtree.QuadTree;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -185,4 +186,19 @@ public final class MapTile extends Tile {
|
|||||||
state = STATE_LOADING;
|
state = STATE_LOADING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void clear(){
|
||||||
|
if (layers != null) {
|
||||||
|
// TODO move this to layers clear
|
||||||
|
if (layers.vbo != null) {
|
||||||
|
BufferObject.release(layers.vbo);
|
||||||
|
layers.vbo = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
layers.clear();
|
||||||
|
layers = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
TextItem.pool.releaseAll(labels);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,9 +24,7 @@ import java.util.Arrays;
|
|||||||
|
|
||||||
import org.oscim.core.MapPosition;
|
import org.oscim.core.MapPosition;
|
||||||
import org.oscim.core.Tile;
|
import org.oscim.core.Tile;
|
||||||
import org.oscim.renderer.BufferObject;
|
|
||||||
import org.oscim.renderer.GLRenderer;
|
import org.oscim.renderer.GLRenderer;
|
||||||
import org.oscim.renderer.layer.TextItem;
|
|
||||||
import org.oscim.utils.FastMath;
|
import org.oscim.utils.FastMath;
|
||||||
import org.oscim.utils.ScanBox;
|
import org.oscim.utils.ScanBox;
|
||||||
import org.oscim.utils.quadtree.QuadTree;
|
import org.oscim.utils.quadtree.QuadTree;
|
||||||
@ -154,7 +152,6 @@ public class TileManager {
|
|||||||
// and VBOs might be lost
|
// and VBOs might be lost
|
||||||
// VertexPool.init();
|
// VertexPool.init();
|
||||||
//}
|
//}
|
||||||
|
|
||||||
// clear cache index
|
// clear cache index
|
||||||
//QuadTree.init();
|
//QuadTree.init();
|
||||||
|
|
||||||
@ -402,18 +399,7 @@ public class TileManager {
|
|||||||
if (t == null)
|
if (t == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (t.layers != null) {
|
t.clear();
|
||||||
// TODO move this to layers clear
|
|
||||||
if (t.layers.vbo != null) {
|
|
||||||
BufferObject.release(t.layers.vbo);
|
|
||||||
t.layers.vbo = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
t.layers.clear();
|
|
||||||
t.layers = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
TextItem.pool.releaseAll(t.labels);
|
|
||||||
|
|
||||||
mIndex.remove(t);
|
mIndex.remove(t);
|
||||||
|
|
||||||
|
@ -21,11 +21,11 @@ import org.oscim.core.MapPosition;
|
|||||||
import org.oscim.core.Tile;
|
import org.oscim.core.Tile;
|
||||||
import org.oscim.renderer.GLRenderer;
|
import org.oscim.renderer.GLRenderer;
|
||||||
import org.oscim.renderer.GLRenderer.Matrices;
|
import org.oscim.renderer.GLRenderer.Matrices;
|
||||||
import org.oscim.renderer.layer.BitmapRenderer;
|
import org.oscim.renderer.sublayers.BitmapRenderer;
|
||||||
import org.oscim.renderer.layer.Layer;
|
import org.oscim.renderer.sublayers.Layer;
|
||||||
import org.oscim.renderer.layer.LineRenderer;
|
import org.oscim.renderer.sublayers.LineRenderer;
|
||||||
import org.oscim.renderer.layer.LineTexRenderer;
|
import org.oscim.renderer.sublayers.LineTexRenderer;
|
||||||
import org.oscim.renderer.layer.PolygonRenderer;
|
import org.oscim.renderer.sublayers.PolygonRenderer;
|
||||||
import org.oscim.utils.FastMath;
|
import org.oscim.utils.FastMath;
|
||||||
import org.oscim.utils.Matrix4;
|
import org.oscim.utils.Matrix4;
|
||||||
import org.oscim.utils.quadtree.QuadTree;
|
import org.oscim.utils.quadtree.QuadTree;
|
||||||
|
@ -26,8 +26,8 @@ import org.oscim.layers.tile.MapTile;
|
|||||||
import org.oscim.layers.tile.TileLayer;
|
import org.oscim.layers.tile.TileLayer;
|
||||||
import org.oscim.layers.tile.TileLoader;
|
import org.oscim.layers.tile.TileLoader;
|
||||||
import org.oscim.layers.tile.TileManager;
|
import org.oscim.layers.tile.TileManager;
|
||||||
import org.oscim.renderer.layer.BitmapLayer;
|
import org.oscim.renderer.sublayers.BitmapLayer;
|
||||||
import org.oscim.renderer.layer.Layers;
|
import org.oscim.renderer.sublayers.Layers;
|
||||||
import org.oscim.view.MapView;
|
import org.oscim.view.MapView;
|
||||||
|
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
|
@ -24,8 +24,8 @@ import org.oscim.layers.tile.TileLayer;
|
|||||||
import org.oscim.layers.tile.TileLoader;
|
import org.oscim.layers.tile.TileLoader;
|
||||||
import org.oscim.layers.tile.TileManager;
|
import org.oscim.layers.tile.TileManager;
|
||||||
import org.oscim.layers.tile.test.TestTileLayer.TestTileLoader;
|
import org.oscim.layers.tile.test.TestTileLayer.TestTileLoader;
|
||||||
import org.oscim.renderer.layer.Layers;
|
import org.oscim.renderer.sublayers.Layers;
|
||||||
import org.oscim.renderer.layer.LineLayer;
|
import org.oscim.renderer.sublayers.LineLayer;
|
||||||
import org.oscim.theme.renderinstruction.Line;
|
import org.oscim.theme.renderinstruction.Line;
|
||||||
import org.oscim.view.MapView;
|
import org.oscim.view.MapView;
|
||||||
|
|
||||||
|
@ -30,12 +30,12 @@ import org.oscim.layers.tile.JobQueue;
|
|||||||
import org.oscim.layers.tile.MapTile;
|
import org.oscim.layers.tile.MapTile;
|
||||||
import org.oscim.layers.tile.TileLoader;
|
import org.oscim.layers.tile.TileLoader;
|
||||||
import org.oscim.layers.tile.TileManager;
|
import org.oscim.layers.tile.TileManager;
|
||||||
import org.oscim.renderer.layer.ExtrusionLayer;
|
import org.oscim.renderer.sublayers.ExtrusionLayer;
|
||||||
import org.oscim.renderer.layer.Layers;
|
import org.oscim.renderer.sublayers.Layers;
|
||||||
import org.oscim.renderer.layer.LineLayer;
|
import org.oscim.renderer.sublayers.LineLayer;
|
||||||
import org.oscim.renderer.layer.LineTexLayer;
|
import org.oscim.renderer.sublayers.LineTexLayer;
|
||||||
import org.oscim.renderer.layer.PolygonLayer;
|
import org.oscim.renderer.sublayers.PolygonLayer;
|
||||||
import org.oscim.renderer.layer.TextItem;
|
import org.oscim.renderer.sublayers.TextItem;
|
||||||
import org.oscim.theme.IRenderCallback;
|
import org.oscim.theme.IRenderCallback;
|
||||||
import org.oscim.theme.IRenderTheme;
|
import org.oscim.theme.IRenderTheme;
|
||||||
import org.oscim.theme.renderinstruction.Area;
|
import org.oscim.theme.renderinstruction.Area;
|
||||||
|
@ -17,7 +17,7 @@ package org.oscim.layers.tile.vector;
|
|||||||
|
|
||||||
import org.oscim.core.Tile;
|
import org.oscim.core.Tile;
|
||||||
import org.oscim.layers.tile.MapTile;
|
import org.oscim.layers.tile.MapTile;
|
||||||
import org.oscim.renderer.layer.TextItem;
|
import org.oscim.renderer.sublayers.TextItem;
|
||||||
import org.oscim.theme.renderinstruction.Text;
|
import org.oscim.theme.renderinstruction.Text;
|
||||||
import org.oscim.utils.GeometryUtils;
|
import org.oscim.utils.GeometryUtils;
|
||||||
import org.oscim.utils.LineClipper;
|
import org.oscim.utils.LineClipper;
|
||||||
|
@ -31,7 +31,7 @@ import javax.microedition.khronos.opengles.GL10;
|
|||||||
import org.oscim.core.MapPosition;
|
import org.oscim.core.MapPosition;
|
||||||
import org.oscim.core.Tile;
|
import org.oscim.core.Tile;
|
||||||
import org.oscim.layers.tile.MapTile;
|
import org.oscim.layers.tile.MapTile;
|
||||||
import org.oscim.renderer.layer.Layers;
|
import org.oscim.renderer.sublayers.Layers;
|
||||||
import org.oscim.theme.IRenderTheme;
|
import org.oscim.theme.IRenderTheme;
|
||||||
import org.oscim.utils.GlUtils;
|
import org.oscim.utils.GlUtils;
|
||||||
import org.oscim.utils.Matrix4;
|
import org.oscim.utils.Matrix4;
|
||||||
|
@ -22,13 +22,17 @@ import org.oscim.view.MapView;
|
|||||||
public abstract class RenderLayer {
|
public abstract class RenderLayer {
|
||||||
|
|
||||||
protected final MapView mMapView;
|
protected final MapView mMapView;
|
||||||
// keep the Position for which the Overlay is rendered
|
/**
|
||||||
|
* Use mMapPosition.copy(position) to keep the position for which
|
||||||
|
* the Overlay is _compiled_. NOTE: required by setMatrix utility
|
||||||
|
* functions to draw this layer fixed to the map
|
||||||
|
*/
|
||||||
protected MapPosition mMapPosition;
|
protected MapPosition mMapPosition;
|
||||||
|
|
||||||
// flag to set when data is ready for (re)compilation.
|
/** flag to set when data is ready for (re)compilation. */
|
||||||
public boolean newData;
|
public boolean newData;
|
||||||
|
|
||||||
// flag set by GLRenderer when data is compiled
|
/** flag to set when layer is ready for rendering */
|
||||||
public boolean isReady;
|
public boolean isReady;
|
||||||
|
|
||||||
public RenderLayer(MapView mapView) {
|
public RenderLayer(MapView mapView) {
|
||||||
@ -36,54 +40,56 @@ public abstract class RenderLayer {
|
|||||||
mMapPosition = new MapPosition();
|
mMapPosition = new MapPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
// /////////////// called from GLRender Thread ////////////////////////
|
/** /////////////// called in GLRender Thread /////////////////////// **/
|
||||||
/**
|
/**
|
||||||
* Called first by GLRenderer: Set 'newData' true when 'compile()' should be
|
* 1. Called first by GLRenderer:
|
||||||
* called before next 'render()'
|
* Update the layer state here. Set 'this.newData = true' when
|
||||||
|
* 'compile()' should be called before next call to 'render()'
|
||||||
*
|
*
|
||||||
* @param curPos TODO
|
* @param position current MapPosition
|
||||||
* @param positionChanged
|
* @param changed
|
||||||
* true when MapPosition has changed
|
* true when MapPosition has changed since last frame
|
||||||
* @param matrices TODO
|
* @param matrices contains the current view- and projection-matrices
|
||||||
|
* and 'mvp' matrix for temporary use.
|
||||||
*/
|
*/
|
||||||
public abstract void update(MapPosition curPos, boolean positionChanged,
|
public abstract void update(MapPosition position, boolean changed,
|
||||||
Matrices matrices);
|
Matrices matrices);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 2: Compile everything for drawing
|
* 2. Compile vertex buffers and upload textures for drawing:
|
||||||
* Set 'isReady' true when things are ready for 'render()'
|
* Set 'this.isReady = true' when things are ready for 'render()'
|
||||||
*/
|
*/
|
||||||
public abstract void compile();
|
public abstract void compile();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 3: Draw layer
|
* 3. Draw layer:
|
||||||
*
|
*
|
||||||
* @param pos
|
* @param position current MapPosition
|
||||||
* Current MapPosition
|
* @param matrices contains the current view- and projection-matrices.
|
||||||
* @param m
|
* 'matrices.mvp' is for temporary use to build the model-
|
||||||
* Current render matrices + matrix for temporary use
|
* view-projection to set as uniform.
|
||||||
*/
|
*/
|
||||||
public abstract void render(MapPosition pos, Matrices m);
|
public abstract void render(MapPosition position, Matrices matrices);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Utility: set m.mvp matrix relative to the difference of current
|
* Utility: Set matrices.mvp matrix relative to the difference of current
|
||||||
* MapPosition
|
* MapPosition and the last updated Overlay MapPosition.
|
||||||
* and the last updated Overlay MapPosition
|
* Use this to 'stick' your layer to the map.
|
||||||
*
|
*
|
||||||
* @param curPos
|
* @param position
|
||||||
* current MapPosition
|
* current MapPosition
|
||||||
* @param m
|
* @param matrices
|
||||||
* current Matrices
|
* current Matrices
|
||||||
* @param project
|
* @param project
|
||||||
* apply view and projection, or just view otherwise
|
* if true apply view- and projection, or just view otherwise.
|
||||||
*/
|
*/
|
||||||
protected void setMatrix(MapPosition curPos, Matrices m, boolean project) {
|
protected void setMatrix(MapPosition position, Matrices matrices, boolean project) {
|
||||||
MapPosition oPos = mMapPosition;
|
MapPosition oPos = mMapPosition;
|
||||||
|
|
||||||
double tileScale = Tile.SIZE * curPos.scale;
|
double tileScale = Tile.SIZE * position.scale;
|
||||||
|
|
||||||
double x = oPos.x - curPos.x;
|
double x = oPos.x - position.x;
|
||||||
double y = oPos.y - curPos.y;
|
double y = oPos.y - position.y;
|
||||||
|
|
||||||
// wrap around date-line
|
// wrap around date-line
|
||||||
// while (x < -1)
|
// while (x < -1)
|
||||||
@ -91,21 +97,21 @@ public abstract class RenderLayer {
|
|||||||
// while (x > 2)
|
// while (x > 2)
|
||||||
// x -= 1.0;
|
// x -= 1.0;
|
||||||
|
|
||||||
m.mvp.setTransScale((float) (x * tileScale), (float) (y * tileScale),
|
matrices.mvp.setTransScale((float) (x * tileScale), (float) (y * tileScale),
|
||||||
(float) ((curPos.scale / oPos.scale) / GLRenderer.COORD_SCALE));
|
(float) ((position.scale / oPos.scale) / GLRenderer.COORD_SCALE));
|
||||||
|
|
||||||
m.mvp.multiplyMM(project ? m.viewproj : m.view, m.mvp);
|
matrices.mvp.multiplyMM(project ? matrices.viewproj : matrices.view, matrices.mvp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Utility: set m.mvp matrix relative to the difference of current
|
* Utility: Set matrices.mvp matrix relative to the difference of current
|
||||||
* MapPosition
|
* MapPosition and the last updated Overlay MapPosition and add
|
||||||
* and the last updated Overlay MapPosition and add m.viewproj
|
* matrices.viewproj
|
||||||
*
|
*
|
||||||
* @param curPos ...
|
* @param position ...
|
||||||
* @param m ...
|
* @param matrices ...
|
||||||
*/
|
*/
|
||||||
protected void setMatrix(MapPosition curPos, Matrices m) {
|
protected void setMatrix(MapPosition position, Matrices matrices) {
|
||||||
setMatrix(curPos, m, true);
|
setMatrix(position, matrices, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU Lesser General Public License along with
|
* You should have received a copy of the GNU Lesser General Public License along with
|
||||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package org.oscim.renderer.overlays;
|
package org.oscim.renderer.layers;
|
||||||
|
|
||||||
import org.oscim.core.MapPosition;
|
import org.oscim.core.MapPosition;
|
||||||
import org.oscim.renderer.BufferObject;
|
import org.oscim.renderer.BufferObject;
|
||||||
@ -20,34 +20,32 @@ import org.oscim.renderer.GLRenderer;
|
|||||||
import org.oscim.renderer.GLRenderer.Matrices;
|
import org.oscim.renderer.GLRenderer.Matrices;
|
||||||
import org.oscim.renderer.GLState;
|
import org.oscim.renderer.GLState;
|
||||||
import org.oscim.renderer.RenderLayer;
|
import org.oscim.renderer.RenderLayer;
|
||||||
import org.oscim.renderer.layer.BitmapRenderer;
|
import org.oscim.renderer.sublayers.BitmapRenderer;
|
||||||
import org.oscim.renderer.layer.Layer;
|
import org.oscim.renderer.sublayers.Layer;
|
||||||
import org.oscim.renderer.layer.Layers;
|
import org.oscim.renderer.sublayers.Layers;
|
||||||
import org.oscim.renderer.layer.LineRenderer;
|
import org.oscim.renderer.sublayers.LineRenderer;
|
||||||
import org.oscim.renderer.layer.LineTexRenderer;
|
import org.oscim.renderer.sublayers.LineTexRenderer;
|
||||||
import org.oscim.renderer.layer.PolygonRenderer;
|
import org.oscim.renderer.sublayers.PolygonRenderer;
|
||||||
import org.oscim.renderer.layer.TextureRenderer;
|
import org.oscim.renderer.sublayers.TextureRenderer;
|
||||||
import org.oscim.utils.FastMath;
|
import org.oscim.utils.FastMath;
|
||||||
import org.oscim.view.MapView;
|
import org.oscim.view.MapView;
|
||||||
|
|
||||||
import android.opengl.GLES20;
|
import android.opengl.GLES20;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base class to use the renderer.layer.Layers drawing 'API'
|
* Base class to use the renderer.sublayers for drawing
|
||||||
*/
|
*/
|
||||||
public abstract class BasicOverlay extends RenderLayer {
|
public abstract class BasicRenderLayer extends RenderLayer {
|
||||||
|
|
||||||
public final Layers layers;
|
public final Layers layers;
|
||||||
|
|
||||||
protected float[] mvp = new float[16];
|
public BasicRenderLayer(MapView mapView) {
|
||||||
|
|
||||||
public BasicOverlay(MapView mapView) {
|
|
||||||
super(mapView);
|
super(mapView);
|
||||||
layers = new Layers();
|
layers = new Layers();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* use synchronized when modifying layers
|
* Render all 'layers'
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public synchronized void render(MapPosition curPos, Matrices m) {
|
public synchronized void render(MapPosition curPos, Matrices m) {
|
||||||
@ -58,7 +56,7 @@ public abstract class BasicOverlay extends RenderLayer {
|
|||||||
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, layers.vbo.id);
|
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, layers.vbo.id);
|
||||||
GLState.test(false, false);
|
GLState.test(false, false);
|
||||||
GLState.blend(true);
|
GLState.blend(true);
|
||||||
int simple = pos.tilt == 0 ? 1 : 0;
|
int simple = (curPos.tilt < 1 ? 1 : 0);
|
||||||
|
|
||||||
if (layers.baseLayers != null) {
|
if (layers.baseLayers != null) {
|
||||||
setMatrix(curPos, m, true);
|
setMatrix(curPos, m, true);
|
97
src/org/oscim/renderer/layers/BitmapRenderLayer.java
Normal file
97
src/org/oscim/renderer/layers/BitmapRenderLayer.java
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
/*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.oscim.renderer.layers;
|
||||||
|
|
||||||
|
import org.oscim.core.MapPosition;
|
||||||
|
import org.oscim.renderer.GLRenderer.Matrices;
|
||||||
|
import org.oscim.renderer.sublayers.BitmapLayer;
|
||||||
|
import org.oscim.renderer.sublayers.BitmapRenderer;
|
||||||
|
import org.oscim.view.MapView;
|
||||||
|
|
||||||
|
import android.graphics.Bitmap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RenderLayer to draw a custom Bitmap.
|
||||||
|
* NOTE: Only modify the Bitmap within a synchronized block!
|
||||||
|
* synchronized(bitmap){}
|
||||||
|
* Then call updateBitmap().
|
||||||
|
*/
|
||||||
|
public class BitmapRenderLayer extends BasicRenderLayer {
|
||||||
|
|
||||||
|
private Bitmap mBitmap;
|
||||||
|
private int mWidth;
|
||||||
|
private int mHeight;
|
||||||
|
private boolean initialized;
|
||||||
|
private boolean mUpdateBitmap;
|
||||||
|
|
||||||
|
public BitmapRenderLayer(MapView mapView) {
|
||||||
|
super(mapView);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param bitmap
|
||||||
|
* with dimension being power of two
|
||||||
|
* @param srcWidth
|
||||||
|
* TODO width used
|
||||||
|
* @param srcHeight
|
||||||
|
* TODO height used
|
||||||
|
*/
|
||||||
|
public synchronized void setBitmap(Bitmap bitmap,
|
||||||
|
int srcWidth, int srcHeight,
|
||||||
|
int targetWidth, int targetHeight) {
|
||||||
|
mWidth = targetWidth;
|
||||||
|
mHeight = targetHeight;
|
||||||
|
mBitmap = bitmap;
|
||||||
|
initialized = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized void updateBitmap() {
|
||||||
|
mUpdateBitmap = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public synchronized void update(MapPosition pos, boolean changed, Matrices m) {
|
||||||
|
if (!initialized) {
|
||||||
|
layers.clear();
|
||||||
|
|
||||||
|
BitmapLayer l = new BitmapLayer(true);
|
||||||
|
l.setBitmap(mBitmap, mWidth, mHeight);
|
||||||
|
layers.textureLayers = l;
|
||||||
|
|
||||||
|
newData = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mUpdateBitmap) {
|
||||||
|
newData = true;
|
||||||
|
mUpdateBitmap = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public synchronized void compile() {
|
||||||
|
if (mBitmap == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
synchronized (mBitmap) {
|
||||||
|
super.compile();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public synchronized void render(MapPosition pos, Matrices m) {
|
||||||
|
m.useScreenCoordinates(false, 8);
|
||||||
|
BitmapRenderer.draw(layers.textureLayers, 1, m);
|
||||||
|
}
|
||||||
|
}
|
@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU Lesser General Public License along with
|
* You should have received a copy of the GNU Lesser General Public License along with
|
||||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package org.oscim.renderer.overlays;
|
package org.oscim.renderer.layers;
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.ByteOrder;
|
import java.nio.ByteOrder;
|
||||||
@ -34,7 +34,7 @@ import android.opengl.GLES20;
|
|||||||
* https://github.com/dalinaum/opengl-es-book-samples/tree/master/Android
|
* https://github.com/dalinaum/opengl-es-book-samples/tree/master/Android
|
||||||
* */
|
* */
|
||||||
|
|
||||||
public class CustomOverlay extends RenderLayer {
|
public class CustomRenderLayer extends RenderLayer {
|
||||||
|
|
||||||
private int mProgramObject;
|
private int mProgramObject;
|
||||||
private int hVertexPosition;
|
private int hVertexPosition;
|
||||||
@ -49,7 +49,7 @@ public class CustomOverlay extends RenderLayer {
|
|||||||
};
|
};
|
||||||
private boolean mInitialized;
|
private boolean mInitialized;
|
||||||
|
|
||||||
public CustomOverlay(MapView mapView) {
|
public CustomRenderLayer(MapView mapView) {
|
||||||
super(mapView);
|
super(mapView);
|
||||||
}
|
}
|
||||||
|
|
@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU Lesser General Public License along with
|
* You should have received a copy of the GNU Lesser General Public License along with
|
||||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package org.oscim.renderer.overlays;
|
package org.oscim.renderer.layers;
|
||||||
|
|
||||||
import org.oscim.core.MapPosition;
|
import org.oscim.core.MapPosition;
|
||||||
import org.oscim.core.Tile;
|
import org.oscim.core.Tile;
|
||||||
@ -23,7 +23,7 @@ import org.oscim.renderer.GLRenderer;
|
|||||||
import org.oscim.renderer.GLRenderer.Matrices;
|
import org.oscim.renderer.GLRenderer.Matrices;
|
||||||
import org.oscim.renderer.GLState;
|
import org.oscim.renderer.GLState;
|
||||||
import org.oscim.renderer.RenderLayer;
|
import org.oscim.renderer.RenderLayer;
|
||||||
import org.oscim.renderer.layer.ExtrusionLayer;
|
import org.oscim.renderer.sublayers.ExtrusionLayer;
|
||||||
import org.oscim.utils.GlUtils;
|
import org.oscim.utils.GlUtils;
|
||||||
import org.oscim.view.MapView;
|
import org.oscim.view.MapView;
|
||||||
|
|
||||||
@ -33,12 +33,12 @@ import android.util.Log;
|
|||||||
/**
|
/**
|
||||||
* @author Hannes Janetzek
|
* @author Hannes Janetzek
|
||||||
*/
|
*/
|
||||||
public class ExtrusionOverlay extends RenderLayer {
|
public class ExtrusionRenderLayer extends RenderLayer {
|
||||||
private final static String TAG = ExtrusionOverlay.class.getName();
|
private final static String TAG = ExtrusionRenderLayer.class.getName();
|
||||||
|
|
||||||
private final TileRenderLayer mTileLayer;
|
private final TileRenderLayer mTileLayer;
|
||||||
|
|
||||||
public ExtrusionOverlay(MapView mapView, org.oscim.layers.tile.TileRenderLayer tileRenderLayer) {
|
public ExtrusionRenderLayer(MapView mapView, org.oscim.layers.tile.TileRenderLayer tileRenderLayer) {
|
||||||
super(mapView);
|
super(mapView);
|
||||||
mTileLayer = tileRenderLayer;
|
mTileLayer = tileRenderLayer;
|
||||||
}
|
}
|
137
src/org/oscim/renderer/layers/GridRenderLayer.java
Normal file
137
src/org/oscim/renderer/layers/GridRenderLayer.java
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
/*
|
||||||
|
* 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 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.oscim.renderer.layers;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import org.oscim.core.GeometryBuffer;
|
||||||
|
import org.oscim.core.MapPosition;
|
||||||
|
import org.oscim.core.Tile;
|
||||||
|
import org.oscim.graphics.Color;
|
||||||
|
import org.oscim.graphics.Paint.Cap;
|
||||||
|
import org.oscim.renderer.GLRenderer.Matrices;
|
||||||
|
import org.oscim.renderer.sublayers.LineLayer;
|
||||||
|
import org.oscim.renderer.sublayers.TextItem;
|
||||||
|
import org.oscim.renderer.sublayers.TextLayer;
|
||||||
|
import org.oscim.theme.renderinstruction.Line;
|
||||||
|
import org.oscim.theme.renderinstruction.Text;
|
||||||
|
import org.oscim.view.MapView;
|
||||||
|
|
||||||
|
public class GridRenderLayer extends BasicRenderLayer {
|
||||||
|
private final static String TILE_FORMAT = "%d/%d/%d";
|
||||||
|
private final TextLayer mTextLayer;
|
||||||
|
private final Text mText;
|
||||||
|
|
||||||
|
private final LineLayer mLineLayer;
|
||||||
|
|
||||||
|
private final GeometryBuffer mLines;
|
||||||
|
|
||||||
|
private int mCurX, mCurY, mCurZ;
|
||||||
|
|
||||||
|
public GridRenderLayer(MapView mapView) {
|
||||||
|
super(mapView);
|
||||||
|
|
||||||
|
int size = Tile.SIZE;
|
||||||
|
|
||||||
|
// not needed to set but we know:
|
||||||
|
// 16 lines 'a' two points
|
||||||
|
mLines = new GeometryBuffer(2 * 16, 16);
|
||||||
|
|
||||||
|
float pos = -size * 4;
|
||||||
|
|
||||||
|
// 8 vertical lines
|
||||||
|
for (int i = 0; i < 8; i++) {
|
||||||
|
float x = pos + i * size;
|
||||||
|
mLines.startLine();
|
||||||
|
mLines.addPoint(x, pos);
|
||||||
|
mLines.addPoint(x, pos + size * 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 8 horizontal lines
|
||||||
|
for (int j = 0; j < 8; j++) {
|
||||||
|
float y = pos + j * size;
|
||||||
|
mLines.startLine();
|
||||||
|
mLines.addPoint(pos, y);
|
||||||
|
mLines.addPoint(pos + size * 8, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
mText = Text.createText(22, 0, Color.RED, 0, false);
|
||||||
|
|
||||||
|
mTextLayer = layers.addTextLayer(new TextLayer());
|
||||||
|
mLineLayer = layers.addLineLayer(0,
|
||||||
|
new Line(Color.BLUE, 1.5f, Cap.BUTT));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addLabels(int x, int y, int z) {
|
||||||
|
int s = Tile.SIZE;
|
||||||
|
|
||||||
|
TextLayer tl = mTextLayer;
|
||||||
|
tl.clear();
|
||||||
|
|
||||||
|
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));
|
||||||
|
|
||||||
|
TextItem ti = TextItem.pool.get();
|
||||||
|
ti.set(s * xx + s / 2, s * yy + s / 2, label, mText);
|
||||||
|
|
||||||
|
tl.addText(ti);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// render TextItems to a bitmap and prepare vertex buffer data.
|
||||||
|
tl.prepare();
|
||||||
|
|
||||||
|
// release TextItems
|
||||||
|
tl.clearLabels();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update(MapPosition pos, boolean changed, Matrices m) {
|
||||||
|
|
||||||
|
// scale coordinates relative to current 'zoom-level' to
|
||||||
|
// get the position as the nearest tile coordinate
|
||||||
|
int z = 1 << pos.zoomLevel;
|
||||||
|
int x = (int) (pos.x * z);
|
||||||
|
int y = (int) (pos.y * z);
|
||||||
|
|
||||||
|
// update layers when map moved by at least one tile
|
||||||
|
if (x == mCurX && y == mCurY && z == mCurZ)
|
||||||
|
return;
|
||||||
|
|
||||||
|
mCurX = x;
|
||||||
|
mCurY = y;
|
||||||
|
mCurZ = z;
|
||||||
|
|
||||||
|
MapPosition layerPos = mMapPosition;
|
||||||
|
layerPos.copy(pos);
|
||||||
|
layerPos.x = (double) x / z;
|
||||||
|
layerPos.y = (double) y / z;
|
||||||
|
layerPos.scale = z;
|
||||||
|
|
||||||
|
addLabels(x, y, pos.zoomLevel);
|
||||||
|
|
||||||
|
mLineLayer.clear();
|
||||||
|
mLineLayer.addLine(mLines);
|
||||||
|
|
||||||
|
// tell GLRender to compile new layer data.
|
||||||
|
this.newData = true;
|
||||||
|
}
|
||||||
|
}
|
29
src/org/oscim/renderer/layers/LabelRenderLayer.java
Normal file
29
src/org/oscim/renderer/layers/LabelRenderLayer.java
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.oscim.renderer.layers;
|
||||||
|
|
||||||
|
public class LabelRenderLayer {
|
||||||
|
|
||||||
|
public LabelRenderLayer() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void finalize() throws Throwable {
|
||||||
|
|
||||||
|
super.finalize();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -13,7 +13,7 @@
|
|||||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.oscim.renderer.overlays;
|
package org.oscim.renderer.layers;
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
// 1. rewrite :)
|
// 1. rewrite :)
|
||||||
@ -31,7 +31,6 @@ package org.oscim.renderer.overlays;
|
|||||||
import org.oscim.core.MapPosition;
|
import org.oscim.core.MapPosition;
|
||||||
import org.oscim.core.Tile;
|
import org.oscim.core.Tile;
|
||||||
import org.oscim.graphics.Color;
|
import org.oscim.graphics.Color;
|
||||||
import org.oscim.graphics.Paint.Cap;
|
|
||||||
import org.oscim.layers.tile.MapTile;
|
import org.oscim.layers.tile.MapTile;
|
||||||
import org.oscim.layers.tile.TileRenderLayer;
|
import org.oscim.layers.tile.TileRenderLayer;
|
||||||
import org.oscim.layers.tile.TileSet;
|
import org.oscim.layers.tile.TileSet;
|
||||||
@ -39,14 +38,14 @@ import org.oscim.renderer.BufferObject;
|
|||||||
import org.oscim.renderer.GLRenderer;
|
import org.oscim.renderer.GLRenderer;
|
||||||
import org.oscim.renderer.GLRenderer.Matrices;
|
import org.oscim.renderer.GLRenderer.Matrices;
|
||||||
import org.oscim.renderer.GLState;
|
import org.oscim.renderer.GLState;
|
||||||
import org.oscim.renderer.layer.Layer;
|
import org.oscim.renderer.sublayers.Layer;
|
||||||
import org.oscim.renderer.layer.Layers;
|
import org.oscim.renderer.sublayers.Layers;
|
||||||
import org.oscim.renderer.layer.LineLayer;
|
import org.oscim.renderer.sublayers.LineLayer;
|
||||||
import org.oscim.renderer.layer.LineRenderer;
|
import org.oscim.renderer.sublayers.LineRenderer;
|
||||||
import org.oscim.renderer.layer.PolygonRenderer;
|
import org.oscim.renderer.sublayers.PolygonRenderer;
|
||||||
import org.oscim.renderer.layer.TextItem;
|
import org.oscim.renderer.sublayers.TextItem;
|
||||||
import org.oscim.renderer.layer.TextLayer;
|
import org.oscim.renderer.sublayers.TextLayer;
|
||||||
import org.oscim.renderer.layer.TextureRenderer;
|
import org.oscim.renderer.sublayers.TextureRenderer;
|
||||||
import org.oscim.theme.renderinstruction.Line;
|
import org.oscim.theme.renderinstruction.Line;
|
||||||
import org.oscim.utils.FastMath;
|
import org.oscim.utils.FastMath;
|
||||||
import org.oscim.utils.OBB2D;
|
import org.oscim.utils.OBB2D;
|
||||||
@ -59,8 +58,8 @@ import org.oscim.view.MapViewPosition;
|
|||||||
import android.opengl.GLES20;
|
import android.opengl.GLES20;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
|
|
||||||
public class TextOverlay extends BasicOverlay {
|
public class TextRenderLayer extends BasicRenderLayer {
|
||||||
private final static String TAG = TextOverlay.class.getName();
|
private final static String TAG = TextRenderLayer.class.getName();
|
||||||
private final static float MIN_CAPTION_DIST = 5;
|
private final static float MIN_CAPTION_DIST = 5;
|
||||||
private final static float MIN_WAY_DIST = 3;
|
private final static float MIN_WAY_DIST = 3;
|
||||||
|
|
||||||
@ -198,7 +197,7 @@ public class TextOverlay extends BasicOverlay {
|
|||||||
private int mRelabelCnt;
|
private int mRelabelCnt;
|
||||||
private final TileRenderLayer mTileLayer;
|
private final TileRenderLayer mTileLayer;
|
||||||
|
|
||||||
public TextOverlay(MapView mapView, TileRenderLayer baseLayer) {
|
public TextRenderLayer(MapView mapView, TileRenderLayer baseLayer) {
|
||||||
super(mapView);
|
super(mapView);
|
||||||
|
|
||||||
mMapViewPosition = mapView.getMapViewPosition();
|
mMapViewPosition = mapView.getMapViewPosition();
|
||||||
@ -659,29 +658,19 @@ public class TextOverlay extends BasicOverlay {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void addDebugLayers(Layers dbg) {
|
private static void addDebugLayers(Layers dbg) {
|
||||||
|
int alpha = 0xaaffffff;
|
||||||
|
|
||||||
dbg.clear();
|
dbg.clear();
|
||||||
LineLayer ll = dbg.getLineLayer(0);
|
dbg.addLineLayer(0, new Line((Color.BLUE & alpha), 2));
|
||||||
ll.line = new Line((Color.BLUE & 0xaaffffff), 1, Cap.BUTT);
|
dbg.addLineLayer(1, new Line((Color.RED & alpha), 2));
|
||||||
ll.width = 2;
|
dbg.addLineLayer(3, new Line((Color.YELLOW & alpha), 2));
|
||||||
ll = dbg.getLineLayer(3);
|
dbg.addLineLayer(2, new Line((Color.GREEN & alpha), 2));
|
||||||
ll.line = new Line((Color.YELLOW & 0xaaffffff), 1, Cap.BUTT);
|
dbg.addLineLayer(4, new Line((Color.CYAN & alpha), 2));
|
||||||
ll.width = 2;
|
dbg.addLineLayer(5, new Line((Color.MAGENTA & alpha), 2));
|
||||||
ll = dbg.getLineLayer(1);
|
|
||||||
ll.line = new Line((Color.RED & 0xaaffffff), 1, Cap.BUTT);
|
|
||||||
ll.width = 2;
|
|
||||||
ll = dbg.getLineLayer(2);
|
|
||||||
ll.line = new Line((Color.GREEN & 0xaaffffff), 1, Cap.BUTT);
|
|
||||||
ll.width = 2;
|
|
||||||
ll = dbg.getLineLayer(4);
|
|
||||||
ll.line = new Line((Color.CYAN & 0xaaffffff), 1, Cap.BUTT);
|
|
||||||
ll.width = 2;
|
|
||||||
ll = dbg.getLineLayer(5);
|
|
||||||
ll.line = new Line((Color.MAGENTA & 0xaaffffff), 1, Cap.BUTT);
|
|
||||||
ll.width = 2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized void update(MapPosition curPos, boolean positionChanged,
|
public synchronized void update(MapPosition pos, boolean changed,
|
||||||
Matrices matrices) {
|
Matrices matrices) {
|
||||||
|
|
||||||
if (mNextLayer != null) {
|
if (mNextLayer != null) {
|
||||||
@ -707,7 +696,7 @@ public class TextOverlay extends BasicOverlay {
|
|||||||
|
|
||||||
this.newData = true;
|
this.newData = true;
|
||||||
|
|
||||||
if (!positionChanged)
|
if (!changed)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
package org.oscim.renderer.overlays;
|
package org.oscim.renderer.layers.test;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
@ -6,21 +6,22 @@ import org.oscim.core.MapPosition;
|
|||||||
import org.oscim.graphics.Color;
|
import org.oscim.graphics.Color;
|
||||||
import org.oscim.graphics.Paint.Cap;
|
import org.oscim.graphics.Paint.Cap;
|
||||||
import org.oscim.renderer.GLRenderer.Matrices;
|
import org.oscim.renderer.GLRenderer.Matrices;
|
||||||
import org.oscim.renderer.layer.LineLayer;
|
import org.oscim.renderer.layers.BasicRenderLayer;
|
||||||
import org.oscim.renderer.layer.TextItem;
|
import org.oscim.renderer.sublayers.LineLayer;
|
||||||
import org.oscim.renderer.layer.TextLayer;
|
import org.oscim.renderer.sublayers.TextItem;
|
||||||
import org.oscim.renderer.layer.TextureAtlas;
|
import org.oscim.renderer.sublayers.TextLayer;
|
||||||
import org.oscim.renderer.layer.TextureAtlas.Rect;
|
import org.oscim.renderer.sublayers.TextureAtlas;
|
||||||
import org.oscim.renderer.layer.TextureAtlas.Slot;
|
import org.oscim.renderer.sublayers.TextureAtlas.Rect;
|
||||||
|
import org.oscim.renderer.sublayers.TextureAtlas.Slot;
|
||||||
import org.oscim.theme.renderinstruction.Line;
|
import org.oscim.theme.renderinstruction.Line;
|
||||||
import org.oscim.theme.renderinstruction.Text;
|
import org.oscim.theme.renderinstruction.Text;
|
||||||
import org.oscim.view.MapView;
|
import org.oscim.view.MapView;
|
||||||
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
public class AtlasTest extends BasicOverlay {
|
public class AtlasRenderLayer extends BasicRenderLayer {
|
||||||
|
|
||||||
public AtlasTest(MapView mapView) {
|
public AtlasRenderLayer(MapView mapView) {
|
||||||
super(mapView);
|
super(mapView);
|
||||||
|
|
||||||
TextureAtlas mAtlas = TextureAtlas.create(2048, 2048, 1);
|
TextureAtlas mAtlas = TextureAtlas.create(2048, 2048, 1);
|
144
src/org/oscim/renderer/layers/test/ModelRenderLayer.java
Normal file
144
src/org/oscim/renderer/layers/test/ModelRenderLayer.java
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
/*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.oscim.renderer.layers.test;
|
||||||
|
|
||||||
|
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
import java.nio.ByteOrder;
|
||||||
|
import java.nio.FloatBuffer;
|
||||||
|
|
||||||
|
import org.oscim.core.MapPosition;
|
||||||
|
import org.oscim.renderer.GLRenderer.Matrices;
|
||||||
|
import org.oscim.renderer.RenderLayer;
|
||||||
|
import org.oscim.view.MapView;
|
||||||
|
public class ModelRenderLayer extends RenderLayer{
|
||||||
|
|
||||||
|
public ModelRenderLayer(MapView mapView) {
|
||||||
|
super(mapView);
|
||||||
|
// TODO Auto-generated constructor stub
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update(MapPosition pos, boolean changed, Matrices m) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void compile() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void render(MapPosition pos, Matrices m) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// based on edu.spsu.logo.SimpleRenderer (c) Jeff Chastine
|
||||||
|
private FloatBuffer vertexBuffer; // A buffer to hold the geometry/vertices
|
||||||
|
private FloatBuffer normalBuffer; // A buffer to hold the normals of each vertex
|
||||||
|
private FloatBuffer texCoordBuffer; // A buffer to hold the texture coordinates for each vertex
|
||||||
|
//private FloatBuffer lightBuffer; // A buffer to hold the position of a light
|
||||||
|
|
||||||
|
private void initShapes() {
|
||||||
|
|
||||||
|
float sin30 = (float)Math.sin(Math.PI/6.0);
|
||||||
|
float cos30 = (float)Math.cos(Math.PI/6.0);
|
||||||
|
|
||||||
|
float hexagonCoords[] = {
|
||||||
|
0.0f, 0.0f, 0.0f, // Hexagon face of SPSU logo
|
||||||
|
cos30, sin30, 0.0f,
|
||||||
|
0.0f, 1.0f, 0.0f,
|
||||||
|
-cos30, sin30, 0.0f,
|
||||||
|
-cos30, -sin30, 0.0f,
|
||||||
|
0.0f, -1.0f, 0.0f,
|
||||||
|
cos30, -sin30, 0.0f,
|
||||||
|
cos30, sin30, 0.0f
|
||||||
|
};
|
||||||
|
|
||||||
|
float hexagonNormals[] = {
|
||||||
|
0.0f, 0.0f, 1.0f, // Normals for each vertex
|
||||||
|
0.0f, 0.0f, 1.0f,
|
||||||
|
0.0f, 0.0f, 1.0f,
|
||||||
|
0.0f, 0.0f, 1.0f,
|
||||||
|
0.0f, 0.0f, 1.0f,
|
||||||
|
0.0f, 0.0f, 1.0f,
|
||||||
|
0.0f, 0.0f, 1.0f,
|
||||||
|
0.0f, 0.0f, 1.0f
|
||||||
|
};
|
||||||
|
|
||||||
|
float hexagonTexCoords[] = {
|
||||||
|
0.5f, 0.5f, // Texture coordinates for each vertex
|
||||||
|
-cos30/2.0f+0.5f, -sin30/2.0f+0.5f,
|
||||||
|
0.5f, 0.0f,
|
||||||
|
cos30/2.0f+0.5f, -sin30/2.0f+0.5f,
|
||||||
|
cos30/2.0f+0.5f, sin30/2.0f+0.5f,
|
||||||
|
0.5f, 1.0f,
|
||||||
|
-cos30/2.0f+0.5f, sin30/2.0f+0.5f,
|
||||||
|
-cos30/2.0f+0.5f, -sin30/2.0f+0.5f,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Load all of that info into 3 buffers
|
||||||
|
ByteBuffer vbb = ByteBuffer.allocateDirect(hexagonCoords.length*4);
|
||||||
|
vbb.order (ByteOrder.nativeOrder());
|
||||||
|
vertexBuffer = vbb.asFloatBuffer(); // make a buffer from a buffer
|
||||||
|
vertexBuffer.put(hexagonCoords); // add the coords to the float buffer
|
||||||
|
vertexBuffer.position(0); // set the reading pointer back to 0
|
||||||
|
|
||||||
|
ByteBuffer vbb2 = ByteBuffer.allocateDirect(hexagonNormals.length*4);
|
||||||
|
vbb2.order (ByteOrder.nativeOrder());
|
||||||
|
normalBuffer = vbb2.asFloatBuffer(); // make a buffer from a buffer
|
||||||
|
normalBuffer.put(hexagonNormals); // add the coords to the float buffer
|
||||||
|
normalBuffer.position(0); // set the reading pointer back to 0
|
||||||
|
|
||||||
|
ByteBuffer vbb3 = ByteBuffer.allocateDirect(hexagonTexCoords.length*4);
|
||||||
|
vbb3.order (ByteOrder.nativeOrder());
|
||||||
|
texCoordBuffer = vbb3.asFloatBuffer(); // make a buffer from a buffer
|
||||||
|
texCoordBuffer.put(hexagonTexCoords); // add the coords to the float buffer
|
||||||
|
texCoordBuffer.position(0); // set the reading pointer back to 0
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private final static String vertexShader = ""
|
||||||
|
+ "uniform mat4 uMVPMatrix;"
|
||||||
|
+ "uniform vec4 uLightPos;"
|
||||||
|
+ "attribute vec4 vPosition;"
|
||||||
|
+ "attribute vec4 vNormal;"
|
||||||
|
+ "attribute vec2 aTextureCoord;"
|
||||||
|
+ "varying vec2 vTextureCoord;"
|
||||||
|
+ "varying vec4 color;"
|
||||||
|
+
|
||||||
|
|
||||||
|
"void main() {"
|
||||||
|
//" vec4 normal = vNormal*uMVPMatrix;" +
|
||||||
|
+ " vec3 light = normalize (uLightPos.xyz);"
|
||||||
|
+ " vec3 normal = normalize (vNormal.xyz);"
|
||||||
|
+ " vTextureCoord = aTextureCoord;"
|
||||||
|
+ " color = vec4 (0.6, 0.8, 0.1, 1.0)*max(0.2, dot(normal, light));"
|
||||||
|
+ " gl_Position = uMVPMatrix * vPosition;"
|
||||||
|
+ "}";
|
||||||
|
|
||||||
|
private final static String fragmentShader = ""
|
||||||
|
+ "precision mediump float;"
|
||||||
|
+ "varying vec4 color;"
|
||||||
|
+ "varying vec2 vTextureCoord;"
|
||||||
|
+ "uniform sampler2D sTexture;"
|
||||||
|
+ "void main() {"
|
||||||
|
+ " gl_FragColor = color + texture2D(sTexture, vTextureCoord);"
|
||||||
|
+ "}";
|
||||||
|
|
||||||
|
}
|
@ -12,18 +12,15 @@
|
|||||||
* You should have received a copy of the GNU Lesser General Public License along with
|
* You should have received a copy of the GNU Lesser General Public License along with
|
||||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package org.oscim.renderer.overlays;
|
package org.oscim.renderer.layers.test;
|
||||||
|
|
||||||
import org.oscim.core.MapPosition;
|
import org.oscim.core.MapPosition;
|
||||||
import org.oscim.renderer.GLRenderer.Matrices;
|
import org.oscim.renderer.GLRenderer.Matrices;
|
||||||
import org.oscim.renderer.layer.LineTexLayer;
|
import org.oscim.renderer.layers.BasicRenderLayer;
|
||||||
import org.oscim.renderer.layer.TextItem;
|
import org.oscim.renderer.sublayers.TextItem;
|
||||||
import org.oscim.theme.renderinstruction.Line;
|
|
||||||
import org.oscim.view.MapView;
|
import org.oscim.view.MapView;
|
||||||
|
|
||||||
import android.graphics.Color;
|
public class TestRenderLayer extends BasicRenderLayer {
|
||||||
|
|
||||||
public class TestOverlay extends BasicOverlay {
|
|
||||||
|
|
||||||
TextItem labels;
|
TextItem labels;
|
||||||
|
|
||||||
@ -31,40 +28,39 @@ public class TestOverlay extends BasicOverlay {
|
|||||||
|
|
||||||
private boolean first = true;
|
private boolean first = true;
|
||||||
|
|
||||||
public TestOverlay(MapView mapView) {
|
public TestRenderLayer(MapView mapView) {
|
||||||
super(mapView);
|
super(mapView);
|
||||||
|
|
||||||
// draw a rectangle
|
// draw a rectangle
|
||||||
//LineLayer ll = (LineLayer) layers.getLayer(1, Layer.LINE);
|
//LineLayer ll = (LineLayer) layers.getLayer(1, Layer.LINE);
|
||||||
//ll.line = new Line(Color.BLUE, 1.0f, Cap.BUTT);
|
//ll.line = new Line(Color.BLUE, 1.0f, Cap.BUTT);
|
||||||
//ll.width = 2;
|
//ll.width = 2;
|
||||||
float[] points = {
|
// float[] points = {
|
||||||
-100, -100,
|
// -100, -100,
|
||||||
100, -100,
|
// 100, -100,
|
||||||
100, 100,
|
// 100, 100,
|
||||||
-100, 100,
|
// -100, 100,
|
||||||
-100, -100
|
// -100, -100
|
||||||
};
|
// };
|
||||||
//short[] index = { (short) points.length };
|
//short[] index = { (short) points.length };
|
||||||
//ll.addLine(points, index, true);
|
//ll.addLine(points, index, true);
|
||||||
|
|
||||||
|
// LineTexLayer lt = layers.getLineTexLayer(2);
|
||||||
LineTexLayer lt = layers.getLineTexLayer(2);
|
// lt.line = new Line(Color.BLUE, 1.0f, 8);
|
||||||
lt.line = new Line(Color.BLUE, 1.0f, 8);
|
// lt.width = 8;
|
||||||
lt.width = 8;
|
// lt.addLine(points, null);
|
||||||
lt.addLine(points, null);
|
//
|
||||||
|
// float[] points2 = {
|
||||||
float[] points2 = {
|
// -200, -200,
|
||||||
-200, -200,
|
// 200, -200,
|
||||||
200, -200,
|
// 200, 200,
|
||||||
200, 200,
|
// -200, 200,
|
||||||
-200, 200,
|
// -200, -200
|
||||||
-200, -200
|
// };
|
||||||
};
|
// lt = layers.getLineTexLayer(3);
|
||||||
lt = layers.getLineTexLayer(3);
|
// lt.line = new Line(Color.BLUE, 1.0f, 16);
|
||||||
lt.line = new Line(Color.BLUE, 1.0f, 16);
|
// lt.width = 8;
|
||||||
lt.width = 8;
|
// lt.addLine(points2, null);
|
||||||
lt.addLine(points2, null);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// PolygonLayer pl = (PolygonLayer) layers.getLayer(0, Layer.POLYGON);
|
// PolygonLayer pl = (PolygonLayer) layers.getLayer(0, Layer.POLYGON);
|
@ -1,148 +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 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package org.oscim.renderer.overlays;
|
|
||||||
|
|
||||||
import org.oscim.core.MapPosition;
|
|
||||||
import org.oscim.core.Tile;
|
|
||||||
import org.oscim.graphics.Color;
|
|
||||||
import org.oscim.graphics.Paint.Cap;
|
|
||||||
import org.oscim.renderer.GLRenderer.Matrices;
|
|
||||||
import org.oscim.renderer.layer.LineLayer;
|
|
||||||
import org.oscim.renderer.layer.TextItem;
|
|
||||||
import org.oscim.renderer.layer.TextLayer;
|
|
||||||
import org.oscim.theme.renderinstruction.Line;
|
|
||||||
import org.oscim.theme.renderinstruction.Text;
|
|
||||||
import org.oscim.view.MapView;
|
|
||||||
|
|
||||||
|
|
||||||
public class GridOverlay extends BasicOverlay {
|
|
||||||
|
|
||||||
private final float[] mPoints;
|
|
||||||
private final short[] mIndex;
|
|
||||||
private final Text mText;
|
|
||||||
private final TextLayer mTextLayer;
|
|
||||||
private final LineLayer mLineLayer;
|
|
||||||
|
|
||||||
public GridOverlay(MapView mapView) {
|
|
||||||
super(mapView);
|
|
||||||
|
|
||||||
int size = Tile.SIZE;
|
|
||||||
float[] points = new float[64];
|
|
||||||
short[] index = new short[16];
|
|
||||||
|
|
||||||
float pos = -size * 4;
|
|
||||||
|
|
||||||
// vertical lines
|
|
||||||
for (int i = 0; i < 8; i++) {
|
|
||||||
index[i] = 4;
|
|
||||||
// x1,y1,x2,y2
|
|
||||||
points[i * 4] = pos + i * size;
|
|
||||||
points[i * 4 + 1] = pos + 0;
|
|
||||||
points[i * 4 + 2] = pos + i * size;
|
|
||||||
points[i * 4 + 3] = pos + size * 8;
|
|
||||||
}
|
|
||||||
|
|
||||||
// horizontal lines
|
|
||||||
for (int j = 8; j < 16; j++) {
|
|
||||||
index[j] = 4;
|
|
||||||
points[j * 4] = pos + 0;
|
|
||||||
points[j * 4 + 1] = pos + (j - 8) * size;
|
|
||||||
points[j * 4 + 2] = pos + size * 8;
|
|
||||||
points[j * 4 + 3] = pos + (j - 8) * size;
|
|
||||||
}
|
|
||||||
|
|
||||||
mIndex = index;
|
|
||||||
mPoints = points;
|
|
||||||
|
|
||||||
// mText = Text.createText(20, 3, Color.BLACK, Color.RED, false);
|
|
||||||
mText = Text.createText(22, 0, Color.RED, 0, false);
|
|
||||||
// mText = Text.createText(22, 0, Color.RED, 0, true);
|
|
||||||
|
|
||||||
mTextLayer = new TextLayer();
|
|
||||||
layers.textureLayers = mTextLayer;
|
|
||||||
|
|
||||||
LineLayer ll = layers.getLineLayer(0);
|
|
||||||
ll.line = new Line(Color.BLUE, 1.0f, Cap.BUTT);
|
|
||||||
ll.width = 1.5f;
|
|
||||||
mLineLayer = ll;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private void addLabels(int x, int y, int z) {
|
|
||||||
int size = Tile.SIZE;
|
|
||||||
|
|
||||||
TextLayer tl = mTextLayer;
|
|
||||||
|
|
||||||
for (int i = -2; i < 2; i++) {
|
|
||||||
for (int j = -2; j < 2; j++) {
|
|
||||||
TextItem ti = TextItem.pool.get();
|
|
||||||
ti.set(size * j + size / 2, size * i + size / 2,
|
|
||||||
(x + j) + " / " + (y + i) + " / " + z, mText);
|
|
||||||
|
|
||||||
// TextItem ti = new TextItem(size * j + size / 2, size * i +
|
|
||||||
// size / 2,
|
|
||||||
// (x + j) + " / " + (y + i) + " / " + z, mText);
|
|
||||||
|
|
||||||
// rotation, TODO could also be used for slide range
|
|
||||||
ti.x1 = 0;
|
|
||||||
ti.y1 = 1; // (short) (size / 2);
|
|
||||||
ti.x2 = 1; // (short) size;
|
|
||||||
ti.y2 = 1; // (short) (size / 2);
|
|
||||||
tl.addText(ti);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tl.prepare();
|
|
||||||
tl.clearLabels();
|
|
||||||
}
|
|
||||||
|
|
||||||
private int mCurX = -1;
|
|
||||||
private int mCurY = -1;
|
|
||||||
private int mCurZ = -1;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public synchronized void update(MapPosition curPos, boolean changed, Matrices m) {
|
|
||||||
|
|
||||||
int z = 1 << curPos.zoomLevel;
|
|
||||||
int x = (int) (curPos.x * z);
|
|
||||||
int y = (int) (curPos.y * z);
|
|
||||||
|
|
||||||
// update layers when map moved by at least one tile
|
|
||||||
if (x != mCurX || y != mCurY || z != mCurZ) {
|
|
||||||
|
|
||||||
MapPosition pos = mMapPosition;
|
|
||||||
|
|
||||||
pos.copy(curPos);
|
|
||||||
pos.x = (double) x / z;
|
|
||||||
pos.y = (double) y / z;
|
|
||||||
pos.scale = z;
|
|
||||||
|
|
||||||
mCurX = x;
|
|
||||||
mCurY = y;
|
|
||||||
mCurZ = z;
|
|
||||||
|
|
||||||
mTextLayer.clear();
|
|
||||||
mLineLayer.clear();
|
|
||||||
|
|
||||||
addLabels(x, y, curPos.zoomLevel);
|
|
||||||
|
|
||||||
LineLayer ll = mLineLayer;
|
|
||||||
ll.verticesCnt = 0;
|
|
||||||
ll.addLine(mPoints, mIndex, false);
|
|
||||||
|
|
||||||
newData = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU Lesser General Public License along with
|
* You should have received a copy of the GNU Lesser General Public License along with
|
||||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package org.oscim.renderer.layer;
|
package org.oscim.renderer.sublayers;
|
||||||
|
|
||||||
import java.nio.ShortBuffer;
|
import java.nio.ShortBuffer;
|
||||||
|
|
@ -13,7 +13,7 @@
|
|||||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.oscim.renderer.layer;
|
package org.oscim.renderer.sublayers;
|
||||||
|
|
||||||
import org.oscim.renderer.GLRenderer;
|
import org.oscim.renderer.GLRenderer;
|
||||||
import org.oscim.renderer.GLRenderer.Matrices;
|
import org.oscim.renderer.GLRenderer.Matrices;
|
||||||
@ -22,11 +22,11 @@ import org.oscim.utils.GlUtils;
|
|||||||
|
|
||||||
import android.opengl.GLES20;
|
import android.opengl.GLES20;
|
||||||
|
|
||||||
/**
|
// TODO merge with TextureRenderer
|
||||||
* @author Hannes Janetzek
|
|
||||||
*/
|
|
||||||
public final class BitmapRenderer {
|
public final class BitmapRenderer {
|
||||||
private final static String TAG = BitmapRenderer.class.getName();
|
|
||||||
|
//private final static String TAG = BitmapRenderer.class.getName();
|
||||||
public final static boolean debug = true;
|
public final static boolean debug = true;
|
||||||
|
|
||||||
private static int mTextureProgram;
|
private static int mTextureProgram;
|
@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU Lesser General Public License along with
|
* You should have received a copy of the GNU Lesser General Public License along with
|
||||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package org.oscim.renderer.layer;
|
package org.oscim.renderer.sublayers;
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.ByteOrder;
|
import java.nio.ByteOrder;
|
@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU Lesser General Public License along with
|
* You should have received a copy of the GNU Lesser General Public License along with
|
||||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package org.oscim.renderer.layer;
|
package org.oscim.renderer.sublayers;
|
||||||
|
|
||||||
import java.nio.ShortBuffer;
|
import java.nio.ShortBuffer;
|
||||||
|
|
@ -12,11 +12,12 @@
|
|||||||
* You should have received a copy of the GNU Lesser General Public License along with
|
* You should have received a copy of the GNU Lesser General Public License along with
|
||||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package org.oscim.renderer.layer;
|
package org.oscim.renderer.sublayers;
|
||||||
|
|
||||||
import java.nio.ShortBuffer;
|
import java.nio.ShortBuffer;
|
||||||
|
|
||||||
import org.oscim.renderer.BufferObject;
|
import org.oscim.renderer.BufferObject;
|
||||||
|
import org.oscim.theme.renderinstruction.Line;
|
||||||
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
@ -62,11 +63,25 @@ public class Layers {
|
|||||||
|
|
||||||
private Layer mCurLayer;
|
private Layer mCurLayer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* add the LineLayer for a level with a given Line style. Levels are
|
||||||
|
* ordered from bottom (0) to top
|
||||||
|
*/
|
||||||
|
public LineLayer addLineLayer(int level, Line style) {
|
||||||
|
LineLayer ll = (LineLayer) getLayer(level, Layer.LINE);
|
||||||
|
if (ll == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
ll.width = style.width;
|
||||||
|
ll.line = style;
|
||||||
|
|
||||||
|
return ll;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get or add the LineLayer for a level. Levels are ordered from
|
* Get or add the LineLayer for a level. Levels are ordered from
|
||||||
* bottom (0) to top
|
* bottom (0) to top
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public LineLayer getLineLayer(int level) {
|
public LineLayer getLineLayer(int level) {
|
||||||
return (LineLayer) getLayer(level, Layer.LINE);
|
return (LineLayer) getLayer(level, Layer.LINE);
|
||||||
}
|
}
|
||||||
@ -87,6 +102,12 @@ public class Layers {
|
|||||||
return (LineTexLayer) getLayer(level, Layer.TEXLINE);
|
return (LineTexLayer) getLayer(level, Layer.TEXLINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public TextLayer addTextLayer(TextLayer textLayer) {
|
||||||
|
textLayer.next = textureLayers;
|
||||||
|
textureLayers = textLayer;
|
||||||
|
return textLayer;
|
||||||
|
}
|
||||||
|
|
||||||
private Layer getLayer(int level, byte type) {
|
private Layer getLayer(int level, byte type) {
|
||||||
Layer l = baseLayers;
|
Layer l = baseLayers;
|
||||||
Layer layer = null;
|
Layer layer = null;
|
||||||
@ -294,4 +315,5 @@ public class Layers {
|
|||||||
// vbo = null;
|
// vbo = null;
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU Lesser General License along with
|
* You should have received a copy of the GNU Lesser General License along with
|
||||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package org.oscim.renderer.layer;
|
package org.oscim.renderer.sublayers;
|
||||||
|
|
||||||
import java.nio.ShortBuffer;
|
import java.nio.ShortBuffer;
|
||||||
|
|
@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU Lesser General License along with
|
* You should have received a copy of the GNU Lesser General License along with
|
||||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package org.oscim.renderer.layer;
|
package org.oscim.renderer.sublayers;
|
||||||
|
|
||||||
import static android.opengl.GLES20.GL_SHORT;
|
import static android.opengl.GLES20.GL_SHORT;
|
||||||
import static android.opengl.GLES20.GL_TRIANGLE_STRIP;
|
import static android.opengl.GLES20.GL_TRIANGLE_STRIP;
|
||||||
@ -288,8 +288,9 @@ public final class LineRenderer {
|
|||||||
+ " 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);"
|
||||||
// interpolate alpha between: 0.0 < 1.0 - len < u_wscale
|
// interpolate alpha between: 0.0 < 1.0 - len < u_wscale
|
||||||
// where wscale is 'filter width' / 'line width' and 0 <= len <= sqrt(2)
|
// where wscale is 'filter width' / 'line width' and 0 <= len <= sqrt(2)
|
||||||
+ " gl_FragColor = u_color * smoothstep(0.0, u_wscale, 1.0 - len);"
|
//+ " gl_FragColor = u_color * smoothstep(0.0, u_wscale, 1.0 - len);"
|
||||||
//+ " gl_FragColor = u_color * min(1.0, (1.0 - len) / u_wscale);"
|
//+ " gl_FragColor = mix(vec4(1.0,0.0,0.0,1.0), u_color, smoothstep(0.0, u_wscale, 1.0 - len));"
|
||||||
|
+ " gl_FragColor = u_color * min(1.0, (1.0 - len) / u_wscale);"
|
||||||
+ "}";
|
+ "}";
|
||||||
|
|
||||||
private final static String lineFragmentShader = ""
|
private final static String lineFragmentShader = ""
|
||||||
@ -318,6 +319,7 @@ public final class LineRenderer {
|
|||||||
//+ " gl_FragColor = u_color * min(1.0, (1.0 - len) / (u_wscale + fuzz));"
|
//+ " gl_FragColor = u_color * min(1.0, (1.0 - len) / (u_wscale + fuzz));"
|
||||||
// can be faster according to nvidia docs 'Optimize OpenGL ES 2.0 Performace'
|
// can be faster according to nvidia docs 'Optimize OpenGL ES 2.0 Performace'
|
||||||
+ " gl_FragColor = u_color * clamp((1.0 - len) / (u_wscale + fuzz), 0.0, 1.0);"
|
+ " gl_FragColor = u_color * clamp((1.0 - len) / (u_wscale + fuzz), 0.0, 1.0);"
|
||||||
|
//+ " gl_FragColor = mix(vec4(0.0,1.0,0.0,1.0), u_color, clamp((1.0 - len) / (u_wscale + fuzz), 0.0, 1.0));"
|
||||||
+ "}";
|
+ "}";
|
||||||
|
|
||||||
// private final static String lineVertexShader = ""
|
// private final static String lineVertexShader = ""
|
@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU Lesser General Public License along with
|
* You should have received a copy of the GNU Lesser General Public License along with
|
||||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package org.oscim.renderer.layer;
|
package org.oscim.renderer.sublayers;
|
||||||
|
|
||||||
import java.nio.ShortBuffer;
|
import java.nio.ShortBuffer;
|
||||||
|
|
@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU Lesser General Public License along with
|
* You should have received a copy of the GNU Lesser General Public License along with
|
||||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package org.oscim.renderer.layer;
|
package org.oscim.renderer.sublayers;
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.ByteOrder;
|
import java.nio.ByteOrder;
|
40
src/org/oscim/renderer/sublayers/MeshLayer.java
Normal file
40
src/org/oscim/renderer/sublayers/MeshLayer.java
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.oscim.renderer.sublayers;
|
||||||
|
|
||||||
|
import java.nio.ShortBuffer;
|
||||||
|
|
||||||
|
import org.oscim.core.GeometryBuffer;
|
||||||
|
|
||||||
|
public class MeshLayer extends Layer {
|
||||||
|
|
||||||
|
public void addMesh(GeometryBuffer geom){
|
||||||
|
|
||||||
|
for (int i = 0, n = geom.points.length; i < n; i++){
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void compile(ShortBuffer sbuf) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void clear() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
19
src/org/oscim/renderer/sublayers/MeshRenderer.java
Normal file
19
src/org/oscim/renderer/sublayers/MeshRenderer.java
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.oscim.renderer.sublayers;
|
||||||
|
|
||||||
|
public class MeshRenderer {
|
||||||
|
|
||||||
|
}
|
@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU Lesser General License along with
|
* You should have received a copy of the GNU Lesser General License along with
|
||||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package org.oscim.renderer.layer;
|
package org.oscim.renderer.sublayers;
|
||||||
|
|
||||||
import java.nio.ShortBuffer;
|
import java.nio.ShortBuffer;
|
||||||
|
|
@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU Lesser General License along with
|
* You should have received a copy of the GNU Lesser General License along with
|
||||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package org.oscim.renderer.layer;
|
package org.oscim.renderer.sublayers;
|
||||||
|
|
||||||
import static android.opengl.GLES20.GL_ALWAYS;
|
import static android.opengl.GLES20.GL_ALWAYS;
|
||||||
import static android.opengl.GLES20.GL_EQUAL;
|
import static android.opengl.GLES20.GL_EQUAL;
|
@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU Lesser General Public License along with
|
* You should have received a copy of the GNU Lesser General Public License along with
|
||||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package org.oscim.renderer.layer;
|
package org.oscim.renderer.sublayers;
|
||||||
|
|
||||||
import org.oscim.utils.pool.Inlist;
|
import org.oscim.utils.pool.Inlist;
|
||||||
import org.oscim.utils.pool.SyncPool;
|
import org.oscim.utils.pool.SyncPool;
|
@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU Lesser General Public License along with
|
* You should have received a copy of the GNU Lesser General Public License along with
|
||||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package org.oscim.renderer.layer;
|
package org.oscim.renderer.sublayers;
|
||||||
|
|
||||||
|
|
||||||
import android.graphics.Canvas;
|
import android.graphics.Canvas;
|
@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU Lesser General Public License along with
|
* You should have received a copy of the GNU Lesser General Public License along with
|
||||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package org.oscim.renderer.layer;
|
package org.oscim.renderer.sublayers;
|
||||||
|
|
||||||
import org.oscim.theme.renderinstruction.Text;
|
import org.oscim.theme.renderinstruction.Text;
|
||||||
import org.oscim.utils.pool.Inlist;
|
import org.oscim.utils.pool.Inlist;
|
||||||
@ -75,6 +75,10 @@ public class TextItem extends Inlist<TextItem> {
|
|||||||
this.y = y;
|
this.y = y;
|
||||||
this.string = string;
|
this.string = string;
|
||||||
this.text = text;
|
this.text = text;
|
||||||
|
this.x1 = 0;
|
||||||
|
this.y1 = 0;
|
||||||
|
this.x2 = 1;
|
||||||
|
this.y2 = 0;
|
||||||
this.width = text.paint.measureText(string);
|
this.width = text.paint.measureText(string);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
@ -12,12 +12,13 @@
|
|||||||
* You should have received a copy of the GNU Lesser General Public License along with
|
* You should have received a copy of the GNU Lesser General Public License along with
|
||||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package org.oscim.renderer.layer;
|
package org.oscim.renderer.sublayers;
|
||||||
|
|
||||||
import static org.oscim.renderer.GLRenderer.COORD_SCALE;
|
import static org.oscim.renderer.GLRenderer.COORD_SCALE;
|
||||||
import static org.oscim.renderer.layer.TextureItem.TEXTURE_HEIGHT;
|
import static org.oscim.renderer.sublayers.TextureItem.TEXTURE_HEIGHT;
|
||||||
import static org.oscim.renderer.layer.TextureItem.TEXTURE_WIDTH;
|
import static org.oscim.renderer.sublayers.TextureItem.TEXTURE_WIDTH;
|
||||||
import android.graphics.Canvas;
|
import android.graphics.Canvas;
|
||||||
|
|
||||||
public final class TextLayer extends TextureLayer {
|
public final class TextLayer extends TextureLayer {
|
||||||
|
|
||||||
//private static String TAG = TextureLayer.class.getName();
|
//private static String TAG = TextureLayer.class.getName();
|
||||||
@ -244,7 +245,8 @@ public final class TextLayer extends TextureLayer {
|
|||||||
numIndices += TextureRenderer.INDICES_PER_SPRITE;
|
numIndices += TextureRenderer.INDICES_PER_SPRITE;
|
||||||
verticesCnt += 4;
|
verticesCnt += 4;
|
||||||
|
|
||||||
if (it.next == null || (it.next.text != it.text) || (it.next.string != it.string)) {
|
if (it.next == null || (it.next.text != it.text)
|
||||||
|
|| (it.next.string != it.string)) {
|
||||||
it = it.next;
|
it = it.next;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
@ -57,7 +57,7 @@
|
|||||||
*
|
*
|
||||||
* ============================================================================
|
* ============================================================================
|
||||||
*/
|
*/
|
||||||
package org.oscim.renderer.layer;
|
package org.oscim.renderer.sublayers;
|
||||||
|
|
||||||
import org.oscim.utils.pool.Inlist;
|
import org.oscim.utils.pool.Inlist;
|
||||||
|
|
@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU Lesser General Public License along with
|
* You should have received a copy of the GNU Lesser General Public License along with
|
||||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package org.oscim.renderer.layer;
|
package org.oscim.renderer.sublayers;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU Lesser General Public License along with
|
* You should have received a copy of the GNU Lesser General Public License along with
|
||||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package org.oscim.renderer.layer;
|
package org.oscim.renderer.sublayers;
|
||||||
|
|
||||||
import java.nio.ShortBuffer;
|
import java.nio.ShortBuffer;
|
||||||
|
|
@ -13,11 +13,11 @@
|
|||||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.oscim.renderer.layer;
|
package org.oscim.renderer.sublayers;
|
||||||
|
|
||||||
import static org.oscim.renderer.GLRenderer.COORD_SCALE;
|
import static org.oscim.renderer.GLRenderer.COORD_SCALE;
|
||||||
import static org.oscim.renderer.layer.TextureItem.TEXTURE_HEIGHT;
|
import static org.oscim.renderer.sublayers.TextureItem.TEXTURE_HEIGHT;
|
||||||
import static org.oscim.renderer.layer.TextureItem.TEXTURE_WIDTH;
|
import static org.oscim.renderer.sublayers.TextureItem.TEXTURE_WIDTH;
|
||||||
|
|
||||||
import org.oscim.renderer.GLRenderer;
|
import org.oscim.renderer.GLRenderer;
|
||||||
import org.oscim.renderer.GLRenderer.Matrices;
|
import org.oscim.renderer.GLRenderer.Matrices;
|
||||||
@ -26,9 +26,6 @@ import org.oscim.utils.GlUtils;
|
|||||||
|
|
||||||
import android.opengl.GLES20;
|
import android.opengl.GLES20;
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Hannes Janetzek
|
|
||||||
*/
|
|
||||||
public final class TextureRenderer {
|
public final class TextureRenderer {
|
||||||
//private final static String TAG = TextureRenderer.class.getName();
|
//private final static String TAG = TextureRenderer.class.getName();
|
||||||
public final static boolean debug = false;
|
public final static boolean debug = false;
|
@ -12,7 +12,7 @@
|
|||||||
* You should have received a copy of the GNU Lesser General Public License along with
|
* You should have received a copy of the GNU Lesser General Public License along with
|
||||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package org.oscim.renderer.layer;
|
package org.oscim.renderer.sublayers;
|
||||||
|
|
||||||
import org.oscim.utils.pool.Inlist;
|
import org.oscim.utils.pool.Inlist;
|
||||||
import org.oscim.utils.pool.SyncPool;
|
import org.oscim.utils.pool.SyncPool;
|
||||||
@ -34,6 +34,16 @@ public class VertexItem extends Inlist<VertexItem> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add VertexItems back to pool. Make sure to not use the reference afterwards!
|
||||||
|
* i.e.:
|
||||||
|
* vertexItem.release();
|
||||||
|
* vertexItem = null;
|
||||||
|
* */
|
||||||
|
public void release(){
|
||||||
|
VertexItem.pool.releaseAll(this);
|
||||||
|
}
|
||||||
|
|
||||||
public final short[] vertices = new short[SIZE];
|
public final short[] vertices = new short[SIZE];
|
||||||
|
|
||||||
public int used;
|
public int used;
|
@ -201,46 +201,16 @@ public final class Line extends RenderInstruction {
|
|||||||
this.min = min;
|
this.min = min;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Line(int stroke, float width, Cap cap) {
|
public Line(int stroke, float width) {
|
||||||
this.level = 0;
|
this(0, "", stroke, width, Cap.BUTT, true, 0, 0, 0, -1, 0, false, 0);
|
||||||
this.blur = 0;
|
|
||||||
this.cap = cap;
|
|
||||||
this.outline = false;
|
|
||||||
this.style = "";
|
|
||||||
this.width = width;
|
|
||||||
this.fixed = true;
|
|
||||||
this.fade = -1;
|
|
||||||
this.stipple = 0;
|
|
||||||
this.stippleColor = Color.BLACK;
|
|
||||||
this.stippleWidth = 0;
|
|
||||||
this.min = 0;
|
|
||||||
this.color = stroke; //GlUtils.colorToFloatP(stroke);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Line(int stroke, float width, int stipple) {
|
public Line(int stroke, float width, Cap cap) {
|
||||||
this.level = 0;
|
this(0, "", stroke, width, cap, true, 0, 0, 0, -1, 0, false, 0);
|
||||||
this.blur = 0;
|
|
||||||
this.cap = Cap.BUTT;
|
|
||||||
this.outline = false;
|
|
||||||
this.style = "";
|
|
||||||
this.width = width;
|
|
||||||
this.fixed = true;
|
|
||||||
this.fade = -1;
|
|
||||||
this.stipple = stipple;
|
|
||||||
this.stippleColor = Color.BLACK;
|
|
||||||
this.stippleWidth = 0.6f;
|
|
||||||
this.min = 0;
|
|
||||||
color = stroke; //GlUtils.colorToFloatP(stroke);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void renderWay(IRenderCallback renderCallback) {
|
public void renderWay(IRenderCallback renderCallback) {
|
||||||
renderCallback.renderWay(this, level);
|
renderCallback.renderWay(this, level);
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Override
|
|
||||||
// public void scaleStrokeWidth(float scaleFactor) {
|
|
||||||
// paint.setStrokeWidth(strokeWidth * scaleFactor);
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user