refactor: rename render 'layers' to 'buckets'

- the name I was looking for for a long time :)
  also less confusion with map layers
- move renderer.elements -> renderer.bucket
- rename RenderBuckets functions
- rename BucketRenderer.layers -> buckets
This commit is contained in:
Hannes Janetzek 2014-09-04 20:14:57 +02:00
parent b4a567884f
commit f6d85ce8bd
64 changed files with 595 additions and 593 deletions

@ -25,7 +25,7 @@ import java.nio.IntBuffer;
import javax.imageio.ImageIO;
import org.oscim.backend.canvas.Bitmap;
import org.oscim.renderer.elements.TextureLayer;
import org.oscim.renderer.bucket.TextureBucket;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
@ -77,10 +77,10 @@ public class AwtBitmap implements Bitmap {
public void eraseColor(int transparent) {
}
private final static IntBuffer tmpBuffer = BufferUtils.newIntBuffer(TextureLayer.TEXTURE_HEIGHT
* TextureLayer.TEXTURE_WIDTH);
private final static int[] tmpPixel = new int[TextureLayer.TEXTURE_HEIGHT
* TextureLayer.TEXTURE_WIDTH];
private final static IntBuffer tmpBuffer = BufferUtils.newIntBuffer(TextureBucket.TEXTURE_HEIGHT
* TextureBucket.TEXTURE_WIDTH);
private final static int[] tmpPixel = new int[TextureBucket.TEXTURE_HEIGHT
* TextureBucket.TEXTURE_WIDTH];
private final static boolean WRITE_TEX = false;
private int dbgCnt;
@ -90,7 +90,7 @@ public class AwtBitmap implements Bitmap {
int[] pixels;
IntBuffer buffer;
if (width * height < TextureLayer.TEXTURE_HEIGHT * TextureLayer.TEXTURE_WIDTH) {
if (width * height < TextureBucket.TEXTURE_HEIGHT * TextureBucket.TEXTURE_WIDTH) {
pixels = tmpPixel;
buffer = tmpBuffer;
buffer.clear();

@ -13,8 +13,8 @@ import org.jeo.map.RuleList;
import org.jeo.map.Style;
import org.oscim.jeo.JeoUtils;
import org.oscim.map.Map;
import org.oscim.renderer.elements.LineLayer;
import org.oscim.renderer.elements.MeshLayer;
import org.oscim.renderer.bucket.LineBucket;
import org.oscim.renderer.bucket.MeshBucket;
import org.oscim.theme.styles.AreaStyle;
import org.oscim.theme.styles.LineStyle;
import org.slf4j.Logger;
@ -113,7 +113,7 @@ public class JeoVectorLayer extends JtsLayer {
return;
}
LineLayer ll = t.layers.getLineLayer(2);
LineBucket ll = t.buckets.getLineBucket(2);
if (ll.line == null) {
RGB color = rule.color(f, CartoCSS.LINE_COLOR, RGB.black);
float width = rule.number(f, CartoCSS.LINE_WIDTH, 1.2f);
@ -126,7 +126,7 @@ public class JeoVectorLayer extends JtsLayer {
protected void addPolygon(Task t, Feature f, Rule rule, Geometry g) {
LineLayer ll = t.layers.getLineLayer(1);
LineBucket ll = t.buckets.getLineBucket(1);
if (ll.line == null) {
float width = rule.number(f, CartoCSS.LINE_WIDTH, 1.2f);
@ -135,7 +135,7 @@ public class JeoVectorLayer extends JtsLayer {
ll.setDropDistance(0.5f);
}
MeshLayer mesh = t.layers.getMeshLayer(0);
MeshBucket mesh = t.buckets.getMeshBucket(0);
if (mesh.area == null) {
int color = JeoUtils.color(rule.color(f, CartoCSS.POLYGON_FILL, RGB.red));
mesh.area = new AreaStyle(color);

@ -8,8 +8,8 @@ import org.oscim.core.MercatorProjection;
import org.oscim.core.Tile;
import org.oscim.layers.vector.AbstractVectorLayer;
import org.oscim.map.Map;
import org.oscim.renderer.elements.LineLayer;
import org.oscim.renderer.elements.MeshLayer;
import org.oscim.renderer.bucket.LineBucket;
import org.oscim.renderer.bucket.MeshBucket;
import org.oscim.utils.geom.SimplifyDP;
import org.oscim.utils.geom.SimplifyVW;
@ -69,7 +69,7 @@ public abstract class JtsLayer extends AbstractVectorLayer<Geometry> {
SimplifyDP mSimpDP = new SimplifyDP();
SimplifyVW mSimpVW = new SimplifyVW();
protected void addPolygon(Task t, Geometry g, MeshLayer ml, LineLayer ll) {
protected void addPolygon(Task t, Geometry g, MeshBucket ml, LineBucket ll) {
mGeom.clear();
mGeom.startPolygon();
@ -90,7 +90,7 @@ public abstract class JtsLayer extends AbstractVectorLayer<Geometry> {
ml.addMesh(mGeom);
}
protected void addLine(Task t, Geometry g, LineLayer ll) {
protected void addLine(Task t, Geometry g, LineBucket ll) {
mGeom.clear();
mGeom.startLine();

@ -11,10 +11,10 @@ import org.jeo.map.Style;
import org.oscim.backend.canvas.Color;
import org.oscim.jeo.JeoUtils;
import org.oscim.map.Map;
import org.oscim.renderer.elements.LineLayer;
import org.oscim.renderer.elements.MeshLayer;
import org.oscim.renderer.elements.TextItem;
import org.oscim.renderer.elements.TextLayer;
import org.oscim.renderer.bucket.LineBucket;
import org.oscim.renderer.bucket.MeshBucket;
import org.oscim.renderer.bucket.TextBucket;
import org.oscim.renderer.bucket.TextItem;
import org.oscim.theme.styles.AreaStyle;
import org.oscim.theme.styles.LineStyle;
import org.oscim.theme.styles.TextStyle;
@ -26,7 +26,7 @@ import com.vividsolutions.jts.geom.LineString;
public class OSMIndoorLayer extends JeoVectorLayer {
protected TextLayer mTextLayer;
protected TextBucket mTextLayer;
protected TextStyle mText = new TextBuilder()
.setFontSize(16).setColor(Color.BLACK)
.setStrokeWidth(2.2f).setStroke(Color.WHITE)
@ -40,7 +40,9 @@ public class OSMIndoorLayer extends JeoVectorLayer {
@Override
protected void processFeatures(Task t, Envelope b) {
mTextLayer = t.layers.addTextLayer(new TextLayer());
mTextLayer = new TextBucket();
t.buckets.set(mTextLayer);
super.processFeatures(t, b);
@ -58,7 +60,7 @@ public class OSMIndoorLayer extends JeoVectorLayer {
int level = getLevel(f);
LineLayer ll = t.layers.getLineLayer(level * 3 + 2);
LineBucket ll = t.buckets.getLineBucket(level * 3 + 2);
if (ll.line == null) {
RGB color = rule.color(f, CartoCSS.LINE_COLOR, RGB.black);
float width = rule.number(f, CartoCSS.LINE_WIDTH, 1.2f);
@ -73,7 +75,7 @@ public class OSMIndoorLayer extends JeoVectorLayer {
protected void addPolygon(Task t, Feature f, Rule rule, Geometry g) {
int level = getLevel(f);
LineLayer ll = t.layers.getLineLayer(level * 3 + 1);
LineBucket ll = t.buckets.getLineBucket(level * 3 + 1);
boolean active = activeLevels[level + 1];
@ -89,7 +91,7 @@ public class OSMIndoorLayer extends JeoVectorLayer {
ll.setDropDistance(0);
}
MeshLayer mesh = t.layers.getMeshLayer(level * 3);
MeshBucket mesh = t.buckets.getMeshBucket(level * 3);
if (mesh.area == null) {
int color = JeoUtils.color(rule.color(f, CartoCSS.POLYGON_FILL, RGB.red));
if (level > -2 && !active)

@ -6,12 +6,12 @@ import org.oscim.core.GeometryBuffer;
import org.oscim.gdx.GdxMap;
import org.oscim.gdx.GdxMapApp;
import org.oscim.layers.GenericLayer;
import org.oscim.renderer.ElementRenderer;
import org.oscim.renderer.BucketRenderer;
import org.oscim.renderer.GLViewport;
import org.oscim.renderer.MapRenderer;
import org.oscim.renderer.elements.HairLineLayer;
import org.oscim.renderer.elements.LineLayer;
import org.oscim.renderer.elements.PolygonLayer;
import org.oscim.renderer.bucket.HairLineBucket;
import org.oscim.renderer.bucket.LineBucket;
import org.oscim.renderer.bucket.PolygonBucket;
import org.oscim.theme.styles.AreaStyle;
import org.oscim.theme.styles.LineStyle;
import org.oscim.theme.styles.LineStyle.LineBuilder;
@ -31,24 +31,24 @@ public class HairLineTest extends GdxMap {
return in;
}
static class Renderer extends ElementRenderer {
static class Renderer extends BucketRenderer {
boolean init;
LineBuilder l = new LineStyle.LineBuilder()
.color(Color.WHITE)
.width(1.5f)
.cap(Cap.ROUND);
HairLineLayer ll = layers.addHairLineLayer(1, l.build());
HairLineBucket ll = buckets.addHairLineBucket(1, l.build());
//LineLayer ll = layers.addLineLayer(1, new LineStyle(Color.fade(Color.CYAN, 0.6f), 2.5f));
LineStyle style = new LineStyle(Color.fade(Color.MAGENTA, 0.6f), 2.5f);
HairLineLayer l1 = layers.addHairLineLayer(2, style);
HairLineBucket l1 = buckets.addHairLineBucket(2, style);
//style = new LineStyle(Color.fade(Color.LTGRAY, 0.8f), 1.5f);
LineLayer l2 = layers.addLineLayer(3, style);
LineBucket l2 = buckets.addLineBucket(3, style);
PolygonLayer pl = layers.addPolygonLayer(4, new AreaStyle.AreaBuilder()
PolygonBucket pl = buckets.addPolygonBucket(4, new AreaStyle.AreaBuilder()
.color(Color.BLUE)
//.outline(Color.CYAN, 1)
.build());

@ -6,11 +6,11 @@ import org.oscim.core.GeometryBuffer;
import org.oscim.gdx.GdxMap;
import org.oscim.gdx.GdxMapApp;
import org.oscim.layers.GenericLayer;
import org.oscim.renderer.ElementRenderer;
import org.oscim.renderer.BucketRenderer;
import org.oscim.renderer.GLViewport;
import org.oscim.renderer.MapRenderer;
import org.oscim.renderer.elements.LineLayer;
import org.oscim.renderer.elements.LineTexLayer;
import org.oscim.renderer.bucket.LineBucket;
import org.oscim.renderer.bucket.LineTexBucket;
import org.oscim.theme.styles.LineStyle;
import com.badlogic.gdx.Input;
@ -75,10 +75,10 @@ public class LineRenderTest extends GdxMap {
LineStyle outline2 = new LineStyle(0, null, Color.RED, 2.0f, Cap.ROUND, false, 0,
0, 0, 0, 0, true);
LineLayer ol = l.layers.addLineLayer(0, outline);
LineLayer ol2 = l.layers.addLineLayer(5, outline2);
LineBucket ol = l.buckets.addLineBucket(0, outline);
LineBucket ol2 = l.buckets.addLineBucket(5, outline2);
LineLayer ll = l.layers.addLineLayer(10, line1);
LineBucket ll = l.buckets.addLineBucket(10, line1);
ll.addLine(g.translate(0, -20));
ll.addLine(g.translate(0, 10.5f));
addCircle(-200, -200, 100, ll);
@ -86,7 +86,7 @@ public class LineRenderTest extends GdxMap {
if (addOutline)
ol.addOutline(ll);
ll = l.layers.addLineLayer(20, line2);
ll = l.buckets.addLineBucket(20, line2);
ll.addLine(g.translate(0, 10.5f));
ll.addLine(g.translate(0, 10.5f));
addCircle(200, -200, 100, ll);
@ -94,7 +94,7 @@ public class LineRenderTest extends GdxMap {
if (addOutline)
ol.addOutline(ll);
LineTexLayer lt = l.layers.getLineTexLayer(30);
LineTexBucket lt = l.buckets.getLineTexBucket(30);
lt.line = line3;
lt.addLine(g.translate(0, 10.5f));
lt.addLine(g.translate(0, 10.5f));
@ -103,7 +103,7 @@ public class LineRenderTest extends GdxMap {
// if (addOutline)
// ol2.addOutline(ll);
ll = l.layers.addLineLayer(40, line4);
ll = l.buckets.addLineBucket(40, line4);
ll.addLine(g.translate(0, 10.5f));
ll.addLine(g.translate(0, 10.5f));
addCircle(-200, 200, 100, ll);
@ -112,7 +112,7 @@ public class LineRenderTest extends GdxMap {
ol2.addOutline(ll);
}
void addCircle(float cx, float cy, float radius, LineLayer ll) {
void addCircle(float cx, float cy, float radius, LineBucket ll) {
GeometryBuffer g = mGeom;
g.clear();
@ -128,7 +128,7 @@ public class LineRenderTest extends GdxMap {
}
}
void addCircle(float cx, float cy, float radius, LineTexLayer ll) {
void addCircle(float cx, float cy, float radius, LineTexBucket ll) {
GeometryBuffer g = mGeom;
g.clear();
@ -173,14 +173,14 @@ public class LineRenderTest extends GdxMap {
return true;
}
class LineTest extends ElementRenderer {
class LineTest extends BucketRenderer {
public LineTest() {
mMapPosition.scale = 0;
}
public synchronized void clear() {
layers.clear();
buckets.clear();
setReady(false);
}

@ -5,10 +5,10 @@ import org.oscim.core.GeometryBuffer;
import org.oscim.gdx.GdxMap;
import org.oscim.gdx.GdxMapApp;
import org.oscim.layers.GenericLayer;
import org.oscim.renderer.ElementRenderer;
import org.oscim.renderer.BucketRenderer;
import org.oscim.renderer.GLViewport;
import org.oscim.renderer.MapRenderer;
import org.oscim.renderer.elements.LineLayer;
import org.oscim.renderer.bucket.LineBucket;
import org.oscim.theme.styles.LineStyle;
import com.badlogic.gdx.Gdx;
@ -38,10 +38,10 @@ public class LineTest extends GdxMap {
@Override
protected void createLayers() {
mMap.layers().add(new GenericLayer(mMap, new ElementRenderer() {
mMap.layers().add(new GenericLayer(mMap, new BucketRenderer() {
boolean init;
LineLayer ll = layers.addLineLayer(0,
LineBucket ll = buckets.addLineBucket(0,
new LineStyle(Color.fade(Color.CYAN, 0.5f), 1.5f));
GeometryBuffer g = new GeometryBuffer(10, 1);
@ -79,8 +79,8 @@ public class LineTest extends GdxMap {
// compile();
}
layers.clear();
layers.setBaseLayers(ll);
buckets.clear();
buckets.setBaseBuckets(ll);
g.clear();
for (int i = 0; i < 60; i++) {
g.startLine();

@ -20,8 +20,8 @@ import org.oscim.backend.CanvasAdapter;
import org.oscim.backend.canvas.Canvas;
import org.oscim.renderer.atlas.TextureAtlas;
import org.oscim.renderer.atlas.TextureAtlas.Rect;
import org.oscim.renderer.elements.TextureItem;
import org.oscim.renderer.elements.TextureItem.TexturePool;
import org.oscim.renderer.bucket.TextureItem;
import org.oscim.renderer.bucket.TextureItem.TexturePool;
import org.oscim.utils.pool.Inlist;
/**

@ -16,8 +16,8 @@ import org.oscim.layers.tile.TileSet;
import org.oscim.layers.tile.vector.VectorTileLayer;
import org.oscim.layers.tile.vector.VectorTileLayer.TileLoaderProcessHook;
import org.oscim.map.Map;
import org.oscim.renderer.elements.ElementLayers;
import org.oscim.renderer.elements.SymbolItem;
import org.oscim.renderer.bucket.RenderBuckets;
import org.oscim.renderer.bucket.SymbolItem;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -59,7 +59,7 @@ public class Poi3DLayer extends Layer implements Map.UpdateListener {
tileLayer.addHook(new TileLoaderProcessHook() {
@Override
public boolean process(MapTile tile, ElementLayers layers, MapElement element) {
public boolean process(MapTile tile, RenderBuckets buckets, MapElement element) {
if (!element.tags.contains(TREE_TAG))
return false;

@ -7,14 +7,14 @@ import org.oscim.backend.canvas.Paint.Cap;
import org.oscim.gdx.GdxMap;
import org.oscim.gdx.GdxMapApp;
import org.oscim.layers.GenericLayer;
import org.oscim.renderer.ElementRenderer;
import org.oscim.renderer.BucketRenderer;
import org.oscim.renderer.GLViewport;
import org.oscim.renderer.atlas.TextureAtlas;
import org.oscim.renderer.atlas.TextureAtlas.Rect;
import org.oscim.renderer.atlas.TextureAtlas.Slot;
import org.oscim.renderer.elements.LineLayer;
import org.oscim.renderer.elements.TextItem;
import org.oscim.renderer.elements.TextLayer;
import org.oscim.renderer.bucket.LineBucket;
import org.oscim.renderer.bucket.TextBucket;
import org.oscim.renderer.bucket.TextItem;
import org.oscim.theme.styles.LineStyle;
import org.oscim.theme.styles.TextStyle;
import org.oscim.theme.styles.TextStyle.TextBuilder;
@ -34,7 +34,7 @@ public class AtlasTest extends GdxMap {
GdxMapApp.run(new AtlasTest(), null, 400);
}
static class AtlasRenderLayer extends ElementRenderer {
static class AtlasRenderLayer extends BucketRenderer {
Logger log = LoggerFactory.getLogger(AtlasRenderLayer.class);
@ -42,21 +42,21 @@ public class AtlasTest extends GdxMap {
TextureAtlas mAtlas = TextureAtlas.create(2048, 2048, 1);
LineLayer ll = layers.getLineLayer(0);
LineBucket ll = buckets.getLineBucket(0);
ll.line = new LineStyle(Color.BLUE, 3, Cap.BUTT);
ll.scale = 1f;
LineLayer ll2 = layers.getLineLayer(1);
LineBucket ll2 = buckets.getLineBucket(1);
ll2.line = new LineStyle(Color.RED, 3, Cap.BUTT);
ll2.scale = 1f;
LineLayer ll3 = layers.getLineLayer(2);
LineBucket ll3 = buckets.getLineBucket(2);
ll3.line = new LineStyle(Color.GREEN, 3, Cap.BUTT);
ll3.scale = 1f;
TextLayer tl = new TextLayer();
TextBucket tl = new TextBucket();
TextStyle t = new TextBuilder().setFontSize(20).setColor(Color.BLACK).build();
layers.setTextureLayers(tl);
buckets.setTextureBuckets(tl);
float[] points = new float[10];

@ -8,9 +8,9 @@ import org.oscim.core.Point;
import org.oscim.gdx.GdxMap;
import org.oscim.gdx.GdxMapApp;
import org.oscim.layers.GenericLayer;
import org.oscim.renderer.ElementRenderer;
import org.oscim.renderer.BucketRenderer;
import org.oscim.renderer.GLViewport;
import org.oscim.renderer.elements.LineLayer;
import org.oscim.renderer.bucket.LineBucket;
import org.oscim.theme.styles.LineStyle;
import org.oscim.utils.geom.BezierPath;
@ -26,7 +26,7 @@ public class BezierTest extends GdxMap {
GdxMapApp.run(new BezierTest(), null, 400);
}
static class BezierPathLayer extends ElementRenderer {
static class BezierPathLayer extends BucketRenderer {
public BezierPathLayer() {
mMapPosition.scale = 0;
@ -42,7 +42,7 @@ public class BezierTest extends GdxMap {
// System.out.println(pts[i]);
g.addPoint(pts[i]);
}
LineLayer ll = layers.addLineLayer(0, new LineStyle(Color.BLUE, 2f));
LineBucket ll = buckets.addLineBucket(0, new LineStyle(Color.BLUE, 2f));
ll.addLine(g);
List<Point> ctrl = BezierPath.cubicSplineControlPoints(pts, 0.1f);
@ -64,13 +64,13 @@ public class BezierTest extends GdxMap {
}
p0 = p3;
}
ll = layers.addLineLayer(1, new LineStyle(Color.CYAN, 2f));
ll = buckets.addLineBucket(1, new LineStyle(Color.CYAN, 2f));
ll.addLine(g);
}
public synchronized void clear() {
layers.clear();
buckets.clear();
setReady(false);
}

@ -8,7 +8,7 @@ import org.oscim.gdx.GdxMap;
import org.oscim.gdx.GdxMapApp;
import org.oscim.layers.GenericLayer;
import org.oscim.renderer.BufferObject;
import org.oscim.renderer.ElementRenderer;
import org.oscim.renderer.BucketRenderer;
import org.oscim.renderer.GLShader;
import org.oscim.renderer.GLState;
import org.oscim.renderer.GLUtils;
@ -35,7 +35,7 @@ public class HexagonRenderTest extends GdxMap {
* based on chapter 2 from:
* https://github.com/dalinaum/opengl-es-book-samples/tree/master/Android */
static class HexagonRenderer extends ElementRenderer {
static class HexagonRenderer extends BucketRenderer {
private int mProgramObject;
private int hVertexPosition;

@ -17,17 +17,17 @@
package org.oscim.test.renderer;
import org.oscim.backend.CanvasAdapter;
import org.oscim.renderer.ElementRenderer;
import org.oscim.renderer.BucketRenderer;
import org.oscim.renderer.GLViewport;
import org.oscim.renderer.elements.SymbolItem;
import org.oscim.renderer.elements.SymbolLayer;
import org.oscim.renderer.bucket.SymbolBucket;
import org.oscim.renderer.bucket.SymbolItem;
public class SymbolRenderLayer extends ElementRenderer {
public class SymbolRenderLayer extends BucketRenderer {
boolean initialize = true;
public SymbolRenderLayer() {
SymbolLayer l = new SymbolLayer();
layers.setTextureLayers(l);
SymbolBucket l = new SymbolBucket();
buckets.setTextureBuckets(l);
SymbolItem it = SymbolItem.pool.get();
it.billboard = false;

@ -1,7 +1,7 @@
package org.oscim.utils;
import org.oscim.core.GeometryBuffer;
import org.oscim.renderer.elements.VertexData;
import org.oscim.renderer.bucket.VertexData;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@ -28,10 +28,10 @@ import org.oscim.core.MapPosition;
import org.oscim.core.MercatorProjection;
import org.oscim.core.Tile;
import org.oscim.map.Map;
import org.oscim.renderer.ElementRenderer;
import org.oscim.renderer.BucketRenderer;
import org.oscim.renderer.GLViewport;
import org.oscim.renderer.elements.ElementLayers;
import org.oscim.renderer.elements.LineLayer;
import org.oscim.renderer.bucket.LineBucket;
import org.oscim.renderer.bucket.RenderBuckets;
import org.oscim.theme.styles.LineStyle;
import org.oscim.utils.FastMath;
import org.oscim.utils.async.SimpleWorker;
@ -188,11 +188,11 @@ public class PathLayer extends Layer {
/***
* everything below runs on GL- and Worker-Thread
***/
final class RenderPath extends ElementRenderer {
final class RenderPath extends BucketRenderer {
public RenderPath() {
layers.addLineLayer(0, mLineStyle);
buckets.addLineBucket(0, mLineStyle);
}
private int mCurX = -1;
@ -221,13 +221,13 @@ public class PathLayer extends Layer {
mMapPosition.copy(t.pos);
// compile new layers
layers.setBaseLayers(t.layer.getBaseLayers());
buckets.setBaseBuckets(t.bucket.getBaseBuckets());
compile();
}
}
final static class Task {
ElementLayers layer = new ElementLayers();
RenderBuckets bucket = new RenderBuckets();
MapPosition pos = new MapPosition();
}
@ -294,16 +294,16 @@ public class PathLayer extends Layer {
}
if (size == 0) {
if (task.layer.getBaseLayers() != null) {
task.layer.clear();
if (task.bucket.getBaseBuckets() != null) {
task.bucket.clear();
mMap.render();
}
return true;
}
ElementLayers layers = task.layer;
RenderBuckets layers = task.bucket;
LineLayer ll = layers.getLineLayer(0);
LineBucket ll = layers.getLineBucket(0);
ll.line = mLineStyle;
ll.scale = ll.line.width;
@ -398,7 +398,7 @@ public class PathLayer extends Layer {
@Override
public void cleanup(Task task) {
task.layer.clear();
task.bucket.clear();
}
private int addPoint(float[] points, int i, int x, int y) {

@ -22,18 +22,18 @@ import java.util.Comparator;
import org.oscim.core.MercatorProjection;
import org.oscim.core.Point;
import org.oscim.core.Tile;
import org.oscim.renderer.ElementRenderer;
import org.oscim.renderer.BucketRenderer;
import org.oscim.renderer.GLViewport;
import org.oscim.renderer.elements.SymbolItem;
import org.oscim.renderer.elements.SymbolLayer;
import org.oscim.renderer.bucket.SymbolBucket;
import org.oscim.renderer.bucket.SymbolItem;
import org.oscim.utils.TimSort;
import org.oscim.utils.geom.GeometryUtils;
public class MarkerRenderer extends ElementRenderer {
public class MarkerRenderer extends BucketRenderer {
protected final MarkerSymbol mDefaultMarker;
private final SymbolLayer mSymbolLayer;
private final SymbolBucket mSymbolLayer;
private final float[] mBox = new float[8];
private final MarkerLayer<MarkerItem> mMarkerLayer;
private final Point mMapPoint = new Point();
@ -61,7 +61,7 @@ public class MarkerRenderer extends ElementRenderer {
}
public MarkerRenderer(MarkerLayer<MarkerItem> markerLayer, MarkerSymbol defaultSymbol) {
mSymbolLayer = new SymbolLayer();
mSymbolLayer = new SymbolBucket();
mMarkerLayer = markerLayer;
mDefaultMarker = defaultSymbol;
}
@ -86,8 +86,8 @@ public class MarkerRenderer extends ElementRenderer {
long flip = (long) (Tile.SIZE * v.pos.scale) >> 1;
if (mItems == null) {
if (layers.getTextureLayers() != null) {
layers.clear();
if (buckets.getTextureBuckets() != null) {
buckets.clear();
compile();
}
return;
@ -131,7 +131,7 @@ public class MarkerRenderer extends ElementRenderer {
* or more than 10 of the current items became invisible */
//if ((numVisible == 0) && (changedVisible == 0 && changesInvisible < 10))
// return;
layers.clear();
buckets.clear();
if (numVisible == 0) {
compile();
@ -162,8 +162,8 @@ public class MarkerRenderer extends ElementRenderer {
mSymbolLayer.pushSymbol(s);
}
layers.setTextureLayers(mSymbolLayer);
layers.prepare();
buckets.setTextureBuckets(mSymbolLayer);
buckets.prepare();
compile();
}

@ -23,7 +23,7 @@ import static org.oscim.layers.tile.MapTile.State.READY;
import org.oscim.core.Tile;
import org.oscim.layers.tile.vector.VectorTileLoader;
import org.oscim.layers.tile.vector.labeling.LabelTileLoaderHook;
import org.oscim.renderer.elements.ElementLayers;
import org.oscim.renderer.bucket.RenderBuckets;
import org.oscim.utils.pool.Inlist;
import org.oscim.utils.quadtree.TileIndex;
import org.oscim.utils.quadtree.TreeNode;
@ -266,11 +266,11 @@ public class MapTile extends Tile {
* Get the default ElementLayers which are added
* by {@link VectorTileLoader}
*/
public ElementLayers getLayers() {
if (!(data instanceof ElementLayers))
public RenderBuckets getLayers() {
if (!(data instanceof RenderBuckets))
return null;
return (ElementLayers) data;
return (RenderBuckets) data;
}
public TileData getData(Object id) {

@ -26,7 +26,7 @@ import org.oscim.renderer.BufferObject;
import org.oscim.renderer.GLViewport;
import org.oscim.renderer.LayerRenderer;
import org.oscim.renderer.MapRenderer;
import org.oscim.renderer.elements.ElementLayers;
import org.oscim.renderer.bucket.RenderBuckets;
import org.oscim.utils.ScanBox;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -175,7 +175,7 @@ public abstract class TileRenderer extends LayerRenderer {
private static int uploadTileData(MapTile tile) {
tile.state = READY;
ElementLayers layers = tile.getLayers();
RenderBuckets layers = tile.getLayers();
/* tile might only contain label layers */
if (layers == null)

@ -5,12 +5,12 @@ import static org.oscim.layers.tile.MapTile.PROXY_GRAMPA;
import static org.oscim.layers.tile.MapTile.PROXY_PARENT;
import static org.oscim.layers.tile.MapTile.State.READY;
import static org.oscim.renderer.MapRenderer.COORD_SCALE;
import static org.oscim.renderer.elements.RenderElement.BITMAP;
import static org.oscim.renderer.elements.RenderElement.HAIRLINE;
import static org.oscim.renderer.elements.RenderElement.LINE;
import static org.oscim.renderer.elements.RenderElement.MESH;
import static org.oscim.renderer.elements.RenderElement.POLYGON;
import static org.oscim.renderer.elements.RenderElement.TEXLINE;
import static org.oscim.renderer.bucket.RenderBucket.BITMAP;
import static org.oscim.renderer.bucket.RenderBucket.HAIRLINE;
import static org.oscim.renderer.bucket.RenderBucket.LINE;
import static org.oscim.renderer.bucket.RenderBucket.MESH;
import static org.oscim.renderer.bucket.RenderBucket.POLYGON;
import static org.oscim.renderer.bucket.RenderBucket.TEXLINE;
import org.oscim.backend.GL20;
import org.oscim.backend.canvas.Color;
@ -19,14 +19,14 @@ import org.oscim.core.Tile;
import org.oscim.renderer.GLMatrix;
import org.oscim.renderer.GLViewport;
import org.oscim.renderer.MapRenderer;
import org.oscim.renderer.elements.BitmapLayer;
import org.oscim.renderer.elements.ElementLayers;
import org.oscim.renderer.elements.HairLineLayer;
import org.oscim.renderer.elements.LineLayer;
import org.oscim.renderer.elements.LineTexLayer;
import org.oscim.renderer.elements.MeshLayer;
import org.oscim.renderer.elements.PolygonLayer;
import org.oscim.renderer.elements.RenderElement;
import org.oscim.renderer.bucket.BitmapBucket;
import org.oscim.renderer.bucket.HairLineBucket;
import org.oscim.renderer.bucket.LineBucket;
import org.oscim.renderer.bucket.LineTexBucket;
import org.oscim.renderer.bucket.MeshBucket;
import org.oscim.renderer.bucket.PolygonBucket;
import org.oscim.renderer.bucket.RenderBucket;
import org.oscim.renderer.bucket.RenderBuckets;
import org.oscim.utils.FastMath;
public class VectorTileRenderer extends TileRenderer {
@ -55,7 +55,7 @@ public class VectorTileRenderer extends TileRenderer {
mClipProj.setValue(14, 0);
mClipProj.multiplyRhs(v.view);
mClipMode = PolygonLayer.CLIP_STENCIL;
mClipMode = PolygonBucket.CLIP_STENCIL;
int tileCnt = mDrawTiles.cnt + mProxyTileCnt;
@ -77,7 +77,7 @@ public class VectorTileRenderer extends TileRenderer {
* draw where tiles were already drawn */
GL.glDepthFunc(GL20.GL_ALWAYS);
mClipMode = PolygonLayer.CLIP_DEPTH;
mClipMode = PolygonBucket.CLIP_DEPTH;
drawProxies = true;
break;
@ -150,11 +150,11 @@ public class VectorTileRenderer extends TileRenderer {
tile.lastDraw = mDrawSerial;
/* use holder proxy when it is set */
ElementLayers layers = (tile.holder == null)
RenderBuckets buckets = (tile.holder == null)
? tile.getLayers()
: tile.holder.getLayers();
if (layers == null || layers.vbo == null)
if (buckets == null || buckets.vbo == null)
return;
MapPosition pos = v.pos;
@ -174,63 +174,63 @@ public class VectorTileRenderer extends TileRenderer {
mClipMVP.setTransScale(x, y, scale / COORD_SCALE);
mClipMVP.multiplyLhs(mClipProj);
layers.bind();
buckets.bind();
RenderElement l = layers.getBaseLayers();
PolygonLayer.Renderer.clip(mClipMVP, mClipMode);
PolygonBucket.Renderer.clip(mClipMVP, mClipMode);
RenderBucket b = buckets.getBaseBuckets();
boolean first = true;
while (l != null) {
if (l.type == POLYGON) {
l = PolygonLayer.Renderer.draw(l, v, div, first);
while (b != null) {
if (b.type == POLYGON) {
b = PolygonBucket.Renderer.draw(b, v, div, first);
first = false;
/* set test for clip to tile region */
GL.glStencilFunc(GL_EQUAL, 0x80, 0x80);
continue;
}
if (l.type == LINE) {
l = LineLayer.Renderer.draw(l, v, scale, layers);
if (b.type == LINE) {
b = LineBucket.Renderer.draw(b, v, scale, buckets);
continue;
}
if (l.type == TEXLINE) {
l = LineTexLayer.Renderer.draw(l, v, div, layers);
if (layers.ibo != null)
layers.ibo.bind();
if (b.type == TEXLINE) {
b = LineTexBucket.Renderer.draw(b, v, div, buckets);
if (buckets.ibo != null)
buckets.ibo.bind();
continue;
}
if (l.type == MESH) {
l = MeshLayer.Renderer.draw(l, v);
if (b.type == MESH) {
b = MeshBucket.Renderer.draw(b, v);
continue;
}
if (l.type == HAIRLINE) {
l = HairLineLayer.Renderer.draw(l, v);
if (b.type == HAIRLINE) {
b = HairLineBucket.Renderer.draw(b, v);
continue;
}
/* just in case */
log.error("unknown layer {}", l.type);
l = l.next;
log.error("unknown layer {}", b.type);
b = b.next;
}
l = layers.getTextureLayers();
while (l != null) {
if (l.type == BITMAP) {
l = BitmapLayer.Renderer.draw(l, v, 1, mLayerAlpha);
b = buckets.getTextureBuckets();
while (b != null) {
if (b.type == BITMAP) {
b = BitmapBucket.Renderer.draw(b, v, 1, mLayerAlpha);
continue;
}
log.error("unknown layer {}", l.type);
l = l.next;
log.error("unknown layer {}", b.type);
b = b.next;
}
if (debugOverdraw) {
if (tile.zoomLevel > pos.zoomLevel)
PolygonLayer.Renderer.drawOver(mClipMVP, Color.BLUE, 0.5f);
PolygonBucket.Renderer.drawOver(mClipMVP, Color.BLUE, 0.5f);
else if (tile.zoomLevel < pos.zoomLevel)
PolygonLayer.Renderer.drawOver(mClipMVP, Color.RED, 0.5f);
PolygonBucket.Renderer.drawOver(mClipMVP, Color.RED, 0.5f);
else
PolygonLayer.Renderer.drawOver(mClipMVP, Color.GREEN, 0.5f);
PolygonBucket.Renderer.drawOver(mClipMVP, Color.GREEN, 0.5f);
return;
}
@ -244,12 +244,12 @@ public class VectorTileRenderer extends TileRenderer {
long dTime = MapRenderer.frametime - tile.fadeTime;
if (mOverdrawColor == 0 || dTime > FADE_TIME) {
PolygonLayer.Renderer.drawOver(mClipMVP, 0, 1);
PolygonBucket.Renderer.drawOver(mClipMVP, 0, 1);
return;
}
float fade = 1 - dTime / FADE_TIME;
PolygonLayer.Renderer.drawOver(mClipMVP, mOverdrawColor, fade * fade);
PolygonBucket.Renderer.drawOver(mClipMVP, mOverdrawColor, fade * fade);
MapRenderer.animate();
}

@ -23,7 +23,7 @@ import org.oscim.layers.tile.TileLoader;
import org.oscim.layers.tile.TileManager;
import org.oscim.layers.tile.VectorTileRenderer;
import org.oscim.map.Map;
import org.oscim.renderer.elements.TextureItem.TexturePool;
import org.oscim.renderer.bucket.TextureItem.TexturePool;
import org.oscim.tiling.TileSource;
import org.oscim.utils.FastMath;
import org.slf4j.Logger;

@ -22,8 +22,8 @@ import org.oscim.backend.canvas.Bitmap;
import org.oscim.core.Tile;
import org.oscim.layers.tile.MapTile;
import org.oscim.layers.tile.TileLoader;
import org.oscim.renderer.elements.BitmapLayer;
import org.oscim.renderer.elements.ElementLayers;
import org.oscim.renderer.bucket.BitmapBucket;
import org.oscim.renderer.bucket.RenderBuckets;
import org.oscim.tiling.ITileDataSource;
import org.oscim.tiling.TileSource;
import org.slf4j.Logger;
@ -58,11 +58,11 @@ public class BitmapTileLoader extends TileLoader {
if (isCanceled() || mTile.state(CANCEL))
return;
BitmapLayer l = new BitmapLayer(false);
BitmapBucket l = new BitmapBucket(false);
l.setBitmap(bitmap, Tile.SIZE, Tile.SIZE, mLayer.pool);
ElementLayers layers = new ElementLayers();
layers.setTextureLayers(l);
RenderBuckets layers = new RenderBuckets();
layers.setTextureBuckets(l);
mTile.data = layers;
}

@ -27,9 +27,9 @@ import org.oscim.map.Map;
import org.oscim.renderer.ExtrusionRenderer;
import org.oscim.renderer.OffscreenRenderer;
import org.oscim.renderer.OffscreenRenderer.Mode;
import org.oscim.renderer.elements.ElementLayers;
import org.oscim.renderer.elements.ExtrusionLayer;
import org.oscim.renderer.elements.ExtrusionLayers;
import org.oscim.renderer.bucket.ExtrusionBucket;
import org.oscim.renderer.bucket.ExtrusionBuckets;
import org.oscim.renderer.bucket.RenderBuckets;
import org.oscim.theme.styles.ExtrusionStyle;
import org.oscim.theme.styles.RenderStyle;
import org.slf4j.Logger;
@ -77,7 +77,7 @@ public class BuildingLayer extends Layer implements TileLoaderThemeHook {
/** TileLoaderThemeHook */
@Override
public boolean render(MapTile tile, ElementLayers layers, MapElement element,
public boolean render(MapTile tile, RenderBuckets buckets, MapElement element,
RenderStyle style, int level) {
if (!(style instanceof ExtrusionStyle))
@ -95,14 +95,14 @@ public class BuildingLayer extends Layer implements TileLoaderThemeHook {
if (v != null)
minHeight = Integer.parseInt(v);
ExtrusionLayers el = get(tile);
ExtrusionBuckets el = get(tile);
if (el.layers == null) {
double lat = MercatorProjection.toLatitude(tile.y);
float groundScale = (float) MercatorProjection
.groundResolution(lat, 1 << tile.zoomLevel);
el.layers = new ExtrusionLayer(0, groundScale, extrusion.colors);
el.layers = new ExtrusionBucket(0, groundScale, extrusion.colors);
}
/* 12m default */
@ -114,10 +114,10 @@ public class BuildingLayer extends Layer implements TileLoaderThemeHook {
return true;
}
public static ExtrusionLayers get(MapTile tile) {
ExtrusionLayers el = (ExtrusionLayers) tile.getData(BUILDING_DATA);
public static ExtrusionBuckets get(MapTile tile) {
ExtrusionBuckets el = (ExtrusionBuckets) tile.getData(BUILDING_DATA);
if (el == null) {
el = new ExtrusionLayers(tile);
el = new ExtrusionBuckets(tile);
tile.addData(BUILDING_DATA, el);
}
return el;

@ -12,8 +12,8 @@ import org.oscim.layers.tile.TileSet;
import org.oscim.renderer.ExtrusionRenderer;
import org.oscim.renderer.GLViewport;
import org.oscim.renderer.MapRenderer;
import org.oscim.renderer.elements.ElementLayers;
import org.oscim.renderer.elements.ExtrusionLayers;
import org.oscim.renderer.bucket.ExtrusionBuckets;
import org.oscim.renderer.bucket.RenderBuckets;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -102,7 +102,7 @@ public class BuildingRenderer extends ExtrusionRenderer {
/* keep a list of tiles available for rendering */
if (mExtrusionLayerSet == null || mExtrusionLayerSet.length < mTileSet.cnt * 4)
mExtrusionLayerSet = new ExtrusionLayers[mTileSet.cnt * 4];
mExtrusionLayerSet = new ExtrusionBuckets[mTileSet.cnt * 4];
/* compile one tile max per frame */
boolean compiled = false;
@ -114,7 +114,7 @@ public class BuildingRenderer extends ExtrusionRenderer {
/* TODO - if tile is not available try parent or children */
for (int i = 0; i < mTileSet.cnt; i++) {
ExtrusionLayers els = getLayer(tiles[i]);
ExtrusionBuckets els = getLayer(tiles[i]);
if (els == null)
continue;
@ -137,7 +137,7 @@ public class BuildingRenderer extends ExtrusionRenderer {
// if (c == t)
// continue O;
ExtrusionLayers els = getLayer(t);
ExtrusionBuckets els = getLayer(t);
if (els == null)
continue;
@ -158,7 +158,7 @@ public class BuildingRenderer extends ExtrusionRenderer {
continue;
MapTile c = t.node.child(j);
ExtrusionLayers el = getLayer(c);
ExtrusionBuckets el = getLayer(c);
if (el == null || !el.compiled)
continue;
@ -192,8 +192,8 @@ public class BuildingRenderer extends ExtrusionRenderer {
mTileLayer.releaseTiles(mTileSet);
}
private static ExtrusionLayers getLayer(MapTile t) {
ElementLayers layers = t.getLayers();
private static ExtrusionBuckets getLayer(MapTile t) {
RenderBuckets layers = t.getLayers();
if (layers != null && !t.state(READY | NEW_DATA))
return null;

@ -11,8 +11,8 @@ import org.oscim.core.Tag;
import org.oscim.layers.tile.MapTile;
import org.oscim.layers.tile.TileLoader;
import org.oscim.layers.tile.TileManager;
import org.oscim.renderer.elements.ExtrusionLayer;
import org.oscim.renderer.elements.ExtrusionLayers;
import org.oscim.renderer.bucket.ExtrusionBucket;
import org.oscim.renderer.bucket.ExtrusionBuckets;
import org.oscim.tiling.ITileDataSource;
import org.oscim.tiling.TileSource;
import org.slf4j.Logger;
@ -24,8 +24,8 @@ class S3DBTileLoader extends TileLoader {
/** current TileDataSource used by this MapTileLoader */
private final ITileDataSource mTileDataSource;
private ExtrusionLayer mLayers;
private ExtrusionLayer mRoofs;
private ExtrusionBucket mLayers;
private ExtrusionBucket mRoofs;
private float mGroundScale;
@ -75,13 +75,13 @@ class S3DBTileLoader extends TileLoader {
mGroundScale = (float) MercatorProjection
.groundResolution(lat, 1 << mTile.zoomLevel);
mRoofs = new ExtrusionLayer(0, mGroundScale, Color.get(247, 249, 250));
mRoofs = new ExtrusionBucket(0, mGroundScale, Color.get(247, 249, 250));
mLayers = new ExtrusionLayer(0, mGroundScale, Color.get(255, 254, 252));
mLayers = new ExtrusionBucket(0, mGroundScale, Color.get(255, 254, 252));
//mRoofs = new ExtrusionLayer(0, mGroundScale, Color.get(207, 209, 210));
mRoofs.next = mLayers;
ExtrusionLayers layers = BuildingLayer.get(tile);
ExtrusionBuckets layers = BuildingLayer.get(tile);
layers.setLayers(mRoofs);
@ -127,13 +127,13 @@ class S3DBTileLoader extends TileLoader {
return;
}
for (ExtrusionLayer l = mLayers; l != null; l = l.next()) {
for (ExtrusionBucket l = mLayers; l != null; l = l.next()) {
if (l.color == c) {
l.add(element);
return;
}
}
ExtrusionLayer l = new ExtrusionLayer(0, mGroundScale, c);
ExtrusionBucket l = new ExtrusionBucket(0, mGroundScale, c);
l.next = mLayers.next;
mLayers.next = l;

@ -26,8 +26,8 @@ import org.oscim.layers.tile.TileLoader;
import org.oscim.layers.tile.TileManager;
import org.oscim.layers.tile.VectorTileRenderer;
import org.oscim.map.Map;
import org.oscim.renderer.elements.ElementLayers;
import org.oscim.renderer.elements.LineLayer;
import org.oscim.renderer.bucket.LineBucket;
import org.oscim.renderer.bucket.RenderBuckets;
import org.oscim.theme.styles.LineStyle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -58,10 +58,10 @@ public class TestTileLayer extends TileLayer {
@Override
public boolean loadTile(MapTile tile) {
log.debug("load tile " + tile);
ElementLayers layers = new ElementLayers();
RenderBuckets layers = new RenderBuckets();
tile.data = layers;
LineLayer ll = layers.getLineLayer(0);
LineBucket ll = layers.getLineBucket(0);
ll.line = mLineStyle;
ll.scale = 2;

@ -23,7 +23,7 @@ import org.oscim.layers.tile.TileLoader;
import org.oscim.layers.tile.TileManager;
import org.oscim.layers.tile.VectorTileRenderer;
import org.oscim.map.Map;
import org.oscim.renderer.elements.ElementLayers;
import org.oscim.renderer.bucket.RenderBuckets;
import org.oscim.theme.IRenderTheme;
import org.oscim.theme.styles.RenderStyle;
import org.oscim.tiling.TileSource;
@ -132,7 +132,7 @@ public class VectorTileLayer extends TileLayer {
* loader threads, so dont keep tile specific state.
*/
public interface TileLoaderProcessHook {
public boolean process(MapTile tile, ElementLayers layers, MapElement element);
public boolean process(MapTile tile, RenderBuckets layers, MapElement element);
/** Called on loader thread when tile loading is completed */
public void complete(MapTile tile, boolean success);
@ -145,7 +145,7 @@ public class VectorTileLayer extends TileLayer {
*/
public interface TileLoaderThemeHook {
/** Called for each RenderStyle found for a MapElement. */
public boolean render(MapTile tile, ElementLayers layers,
public boolean render(MapTile tile, RenderBuckets buckets,
MapElement element, RenderStyle style, int level);
/** Called on loader thread when tile loading is completed */
@ -172,7 +172,7 @@ public class VectorTileLayer extends TileLayer {
mTileSource.close();
}
public void callThemeHooks(MapTile tile, ElementLayers layers, MapElement element,
public void callThemeHooks(MapTile tile, RenderBuckets layers, MapElement element,
RenderStyle style, int level) {
LList<TileLoaderThemeHook> th = mLoaderThemeHooks.head();
@ -184,7 +184,7 @@ public class VectorTileLayer extends TileLayer {
}
}
public boolean callProcessHooks(MapTile tile, ElementLayers layers, MapElement element) {
public boolean callProcessHooks(MapTile tile, RenderBuckets layers, MapElement element) {
LList<TileLoaderProcessHook> ph = mLoaderProcessHooks.head();
while (ph != null) {

@ -26,11 +26,11 @@ import org.oscim.core.TagSet;
import org.oscim.core.Tile;
import org.oscim.layers.tile.MapTile;
import org.oscim.layers.tile.TileLoader;
import org.oscim.renderer.elements.ElementLayers;
import org.oscim.renderer.elements.LineLayer;
import org.oscim.renderer.elements.LineTexLayer;
import org.oscim.renderer.elements.MeshLayer;
import org.oscim.renderer.elements.PolygonLayer;
import org.oscim.renderer.bucket.LineBucket;
import org.oscim.renderer.bucket.LineTexBucket;
import org.oscim.renderer.bucket.MeshBucket;
import org.oscim.renderer.bucket.PolygonBucket;
import org.oscim.renderer.bucket.RenderBuckets;
import org.oscim.theme.IRenderTheme;
import org.oscim.theme.RenderTheme;
import org.oscim.theme.styles.AreaStyle;
@ -63,7 +63,7 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
protected MapElement mElement;
/** current line layer (will be used for outline layers) */
protected LineLayer mCurLineLayer;
protected LineBucket mCurLineLayer;
/** Current layer for adding elements */
protected int mCurLayer;
@ -71,7 +71,7 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
/** Line-scale-factor depending on zoom and latitude */
protected float mLineScale = 1.0f;
protected ElementLayers mLayers;
protected RenderBuckets mLayers;
private final VectorTileLayer mTileLayer;
@ -109,7 +109,7 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
/* scale line width relative to latitude + PI * thumb */
mLineScale *= 0.4f + 0.6f * ((float) Math.sin(Math.abs(lat) * (Math.PI / 180)));
mLayers = new ElementLayers();
mLayers = new RenderBuckets();
tile.data = mLayers;
try {
@ -244,7 +244,7 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
return;
}
LineLayer ll = mLayers.getLineLayer(numLayer);
LineBucket ll = mLayers.getLineBucket(numLayer);
if (ll.line == null) {
ll.line = line;
@ -263,7 +263,7 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
mCurLineLayer = ll;
} else {
LineTexLayer ll = mLayers.getLineTexLayer(numLayer);
LineTexBucket ll = mLayers.getLineTexBucket(numLayer);
if (ll.line == null) {
ll.line = line;
@ -287,11 +287,11 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
public void renderArea(AreaStyle area, int level) {
int numLayer = mCurLayer + level;
if (USE_MESH_POLY) {
MeshLayer l = mLayers.getMeshLayer(numLayer);
MeshBucket l = mLayers.getMeshBucket(numLayer);
l.area = area;
l.addMesh(mElement);
} else {
PolygonLayer l = mLayers.getPolygonLayer(numLayer);
PolygonBucket l = mLayers.getPolygonBucket(numLayer);
l.area = area;
l.addPolygon(mElement.points, mElement.index);
}

@ -19,38 +19,38 @@ package org.oscim.layers.tile.vector.labeling;
import org.oscim.backend.canvas.Color;
import org.oscim.core.MapPosition;
import org.oscim.renderer.GLViewport;
import org.oscim.renderer.elements.ElementLayers;
import org.oscim.renderer.elements.LineLayer;
import org.oscim.renderer.elements.TextItem;
import org.oscim.renderer.bucket.LineBucket;
import org.oscim.renderer.bucket.RenderBuckets;
import org.oscim.renderer.bucket.TextItem;
import org.oscim.theme.styles.LineStyle;
class Debug {
private final static float[] mDebugPoints = new float[8];
// TODO Auto-generated method stub
static ElementLayers dbg;
static RenderBuckets dbg;
static void addDebugBox(Label l, TextItem ti, int overlaps, boolean prev,
float scale) {
LineLayer ll;
LineBucket ll;
if (prev) {
if (overlaps == 1)
ll = dbg.getLineLayer(4);
ll = dbg.getLineBucket(4);
else
ll = dbg.getLineLayer(5);
ll = dbg.getLineBucket(5);
} else {
if (ti.width > ti.length * scale) {
ll = dbg.getLineLayer(1);
ll = dbg.getLineBucket(1);
overlaps = 3;
}
else if (overlaps == 1)
ll = dbg.getLineLayer(0);
ll = dbg.getLineBucket(0);
else if (overlaps == 2)
ll = dbg.getLineLayer(3);
ll = dbg.getLineBucket(3);
else
ll = dbg.getLineLayer(2);
ll = dbg.getLineBucket(2);
}
float[] points = mDebugPoints;
float width = (ti.x2 - ti.x1) / 2f;
@ -67,19 +67,19 @@ class Debug {
}
}
static void addDebugLayers(ElementLayers dbg) {
static void addDebugLayers(RenderBuckets dbg) {
int alpha = 0xaaffffff;
dbg.clear();
dbg.addLineLayer(0, new LineStyle((Color.BLUE & alpha), 2));
dbg.addLineLayer(1, new LineStyle((Color.RED & alpha), 2));
dbg.addLineLayer(3, new LineStyle((Color.YELLOW & alpha), 2));
dbg.addLineLayer(2, new LineStyle((Color.GREEN & alpha), 2));
dbg.addLineLayer(4, new LineStyle((Color.CYAN & alpha), 2));
dbg.addLineLayer(5, new LineStyle((Color.MAGENTA & alpha), 2));
dbg.addLineBucket(0, new LineStyle((Color.BLUE & alpha), 2));
dbg.addLineBucket(1, new LineStyle((Color.RED & alpha), 2));
dbg.addLineBucket(3, new LineStyle((Color.YELLOW & alpha), 2));
dbg.addLineBucket(2, new LineStyle((Color.GREEN & alpha), 2));
dbg.addLineBucket(4, new LineStyle((Color.CYAN & alpha), 2));
dbg.addLineBucket(5, new LineStyle((Color.MAGENTA & alpha), 2));
}
public static void draw(MapPosition pos, GLViewport m, ElementLayers layers) {
public static void draw(MapPosition pos, GLViewport m, RenderBuckets layers) {
// if (layers.baseLayers != null) {
// //setMatrix(pos, m, true);
//

@ -16,7 +16,7 @@
*/
package org.oscim.layers.tile.vector.labeling;
import org.oscim.renderer.elements.TextItem;
import org.oscim.renderer.bucket.TextItem;
import org.oscim.utils.geom.OBB2D;
final class Label extends TextItem {

@ -9,9 +9,9 @@ import org.oscim.layers.tile.MapTile;
import org.oscim.layers.tile.TileRenderer;
import org.oscim.layers.tile.TileSet;
import org.oscim.map.Map;
import org.oscim.renderer.elements.SymbolItem;
import org.oscim.renderer.elements.SymbolLayer;
import org.oscim.renderer.elements.TextItem;
import org.oscim.renderer.bucket.SymbolBucket;
import org.oscim.renderer.bucket.SymbolItem;
import org.oscim.renderer.bucket.TextItem;
import org.oscim.utils.FastMath;
import org.oscim.utils.geom.OBB2D;
@ -322,7 +322,7 @@ public class LabelPlacement {
int maxx = Tile.SIZE << (zoom - 1);
// FIXME ???
SymbolLayer sl = work.symbolLayer;
SymbolBucket sl = work.symbolLayer;
sl.clearItems();
double tileX = (pos.x * (Tile.SIZE << zoom));

@ -1,6 +1,6 @@
package org.oscim.layers.tile.vector.labeling;
import org.oscim.renderer.elements.TextItem;
import org.oscim.renderer.bucket.TextItem;
import org.oscim.utils.pool.Pool;
final class LabelPool extends Pool<TextItem> {

@ -1,23 +1,23 @@
package org.oscim.layers.tile.vector.labeling;
import org.oscim.core.MapPosition;
import org.oscim.renderer.elements.SymbolLayer;
import org.oscim.renderer.elements.TextLayer;
import org.oscim.renderer.elements.TextureLayer;
import org.oscim.renderer.bucket.SymbolBucket;
import org.oscim.renderer.bucket.TextBucket;
import org.oscim.renderer.bucket.TextureBucket;
final class LabelTask {
final TextureLayer layers;
final TextLayer textLayer;
final SymbolLayer symbolLayer;
final TextureBucket layers;
final TextBucket textLayer;
final SymbolBucket symbolLayer;
final MapPosition pos;
LabelTask() {
pos = new MapPosition();
symbolLayer = new SymbolLayer();
textLayer = new TextLayer();
symbolLayer = new SymbolBucket();
textLayer = new TextBucket();
layers = symbolLayer;
symbolLayer.next = textLayer;

@ -1,8 +1,8 @@
package org.oscim.layers.tile.vector.labeling;
import org.oscim.layers.tile.MapTile.TileData;
import org.oscim.renderer.elements.SymbolItem;
import org.oscim.renderer.elements.TextItem;
import org.oscim.renderer.bucket.SymbolItem;
import org.oscim.renderer.bucket.TextItem;
public class LabelTileData extends TileData {
public final List<SymbolItem> symbols = new List<SymbolItem>();

@ -9,9 +9,9 @@ import org.oscim.core.MapElement;
import org.oscim.core.PointF;
import org.oscim.layers.tile.MapTile;
import org.oscim.layers.tile.vector.VectorTileLayer.TileLoaderThemeHook;
import org.oscim.renderer.elements.ElementLayers;
import org.oscim.renderer.elements.SymbolItem;
import org.oscim.renderer.elements.TextItem;
import org.oscim.renderer.bucket.RenderBuckets;
import org.oscim.renderer.bucket.SymbolItem;
import org.oscim.renderer.bucket.TextItem;
import org.oscim.theme.styles.RenderStyle;
import org.oscim.theme.styles.SymbolStyle;
import org.oscim.theme.styles.TextStyle;
@ -31,7 +31,7 @@ public class LabelTileLoaderHook implements TileLoaderThemeHook {
}
@Override
public boolean render(MapTile tile, ElementLayers layers, MapElement element,
public boolean render(MapTile tile, RenderBuckets buckets, MapElement element,
RenderStyle style, int level) {
if (style instanceof TextStyle) {

@ -31,15 +31,15 @@ package org.oscim.layers.tile.vector.labeling;
//
import org.oscim.layers.tile.vector.labeling.LabelLayer.Worker;
import org.oscim.renderer.ElementRenderer;
import org.oscim.renderer.BucketRenderer;
import org.oscim.renderer.GLState;
import org.oscim.renderer.GLViewport;
import org.oscim.renderer.elements.RenderElement;
import org.oscim.renderer.elements.TextureLayer;
import org.oscim.renderer.bucket.RenderBucket;
import org.oscim.renderer.bucket.TextureBucket;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
class TextRenderer extends ElementRenderer {
class TextRenderer extends BucketRenderer {
static final Logger log = LoggerFactory.getLogger(TextRenderer.class);
static final boolean dbg = false;
@ -63,11 +63,11 @@ class TextRenderer extends ElementRenderer {
}
return;
}
layers.clear();
buckets.clear();
}
// set new TextLayer to be uploaded and rendered
layers.setTextureLayers(t.layers);
buckets.setTextureBuckets(t.layers);
mMapPosition = t.pos;
compile();
}
@ -77,14 +77,14 @@ class TextRenderer extends ElementRenderer {
GLState.test(false, false);
//Debug.draw(pos, layers);
layers.vbo.bind();
buckets.vbo.bind();
float scale = (float) (v.pos.scale / mMapPosition.scale);
setMatrix(v, false);
for (RenderElement l = layers.getTextureLayers(); l != null;)
l = TextureLayer.Renderer.draw(layers, l, v, scale);
for (RenderBucket l = buckets.getTextureBuckets(); l != null;)
l = TextureBucket.Renderer.draw(buckets, l, v, scale);
}
}

@ -18,7 +18,7 @@
package org.oscim.layers.tile.vector.labeling;
import org.oscim.core.Tile;
import org.oscim.renderer.elements.TextItem;
import org.oscim.renderer.bucket.TextItem;
import org.oscim.theme.styles.TextStyle;
import org.oscim.utils.geom.GeometryUtils;
import org.oscim.utils.geom.LineClipper;

@ -9,9 +9,9 @@ import org.oscim.layers.Layer;
import org.oscim.map.Map;
import org.oscim.map.Map.UpdateListener;
import org.oscim.map.Viewport;
import org.oscim.renderer.ElementRenderer;
import org.oscim.renderer.BucketRenderer;
import org.oscim.renderer.GLViewport;
import org.oscim.renderer.elements.ElementLayers;
import org.oscim.renderer.bucket.RenderBuckets;
import org.oscim.utils.async.SimpleWorker;
import org.oscim.utils.geom.TileClipper;
import org.slf4j.Logger;
@ -64,7 +64,7 @@ public abstract class AbstractVectorLayer<T> extends Layer implements UpdateList
abstract protected void processFeatures(Task t, BoundingBox b);
protected static class Task {
public final ElementLayers layers = new ElementLayers();
public final RenderBuckets buckets = new RenderBuckets();
public final MapPosition position = new MapPosition();
}
@ -77,8 +77,8 @@ public abstract class AbstractVectorLayer<T> extends Layer implements UpdateList
/** automatically in sync with worker thread */
@Override
public void cleanup(Task t) {
if (t.layers != null)
t.layers.clear();
if (t.buckets != null)
t.buckets.clear();
}
/** running on worker thread */
@ -103,7 +103,7 @@ public abstract class AbstractVectorLayer<T> extends Layer implements UpdateList
}
public class Renderer extends ElementRenderer {
public class Renderer extends BucketRenderer {
MapPosition mTmpPos = new MapPosition();
@Override
@ -117,7 +117,7 @@ public abstract class AbstractVectorLayer<T> extends Layer implements UpdateList
mMapPosition.copy(t.position);
mMapPosition.setScale(mMapPosition.scale / UNSCALE_COORD);
layers.setFrom(t.layers);
buckets.setFrom(t.buckets);
compile();
//log.debug("is ready " + isReady() + " " + layers.getSize());

@ -17,14 +17,14 @@
package org.oscim.renderer;
import org.oscim.backend.canvas.Bitmap;
import org.oscim.renderer.elements.BitmapLayer;
import org.oscim.renderer.bucket.BitmapBucket;
/**
* RenderLayer to draw a custom Bitmap.
* NOTE: Only modify the Bitmap within a synchronized block!
* synchronized(bitmap){} Then call updateBitmap().
*/
public class BitmapRenderer extends ElementRenderer {
public class BitmapRenderer extends BucketRenderer {
private Bitmap mBitmap;
private int mWidth;
@ -56,11 +56,11 @@ public class BitmapRenderer extends ElementRenderer {
@Override
protected synchronized void update(GLViewport v) {
if (!initialized) {
layers.clear();
buckets.clear();
BitmapLayer l = new BitmapLayer(true);
BitmapBucket l = new BitmapBucket(true);
l.setBitmap(mBitmap, mWidth, mHeight);
layers.setTextureLayers(l);
buckets.setTextureBuckets(l);
mUpdateBitmap = true;
}
@ -84,6 +84,6 @@ public class BitmapRenderer extends ElementRenderer {
@Override
protected synchronized void render(GLViewport v) {
v.useScreenCoordinates(false, 8);
BitmapLayer.Renderer.draw(layers.getTextureLayers(), v, 1, 1);
BitmapBucket.Renderer.draw(buckets.getTextureBuckets(), v, 1, 1);
}
}

@ -16,35 +16,35 @@
*/
package org.oscim.renderer;
import static org.oscim.renderer.elements.RenderElement.BITMAP;
import static org.oscim.renderer.elements.RenderElement.LINE;
import static org.oscim.renderer.elements.RenderElement.MESH;
import static org.oscim.renderer.elements.RenderElement.POLYGON;
import static org.oscim.renderer.elements.RenderElement.SYMBOL;
import static org.oscim.renderer.elements.RenderElement.TEXLINE;
import static org.oscim.renderer.bucket.RenderBucket.BITMAP;
import static org.oscim.renderer.bucket.RenderBucket.LINE;
import static org.oscim.renderer.bucket.RenderBucket.MESH;
import static org.oscim.renderer.bucket.RenderBucket.POLYGON;
import static org.oscim.renderer.bucket.RenderBucket.SYMBOL;
import static org.oscim.renderer.bucket.RenderBucket.TEXLINE;
import org.oscim.core.MapPosition;
import org.oscim.core.Tile;
import org.oscim.renderer.elements.BitmapLayer;
import org.oscim.renderer.elements.ElementLayers;
import org.oscim.renderer.elements.HairLineLayer;
import org.oscim.renderer.elements.LineLayer;
import org.oscim.renderer.elements.LineTexLayer;
import org.oscim.renderer.elements.MeshLayer;
import org.oscim.renderer.elements.PolygonLayer;
import org.oscim.renderer.elements.RenderElement;
import org.oscim.renderer.elements.TextureLayer;
import org.oscim.renderer.bucket.BitmapBucket;
import org.oscim.renderer.bucket.HairLineBucket;
import org.oscim.renderer.bucket.LineBucket;
import org.oscim.renderer.bucket.LineTexBucket;
import org.oscim.renderer.bucket.MeshBucket;
import org.oscim.renderer.bucket.PolygonBucket;
import org.oscim.renderer.bucket.RenderBucket;
import org.oscim.renderer.bucket.RenderBuckets;
import org.oscim.renderer.bucket.TextureBucket;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Base class to use the renderer.elements for drawing.
*
* All methods that modify 'layers' MUST be synchronized!
* All methods that modify 'buckets' MUST be synchronized!
*/
public abstract class ElementRenderer extends LayerRenderer {
public abstract class BucketRenderer extends LayerRenderer {
public static final Logger log = LoggerFactory.getLogger(ElementRenderer.class);
public static final Logger log = LoggerFactory.getLogger(BucketRenderer.class);
/**
* Use mMapPosition.copy(position) to keep the position for which
@ -56,11 +56,11 @@ public abstract class ElementRenderer extends LayerRenderer {
/** Wrap around dateline */
protected boolean mFlipOnDateLine = true;
/** Layer data for rendering */
public final ElementLayers layers;
/** Buckets for rendering */
public final RenderBuckets buckets;
public ElementRenderer() {
layers = new ElementLayers();
public BucketRenderer() {
buckets = new RenderBuckets();
mMapPosition = new MapPosition();
}
@ -71,70 +71,70 @@ public abstract class ElementRenderer extends LayerRenderer {
protected synchronized void render(GLViewport v) {
MapPosition layerPos = mMapPosition;
layers.bind();
buckets.bind();
GLState.test(false, false);
GLState.blend(true);
float div = (float) (v.pos.scale / layerPos.scale);
RenderElement l = layers.getBaseLayers();
RenderBucket b = buckets.getBaseBuckets();
if (l != null)
if (b != null)
setMatrix(v, true);
while (l != null) {
if (l.type == POLYGON) {
l = PolygonLayer.Renderer.draw(l, v, 1, true);
while (b != null) {
if (b.type == POLYGON) {
b = PolygonBucket.Renderer.draw(b, v, 1, true);
continue;
}
if (l.type == LINE) {
l = LineLayer.Renderer.draw(l, v, div, layers);
if (b.type == LINE) {
b = LineBucket.Renderer.draw(b, v, div, buckets);
continue;
}
if (l.type == TEXLINE) {
l = LineTexLayer.Renderer.draw(l, v, div, layers);
if (b.type == TEXLINE) {
b = LineTexBucket.Renderer.draw(b, v, div, buckets);
// rebind
layers.ibo.bind();
buckets.ibo.bind();
continue;
}
if (l.type == MESH) {
l = MeshLayer.Renderer.draw(l, v);
if (b.type == MESH) {
b = MeshBucket.Renderer.draw(b, v);
continue;
}
if (l.type == RenderElement.HAIRLINE) {
l = HairLineLayer.Renderer.draw(l, v);
if (b.type == RenderBucket.HAIRLINE) {
b = HairLineBucket.Renderer.draw(b, v);
continue;
}
log.error("invalid layer {}", l.type);
log.error("invalid bucket {}", b.type);
break;
}
l = layers.getTextureLayers();
if (l != null)
b = buckets.getTextureBuckets();
if (b != null)
setMatrix(v, false);
while (l != null) {
if (l.type == BITMAP) {
l = BitmapLayer.Renderer.draw(l, v, 1, 1);
while (b != null) {
if (b.type == BITMAP) {
b = BitmapBucket.Renderer.draw(b, v, 1, 1);
continue;
}
if (l.type == SYMBOL) {
l = TextureLayer.Renderer.draw(layers, l, v, div);
if (b.type == SYMBOL) {
b = TextureBucket.Renderer.draw(buckets, b, v, div);
continue;
}
log.error("invalid layer {}", l.type);
log.error("invalid bucket {}", b.type);
break;
}
}
/**
* Compile all layers into one BufferObject. Sets renderer to be ready
* when successful. When no data is available (layer.countVboSize() == 0)
* then BufferObject will be released and layers will not be rendered.
* Compile all buckets into one BufferObject. Sets renderer to be ready
* when successful. When no data is available (buckets.countVboSize() == 0)
* then BufferObject will be released and buckets will not be rendered.
*/
protected synchronized void compile() {
boolean ok = layers.compile(true);
boolean ok = buckets.compile(true);
setReady(ok);
}

@ -18,8 +18,8 @@ package org.oscim.renderer;
import org.oscim.backend.GL20;
import org.oscim.core.Tile;
import org.oscim.renderer.elements.ExtrusionLayer;
import org.oscim.renderer.elements.ExtrusionLayers;
import org.oscim.renderer.bucket.ExtrusionBucket;
import org.oscim.renderer.bucket.ExtrusionBuckets;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -30,7 +30,7 @@ public abstract class ExtrusionRenderer extends LayerRenderer {
private final int mMode;
private Shader mShader;
protected ExtrusionLayers[] mExtrusionLayerSet;
protected ExtrusionBuckets[] mExtrusionLayerSet;
protected int mExtrusionLayerCnt;
protected float mAlpha = 1;
@ -65,9 +65,9 @@ public abstract class ExtrusionRenderer extends LayerRenderer {
return true;
}
private void renderCombined(int vertexPointer, ExtrusionLayers els) {
private void renderCombined(int vertexPointer, ExtrusionBuckets els) {
for (ExtrusionLayer el = els.layers; el != null; el = el.next()) {
for (ExtrusionBucket el = els.layers; el != null; el = el.next()) {
GL.glVertexAttribPointer(vertexPointer, 3,
GL20.GL_SHORT, false, 8, 0);
@ -105,7 +105,7 @@ public abstract class ExtrusionRenderer extends LayerRenderer {
GL.glDepthFunc(GL20.GL_LESS);
GL.glUniform1f(s.uAlpha, mAlpha);
ExtrusionLayers[] els = mExtrusionLayerSet;
ExtrusionBuckets[] els = mExtrusionLayerSet;
if (mTranslucent) {
/* only draw to depth buffer */
@ -150,7 +150,7 @@ public abstract class ExtrusionRenderer extends LayerRenderer {
v.mvp.setAsUniform(s.uMVP);
}
ExtrusionLayer el = els[i].getLayers();
ExtrusionBucket el = els[i].getLayers();
for (; el != null; el = el.next()) {
if (el.colors != currentColor) {
@ -243,7 +243,7 @@ public abstract class ExtrusionRenderer extends LayerRenderer {
GL.glBindBuffer(GL20.GL_ELEMENT_ARRAY_BUFFER, 0);
}
private static void setMatrix(GLViewport v, ExtrusionLayers l, boolean offset) {
private static void setMatrix(GLViewport v, ExtrusionBuckets l, boolean offset) {
int z = l.zoomLevel;
double curScale = Tile.SIZE * v.pos.scale;

@ -20,17 +20,17 @@ import org.oscim.backend.canvas.Color;
import org.oscim.backend.canvas.Paint.Cap;
import org.oscim.core.GeometryBuffer;
import org.oscim.core.Tile;
import org.oscim.renderer.elements.LineLayer;
import org.oscim.renderer.elements.TextItem;
import org.oscim.renderer.elements.TextLayer;
import org.oscim.renderer.bucket.LineBucket;
import org.oscim.renderer.bucket.TextBucket;
import org.oscim.renderer.bucket.TextItem;
import org.oscim.theme.styles.LineStyle;
import org.oscim.theme.styles.TextStyle;
import org.oscim.theme.styles.TextStyle.TextBuilder;
public class GridRenderer extends ElementRenderer {
private final TextLayer mTextLayer;
public class GridRenderer extends BucketRenderer {
private final TextBucket mTextBucket;
private final TextStyle mText;
private final LineLayer mLineLayer;
private final LineBucket mLineBucket;
private final GeometryBuffer mLines;
private final StringBuilder mStringBuffer;
@ -67,14 +67,13 @@ public class GridRenderer extends ElementRenderer {
mText = textStyle;
if (mText != null) {
mTextLayer = layers.addTextLayer(new TextLayer());
} else {
mTextLayer = null;
}
if (mText != null)
mTextBucket = buckets.addTextBucket(new TextBucket());
else
mTextBucket = null;
mLineLayer = layers.addLineLayer(0, lineStyle);
mLineLayer.addLine(mLines);
mLineBucket = buckets.addLineBucket(0, lineStyle);
mLineBucket.addLine(mLines);
mStringBuffer = new StringBuilder(32);
}
@ -82,7 +81,7 @@ public class GridRenderer extends ElementRenderer {
private void addLabels(int x, int y, int z) {
int s = Tile.SIZE;
TextLayer tl = mTextLayer;
TextBucket tl = mTextBucket;
tl.clear();
StringBuilder sb = mStringBuffer;
@ -133,11 +132,11 @@ public class GridRenderer extends ElementRenderer {
if (mText != null) {
addLabels(x, y, v.pos.zoomLevel);
layers.setBaseLayers(mLineLayer);
mLineLayer.addLine(mLines);
buckets.setBaseBuckets(mLineBucket);
mLineBucket.addLine(mLines);
compile();
} else if (layers.vbo == null) {
} else if (buckets.vbo == null) {
compile();
}
}

@ -24,9 +24,9 @@ import org.oscim.backend.GL20;
import org.oscim.backend.GLAdapter;
import org.oscim.backend.canvas.Color;
import org.oscim.map.Map;
import org.oscim.renderer.elements.ElementLayers;
import org.oscim.renderer.elements.TextureItem;
import org.oscim.renderer.elements.TextureLayer;
import org.oscim.renderer.bucket.RenderBuckets;
import org.oscim.renderer.bucket.TextureBucket;
import org.oscim.renderer.bucket.TextureItem;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -165,7 +165,7 @@ public class MapRenderer {
int[] vboIds = GLUtils.glGenBuffers(2);
mQuadIndicesID = vboIds[0];
int maxIndices = maxQuads * TextureLayer.INDICES_PER_SPRITE;
int maxIndices = maxQuads * TextureBucket.INDICES_PER_SPRITE;
short[] indices = new short[maxIndices];
for (int i = 0, j = 0; i < maxIndices; i += 6, j += 4) {
indices[i + 0] = (short) (j + 0);
@ -225,7 +225,7 @@ public class MapRenderer {
BufferObject.init(GL, 200);
// classes that require GL context for initialization
ElementLayers.initRenderer(GL);
RenderBuckets.initRenderer(GL);
LayerRenderer.init(GL);
mNewSurface = true;

@ -64,7 +64,7 @@ package org.oscim.renderer.atlas;
import java.util.HashMap;
import org.oscim.backend.canvas.Bitmap;
import org.oscim.renderer.elements.TextureItem;
import org.oscim.renderer.bucket.TextureItem;
import org.oscim.utils.pool.Inlist;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@ -17,7 +17,7 @@
package org.oscim.renderer.atlas;
import org.oscim.renderer.atlas.TextureAtlas.Rect;
import org.oscim.renderer.elements.TextureItem;
import org.oscim.renderer.bucket.TextureItem;
public class TextureRegion {

@ -14,7 +14,7 @@
* 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.elements;
package org.oscim.renderer.bucket;
import java.nio.ShortBuffer;
@ -24,12 +24,12 @@ import org.oscim.renderer.GLShader;
import org.oscim.renderer.GLState;
import org.oscim.renderer.GLViewport;
import org.oscim.renderer.MapRenderer;
import org.oscim.renderer.elements.TextureItem.TexturePool;
import org.oscim.renderer.bucket.TextureItem.TexturePool;
/**
* Renderer for a single bitmap, width and height must be power of 2.
*/
public class BitmapLayer extends TextureLayer {
public class BitmapBucket extends TextureBucket {
// TODO share layers.vbo() between BitmapTileLayers
// static final Logger log = LoggerFactory.getLogger(BitmapLayer.class);
@ -42,8 +42,8 @@ public class BitmapLayer extends TextureLayer {
* @param reuseBitmap false if the Bitmap should be disposed
* after loading to texture.
*/
public BitmapLayer(boolean reuseBitmap) {
super(RenderElement.BITMAP);
public BitmapBucket(boolean reuseBitmap) {
super(RenderBucket.BITMAP);
mReuseBitmap = reuseBitmap;
mVertices = new short[24];
@ -75,7 +75,7 @@ public class BitmapLayer extends TextureLayer {
}
TextureItem t = textures;
t.indices = TextureLayer.INDICES_PER_SPRITE;
t.indices = TextureBucket.INDICES_PER_SPRITE;
}
private void setVertices(ShortBuffer vboData) {
@ -192,14 +192,14 @@ public class BitmapLayer extends TextureLayer {
shader = new Shader("texture_alpha");
}
public static RenderElement draw(RenderElement renderElement, GLViewport v,
public static RenderBucket draw(RenderBucket renderElement, GLViewport v,
float scale, float alpha) {
GLState.blend(true);
Shader s = shader;
s.useProgram();
TextureLayer tl = (TextureLayer) renderElement;
TextureBucket tl = (TextureBucket) renderElement;
GL.glUniform1f(s.uAlpha, alpha);
v.mvp.setAsUniform(s.uMVP);

@ -14,7 +14,7 @@
* 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.elements;
package org.oscim.renderer.bucket;
import java.nio.ShortBuffer;
@ -33,8 +33,8 @@ import org.oscim.utils.pool.Pool;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ExtrusionLayer extends RenderElement {
static final Logger log = LoggerFactory.getLogger(ExtrusionLayer.class);
public class ExtrusionBucket extends RenderBucket {
static final Logger log = LoggerFactory.getLogger(ExtrusionBucket.class);
private static final float S = MapRenderer.COORD_SCALE;
@ -68,8 +68,8 @@ public class ExtrusionLayer extends RenderElement {
/**
* ExtrusionLayer for polygon geometries.
*/
public ExtrusionLayer(int level, float groundResolution, float[] colors) {
super(RenderElement.EXTRUSION);
public ExtrusionBucket(int level, float groundResolution, float[] colors) {
super(RenderBucket.EXTRUSION);
this.level = level;
this.colors = colors;
this.color = 0;
@ -87,8 +87,8 @@ public class ExtrusionLayer extends RenderElement {
/**
* ExtrusionLayer for triangle geometries.
*/
public ExtrusionLayer(int level, float groundResolution, int color) {
super(RenderElement.EXTRUSION);
public ExtrusionBucket(int level, float groundResolution, int color) {
super(RenderBucket.EXTRUSION);
this.level = level;
this.color = color;
@ -620,7 +620,7 @@ public class ExtrusionLayer extends RenderElement {
}
}
public ExtrusionLayer next() {
return (ExtrusionLayer) next;
public ExtrusionBucket next() {
return (ExtrusionBucket) next;
}
}

@ -1,4 +1,4 @@
package org.oscim.renderer.elements;
package org.oscim.renderer.bucket;
import java.nio.ShortBuffer;
@ -10,10 +10,10 @@ import org.oscim.renderer.MapRenderer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ExtrusionLayers extends TileData {
static final Logger log = LoggerFactory.getLogger(ExtrusionLayers.class);
public class ExtrusionBuckets extends TileData {
static final Logger log = LoggerFactory.getLogger(ExtrusionBuckets.class);
public ExtrusionLayer layers;
public ExtrusionBucket layers;
public boolean compiled;
@ -25,7 +25,7 @@ public class ExtrusionLayers extends TileData {
public BufferObject ibo;
public BufferObject vbo;
public ExtrusionLayers(MapTile tile) {
public ExtrusionBuckets(MapTile tile) {
zoomLevel = tile.zoomLevel;
x = tile.x;
y = tile.y;
@ -34,14 +34,14 @@ public class ExtrusionLayers extends TileData {
/**
* Set new ExtrusionLayers and clear previous.
*/
public void setLayers(ExtrusionLayer el) {
for (RenderElement l = layers; l != null; l = l.next)
public void setLayers(ExtrusionBucket el) {
for (RenderBucket l = layers; l != null; l = l.next)
l.clear();
layers = el;
}
public ExtrusionLayer getLayers() {
public ExtrusionBucket getLayers() {
return layers;
}
@ -57,7 +57,7 @@ public class ExtrusionLayers extends TileData {
}
public void prepare() {
for (RenderElement l = layers; l != null; l = l.next)
for (RenderBucket l = layers; l != null; l = l.next)
l.prepare();
}
@ -69,7 +69,7 @@ public class ExtrusionLayers extends TileData {
int sumIndices = 0;
int sumVertices = 0;
for (ExtrusionLayer l = layers; l != null; l = l.next()) {
for (ExtrusionBucket l = layers; l != null; l = l.next()) {
sumIndices += l.numIndices;
sumVertices += l.numVertices;
}
@ -79,7 +79,7 @@ public class ExtrusionLayers extends TileData {
ShortBuffer vboData = MapRenderer.getShortBuffer(sumVertices * 4);
ShortBuffer iboData = MapRenderer.getShortBuffer(sumIndices);
for (ExtrusionLayer l = layers; l != null; l = l.next()) {
for (ExtrusionBucket l = layers; l != null; l = l.next()) {
l.compile(vboData, iboData);
}
int size = sumIndices * 2;

@ -1,4 +1,4 @@
package org.oscim.renderer.elements;
package org.oscim.renderer.bucket;
import static org.oscim.backend.GL20.GL_LINES;
import static org.oscim.backend.GL20.GL_SHORT;
@ -14,13 +14,13 @@ import org.oscim.theme.styles.LineStyle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HairLineLayer extends RenderElement {
static final Logger log = LoggerFactory.getLogger(HairLineLayer.class);
public class HairLineBucket extends RenderBucket {
static final Logger log = LoggerFactory.getLogger(HairLineBucket.class);
public LineStyle line;
public HairLineLayer(int level) {
super(RenderElement.HAIRLINE);
public HairLineBucket(int level) {
super(RenderBucket.HAIRLINE);
this.level = level;
}
@ -112,7 +112,7 @@ public class HairLineLayer extends RenderElement {
}
}
public static RenderElement draw(RenderElement l, GLViewport v) {
public static RenderBucket draw(RenderBucket l, GLViewport v) {
GLState.blend(true);
Shader s = shader;
@ -120,7 +120,7 @@ public class HairLineLayer extends RenderElement {
s.set(v);
for (; l != null && l.type == HAIRLINE; l = l.next) {
HairLineLayer ll = (HairLineLayer) l;
HairLineBucket ll = (HairLineBucket) l;
GLUtils.setColor(s.uColor, ll.line.color, 1);

@ -14,7 +14,7 @@
* 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.elements;
package org.oscim.renderer.bucket;
import org.oscim.backend.GL20;
import org.oscim.backend.GLAdapter;
@ -36,8 +36,8 @@ import org.slf4j.LoggerFactory;
* resolution for coordinates is 0.25 as points will be converted
* to fixed point values.
*/
public final class LineLayer extends RenderElement {
static final Logger log = LoggerFactory.getLogger(LineLayer.class);
public final class LineBucket extends RenderBucket {
static final Logger log = LoggerFactory.getLogger(LineBucket.class);
private static final float COORD_SCALE = MapRenderer.COORD_SCALE;
/** scale factor mapping extrusion vector to short values */
@ -59,7 +59,7 @@ public final class LineLayer extends RenderElement {
private static final int DIR_MASK = 0xFFFFFFFC;
/* lines referenced by this outline layer */
public LineLayer outlines;
public LineBucket outlines;
public LineStyle line;
public float scale = 1;
@ -70,13 +70,13 @@ public final class LineLayer extends RenderElement {
private int tmin = Integer.MIN_VALUE, tmax = Integer.MAX_VALUE;
LineLayer(int layer) {
super(RenderElement.LINE);
public LineBucket(int layer) {
super(RenderBucket.LINE);
this.level = layer;
}
public void addOutline(LineLayer link) {
for (LineLayer l = outlines; l != null; l = l.outlines)
public void addOutline(LineBucket link) {
for (LineBucket l = outlines; l != null; l = l.outlines)
if (link == l)
return;
@ -526,7 +526,7 @@ public final class LineLayer extends RenderElement {
/* factor to normalize extrusion vector and scale to coord scale */
private final static float COORD_SCALE_BY_DIR_SCALE =
MapRenderer.COORD_SCALE / LineLayer.DIR_SCALE;
MapRenderer.COORD_SCALE / LineBucket.DIR_SCALE;
private final static int CAP_THIN = 0;
private final static int CAP_BUTT = 1;
@ -565,8 +565,8 @@ public final class LineLayer extends RenderElement {
return true;
}
public static RenderElement draw(RenderElement curLayer, GLViewport v,
float scale, ElementLayers layers) {
public static RenderBucket draw(RenderBucket curLayer, GLViewport v,
float scale, RenderBuckets buckets) {
if (curLayer == null)
return null;
@ -578,7 +578,6 @@ public final class LineLayer extends RenderElement {
Shader s = shaders[mode];
s.useProgram();
//GLState.useProgram(lineProgram[mode]);
GLState.blend(true);
/* Somehow we loose the texture after an indefinite
@ -595,7 +594,7 @@ public final class LineLayer extends RenderElement {
int uLineHeight = s.uHeight;
GL.glVertexAttribPointer(s.aPos, 4, GL20.GL_SHORT,
false, 0, layers.offset[LINE]);
false, 0, buckets.offset[LINE]);
v.mvp.setAsUniform(s.uMVP);
@ -620,9 +619,9 @@ public final class LineLayer extends RenderElement {
float heightOffset = 0;
GL.glUniform1f(uLineHeight, heightOffset);
RenderElement l = curLayer;
for (; l != null && l.type == RenderElement.LINE; l = l.next) {
LineLayer ll = (LineLayer) l;
RenderBucket l = curLayer;
for (; l != null && l.type == RenderBucket.LINE; l = l.next) {
LineBucket ll = (LineBucket) l;
LineStyle line = ll.line.current();
if (ll.heightOffset != heightOffset) {
@ -693,7 +692,7 @@ public final class LineLayer extends RenderElement {
/* draw LineLayers references by this outline */
for (LineLayer ref = ll.outlines; ref != null; ref = ref.outlines) {
for (LineBucket ref = ll.outlines; ref != null; ref = ref.outlines) {
LineStyle core = ref.line.current();
// core width

@ -14,7 +14,7 @@
* 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.elements;
package org.oscim.renderer.bucket;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
@ -76,9 +76,9 @@ import org.slf4j.LoggerFactory;
* - in our case there is always the polygon fill array at start
* - see addLine hack otherwise.
*/
public final class LineTexLayer extends RenderElement {
public final class LineTexBucket extends RenderBucket {
static final Logger log = LoggerFactory.getLogger(LineTexLayer.class);
static final Logger log = LoggerFactory.getLogger(LineTexBucket.class);
private static final float COORD_SCALE = MapRenderer.COORD_SCALE;
/* scale factor mapping extrusion vector to short values */
@ -94,7 +94,7 @@ public final class LineTexLayer extends RenderElement {
protected boolean mRandomizeOffset = true;
LineTexLayer(int layer) {
LineTexBucket(int layer) {
super(TEXLINE);
this.level = layer;
@ -261,7 +261,7 @@ public final class LineTexLayer extends RenderElement {
/* factor to normalize extrusion vector and scale to coord scale */
private final static float COORD_SCALE_BY_DIR_SCALE =
MapRenderer.COORD_SCALE / LineLayer.DIR_SCALE;
MapRenderer.COORD_SCALE / LineBucket.DIR_SCALE;
private static int mVertexFlipID;
@ -299,8 +299,8 @@ public final class LineTexLayer extends RenderElement {
private final static int STRIDE = 12;
private final static int LEN_OFFSET = 8;
public static RenderElement draw(RenderElement curLayer, GLViewport v,
float div, ElementLayers layers) {
public static RenderBucket draw(RenderBucket curLayer, GLViewport v,
float div, RenderBuckets layers) {
//if (shader == 0)
// return curLayer.next;
@ -341,9 +341,9 @@ public final class LineTexLayer extends RenderElement {
//GL.glBindTexture(GL20.GL_TEXTURE_2D, mTexID[0]);
RenderElement l = curLayer;
RenderBucket l = curLayer;
for (; l != null && l.type == TEXLINE; l = l.next) {
LineTexLayer ll = (LineTexLayer) l;
LineTexBucket ll = (LineTexBucket) l;
LineStyle line = ll.line.current();
GLUtils.setColor(shader.uColor, line.stippleColor, 1);

@ -14,7 +14,7 @@
* 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.elements;
package org.oscim.renderer.bucket;
import static org.oscim.backend.GL20.GL_LINES;
import static org.oscim.backend.GL20.GL_SHORT;
@ -29,15 +29,15 @@ import org.oscim.renderer.GLState;
import org.oscim.renderer.GLUtils;
import org.oscim.renderer.GLViewport;
import org.oscim.renderer.MapRenderer;
import org.oscim.renderer.elements.VertexData.Chunk;
import org.oscim.renderer.bucket.VertexData.Chunk;
import org.oscim.theme.styles.AreaStyle;
import org.oscim.utils.ColorUtil;
import org.oscim.utils.TessJNI;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MeshLayer extends RenderElement {
static final Logger log = LoggerFactory.getLogger(MeshLayer.class);
public class MeshBucket extends RenderBucket {
static final Logger log = LoggerFactory.getLogger(MeshBucket.class);
static final boolean dbgRender = false;
public AreaStyle area;
@ -45,8 +45,8 @@ public class MeshLayer extends RenderElement {
TessJNI tess = new TessJNI(8);
public MeshLayer(int level) {
super(RenderElement.MESH);
public MeshBucket(int level) {
super(RenderBucket.MESH);
this.level = level;
}
@ -127,7 +127,7 @@ public class MeshLayer extends RenderElement {
}
}
public static RenderElement draw(RenderElement l, GLViewport v) {
public static RenderBucket draw(RenderBucket l, GLViewport v) {
GLState.blend(true);
Shader s = shader;
@ -141,7 +141,7 @@ public class MeshLayer extends RenderElement {
GL.glUniform1f(s.uHeight, heightOffset);
for (; l != null && l.type == MESH; l = l.next) {
MeshLayer ml = (MeshLayer) l;
MeshBucket ml = (MeshBucket) l;
//if (ml.indicesVbo == null)
// continue;

@ -14,7 +14,7 @@
* 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.elements;
package org.oscim.renderer.bucket;
import static org.oscim.backend.GL20.GL_ALWAYS;
import static org.oscim.backend.GL20.GL_EQUAL;
@ -48,9 +48,9 @@ import org.slf4j.LoggerFactory;
/**
* Special Renderer for drawing tile polygons using the stencil buffer method
*/
public final class PolygonLayer extends RenderElement {
public final class PolygonBucket extends RenderBucket {
static final Logger log = LoggerFactory.getLogger(PolygonLayer.class);
static final Logger log = LoggerFactory.getLogger(PolygonBucket.class);
public final static int CLIP_STENCIL = 1;
public final static int CLIP_DEPTH = 2;
@ -62,8 +62,8 @@ public final class PolygonLayer extends RenderElement {
public AreaStyle area;
PolygonLayer(int layer) {
super(RenderElement.POLYGON);
PolygonBucket(int layer) {
super(RenderBucket.POLYGON);
level = layer;
}
@ -183,7 +183,7 @@ public final class PolygonLayer extends RenderElement {
private static final float FADE_START = 1.3f;
private static PolygonLayer[] mAreaLayer;
private static PolygonBucket[] mAreaLayer;
private static Shader polyShader;
private static Shader texShader;
@ -192,7 +192,7 @@ public final class PolygonLayer extends RenderElement {
polyShader = new Shader("base_shader");
texShader = new Shader("polygon_layer_tex");
mAreaLayer = new PolygonLayer[STENCIL_BITS];
mAreaLayer = new PolygonBucket[STENCIL_BITS];
return true;
}
@ -208,7 +208,7 @@ public final class PolygonLayer extends RenderElement {
Shader s;
for (int i = start; i < end; i++) {
PolygonLayer l = mAreaLayer[i];
PolygonBucket l = mAreaLayer[i];
AreaStyle a = l.area.current();
boolean useTexture = enableTexture && a.texture != null;
@ -271,17 +271,17 @@ public final class PolygonLayer extends RenderElement {
GLState.blend(true);
HairLineLayer.Renderer.shader.set(v);
HairLineBucket.Renderer.shader.set(v);
GLUtils.setColor(HairLineLayer.Renderer.shader.uColor,
GLUtils.setColor(HairLineBucket.Renderer.shader.uColor,
l.area.strokeColor, 1);
GL.glVertexAttribPointer(HairLineLayer.Renderer.shader.aPos,
GL.glVertexAttribPointer(HairLineBucket.Renderer.shader.aPos,
2, GL_SHORT, false, 0,
// 4 bytes per vertex
l.vertexOffset << 2);
GL.glUniform1f(HairLineLayer.Renderer.shader.uWidth,
GL.glUniform1f(HairLineBucket.Renderer.shader.uWidth,
a.strokeWidth);
GL.glDrawElements(GL_LINES,
@ -304,8 +304,10 @@ public final class PolygonLayer extends RenderElement {
private static Shader setShader(Shader shader, GLMatrix mvp, boolean first) {
if (shader.useProgram() || first) {
GLState.enableVertexArrays(shader.aPos, -1);
GL.glVertexAttribPointer(shader.aPos, 2,
GL_SHORT, false, 0, 0);
mvp.setAsUniform(shader.uMVP);
}
return shader;
@ -336,7 +338,7 @@ public final class PolygonLayer extends RenderElement {
* @return
* next layer
*/
public static RenderElement draw(RenderElement renderElement, GLViewport v,
public static RenderBucket draw(RenderBucket renderElement, GLViewport v,
float div, boolean first) {
GLState.test(false, true);
@ -359,9 +361,9 @@ public final class PolygonLayer extends RenderElement {
byte stencilMask = 0;
RenderElement l = renderElement;
RenderBucket l = renderElement;
for (; l != null && l.type == POLYGON; l = l.next) {
PolygonLayer pl = (PolygonLayer) l;
PolygonBucket pl = (PolygonBucket) l;
AreaStyle area = pl.area.current();
/* fade out polygon layers (set in RenderTheme) */
@ -503,7 +505,6 @@ public final class PolygonLayer extends RenderElement {
}
static void clearStencilRegion() {
//log.debug("clear stencil");
mCount = 0;
mClear = false;
@ -516,7 +517,6 @@ public final class PolygonLayer extends RenderElement {
/* use clip bit from stencil buffer to clear stencil
* 'layer-bits' (0x7f) */
//GL.glStencilFunc(GL_EQUAL, CLIP_BIT, CLIP_BIT);
GL.glStencilFunc(GL_EQUAL, CLIP_BIT, CLIP_BIT);
/* set clip bit (0x80) for draw region */
@ -532,7 +532,7 @@ public final class PolygonLayer extends RenderElement {
* and 'alpha' to fake a fade effect.
*/
public static void drawOver(GLMatrix mvp, int color, float alpha) {
// TODO true could be avoided when same shader and vbo
/* TODO true could be avoided when same shader and vbo */
setShader(polyShader, mvp, true);
if (color == 0) {

@ -14,14 +14,14 @@
* 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.elements;
package org.oscim.renderer.bucket;
import java.nio.ShortBuffer;
import org.oscim.backend.GL20;
import org.oscim.utils.pool.Inlist;
public abstract class RenderElement extends Inlist<RenderElement> {
public abstract class RenderBucket extends Inlist<RenderBucket> {
protected static GL20 GL;
public static final int LINE = 0;
@ -46,7 +46,7 @@ public abstract class RenderElement extends Inlist<RenderElement> {
protected final VertexData vertexItems = new VertexData();
protected final VertexData indiceItems = new VertexData();
protected RenderElement(int type) {
protected RenderBucket(int type) {
this.type = type;
}

@ -14,13 +14,13 @@
* 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.elements;
package org.oscim.renderer.bucket;
import static org.oscim.renderer.elements.RenderElement.HAIRLINE;
import static org.oscim.renderer.elements.RenderElement.LINE;
import static org.oscim.renderer.elements.RenderElement.MESH;
import static org.oscim.renderer.elements.RenderElement.POLYGON;
import static org.oscim.renderer.elements.RenderElement.TEXLINE;
import static org.oscim.renderer.bucket.RenderBucket.HAIRLINE;
import static org.oscim.renderer.bucket.RenderBucket.LINE;
import static org.oscim.renderer.bucket.RenderBucket.MESH;
import static org.oscim.renderer.bucket.RenderBucket.POLYGON;
import static org.oscim.renderer.bucket.RenderBucket.TEXLINE;
import java.nio.ShortBuffer;
@ -39,9 +39,9 @@ import org.slf4j.LoggerFactory;
* MapTile. It can be used for other purposes as well but some optimizations
* (and limitations) probably wont make sense in different contexts.
*/
public class ElementLayers extends TileData {
public class RenderBuckets extends TileData {
static final Logger log = LoggerFactory.getLogger(ElementLayers.class);
static final Logger log = LoggerFactory.getLogger(RenderBuckets.class);
public final static int[] VERTEX_SHORT_CNT = {
4, // LINE_VERTEX
@ -55,11 +55,11 @@ public class ElementLayers extends TileData {
private final static int TEXTURE_VERTEX_SHORTS = 6;
private final static int SHORT_BYTES = 2;
/** mixed Polygon- and LineLayer */
private RenderElement baseLayers;
/** mixed Polygon- and LineBuckets */
private RenderBucket baseBuckets;
/** Text- and SymbolLayer */
private RenderElement textureLayers;
/** Text- and SymbolBuckets */
private RenderBucket textureBuckets;
/**
* VBO holds all vertex data to draw lines and polygons after compilation.
@ -76,18 +76,18 @@ public class ElementLayers extends TileData {
* To not need to switch VertexAttribPointer positions all the time:
* 1. polygons are packed in VBO at offset 0
* 2. lines afterwards at lineOffset
* 3. other layers keep their byte offset in offset
* 3. other buckets keep their byte offset in offset
*/
public int[] offset = { 0, 0 };
private RenderElement mCurLayer;
private RenderBucket mCurBucket;
/**
* add the LineLayer for a level with a given Line style. Levels are
* add the LineBucket for a level with a given Line style. Levels are
* ordered from bottom (0) to top
*/
public LineLayer addLineLayer(int level, LineStyle style) {
LineLayer l = (LineLayer) getLayer(level, LINE);
public LineBucket addLineBucket(int level, LineStyle style) {
LineBucket l = (LineBucket) getBucket(level, LINE);
if (l == null)
return null;
// FIXME l.scale = style.width;
@ -96,24 +96,24 @@ public class ElementLayers extends TileData {
return l;
}
public PolygonLayer addPolygonLayer(int level, AreaStyle style) {
PolygonLayer l = (PolygonLayer) getLayer(level, POLYGON);
public PolygonBucket addPolygonBucket(int level, AreaStyle style) {
PolygonBucket l = (PolygonBucket) getBucket(level, POLYGON);
if (l == null)
return null;
l.area = style;
return l;
}
public MeshLayer addMeshLayer(int level, AreaStyle style) {
MeshLayer l = (MeshLayer) getLayer(level, MESH);
public MeshBucket addMeshBucket(int level, AreaStyle style) {
MeshBucket l = (MeshBucket) getBucket(level, MESH);
if (l == null)
return null;
l.area = style;
return l;
}
public HairLineLayer addHairLineLayer(int level, LineStyle style) {
HairLineLayer ll = getHairLineLayer(level);
public HairLineBucket addHairLineBucket(int level, LineStyle style) {
HairLineBucket ll = getHairLineBucket(level);
if (ll == null)
return null;
ll.line = style;
@ -122,162 +122,162 @@ public class ElementLayers extends TileData {
}
/**
* Get or add the LineLayer for a level. Levels are ordered from
* Get or add the LineBucket for a level. Levels are ordered from
* bottom (0) to top
*/
public LineLayer getLineLayer(int level) {
return (LineLayer) getLayer(level, LINE);
public LineBucket getLineBucket(int level) {
return (LineBucket) getBucket(level, LINE);
}
/**
* Get or add the MeshLayer for a level. Levels are ordered from
* Get or add the MeshBucket for a level. Levels are ordered from
* bottom (0) to top
*/
public MeshLayer getMeshLayer(int level) {
return (MeshLayer) getLayer(level, MESH);
public MeshBucket getMeshBucket(int level) {
return (MeshBucket) getBucket(level, MESH);
}
/**
* Get or add the PolygonLayer for a level. Levels are ordered from
* Get or add the PolygonBucket for a level. Levels are ordered from
* bottom (0) to top
*/
public PolygonLayer getPolygonLayer(int level) {
return (PolygonLayer) getLayer(level, POLYGON);
public PolygonBucket getPolygonBucket(int level) {
return (PolygonBucket) getBucket(level, POLYGON);
}
/**
* Get or add the TexLineLayer for a level. Levels are ordered from
* Get or add the TexLineBucket for a level. Levels are ordered from
* bottom (0) to top
*/
public LineTexLayer getLineTexLayer(int level) {
return (LineTexLayer) getLayer(level, TEXLINE);
public LineTexBucket getLineTexBucket(int level) {
return (LineTexBucket) getBucket(level, TEXLINE);
}
/**
* Get or add the TexLineLayer for a level. Levels are ordered from
* Get or add the TexLineBucket for a level. Levels are ordered from
* bottom (0) to top
*/
public HairLineLayer getHairLineLayer(int level) {
return (HairLineLayer) getLayer(level, HAIRLINE);
public HairLineBucket getHairLineBucket(int level) {
return (HairLineBucket) getBucket(level, HAIRLINE);
}
public TextLayer addTextLayer(TextLayer textLayer) {
textLayer.next = textureLayers;
textureLayers = textLayer;
return textLayer;
public TextBucket addTextBucket(TextBucket textBucket) {
textBucket.next = textureBuckets;
textureBuckets = textBucket;
return textBucket;
}
/**
* Set new Base-Layers and clear previous.
* Set new Base-Buckets and clear previous.
*/
public void setBaseLayers(RenderElement layers) {
for (RenderElement l = baseLayers; l != null; l = l.next)
public void setBaseBuckets(RenderBucket buckets) {
for (RenderBucket l = baseBuckets; l != null; l = l.next)
l.clear();
baseLayers = layers;
baseBuckets = buckets;
}
public RenderElement getBaseLayers() {
return baseLayers;
public RenderBucket getBaseBuckets() {
return baseBuckets;
}
/**
* Set new TextureLayers and clear previous.
* Set new TextureBuckets and clear previous.
*/
public void setTextureLayers(TextureLayer tl) {
for (RenderElement l = textureLayers; l != null; l = l.next)
public void setTextureBuckets(TextureBucket tl) {
for (RenderBucket l = textureBuckets; l != null; l = l.next)
l.clear();
textureLayers = tl;
textureBuckets = tl;
}
public RenderElement getTextureLayers() {
return textureLayers;
public RenderBucket getTextureBuckets() {
return textureBuckets;
}
private RenderElement getLayer(int level, int type) {
RenderElement layer = null;
private RenderBucket getBucket(int level, int type) {
RenderBucket bucket = null;
if (mCurLayer != null && mCurLayer.level == level) {
layer = mCurLayer;
if (layer.type != type) {
log.error("BUG wrong layer {} {} on layer {}",
Integer.valueOf(layer.type),
if (mCurBucket != null && mCurBucket.level == level) {
bucket = mCurBucket;
if (bucket.type != type) {
log.error("BUG wrong bucket {} {} on level {}",
Integer.valueOf(bucket.type),
Integer.valueOf(type),
Integer.valueOf(level));
throw new IllegalArgumentException();
}
return layer;
return bucket;
}
RenderElement l = baseLayers;
if (l == null || l.level > level) {
/* insert new layer at start */
l = null;
RenderBucket b = baseBuckets;
if (b == null || b.level > level) {
/* insert new bucket at start */
b = null;
} else {
while (true) {
/* found layer */
if (l.level == level) {
layer = l;
/* found bucket */
if (b.level == level) {
bucket = b;
break;
}
/* insert layer between current and next layer */
if (l.next == null || l.next.level > level)
/* insert bucket between current and next bucket */
if (b.next == null || b.next.level > level)
break;
l = l.next;
b = b.next;
}
}
if (layer == null) {
if (bucket == null) {
/* add a new RenderElement */
if (type == LINE)
layer = new LineLayer(level);
bucket = new LineBucket(level);
else if (type == POLYGON)
layer = new PolygonLayer(level);
bucket = new PolygonBucket(level);
else if (type == TEXLINE)
layer = new LineTexLayer(level);
bucket = new LineTexBucket(level);
else if (type == MESH)
layer = new MeshLayer(level);
bucket = new MeshBucket(level);
else if (type == HAIRLINE)
layer = new HairLineLayer(level);
bucket = new HairLineBucket(level);
if (layer == null)
if (bucket == null)
throw new IllegalArgumentException();
if (l == null) {
if (b == null) {
/** insert at start */
layer.next = baseLayers;
baseLayers = layer;
bucket.next = baseBuckets;
baseBuckets = bucket;
} else {
layer.next = l.next;
l.next = layer;
bucket.next = b.next;
b.next = bucket;
}
}
/* check if found layer matches requested type */
if (layer.type != type) {
log.error("BUG wrong layer {} {} on layer {}",
Integer.valueOf(layer.type),
/* check if found buckets matches requested type */
if (bucket.type != type) {
log.error("BUG wrong bucket {} {} on level {}",
Integer.valueOf(bucket.type),
Integer.valueOf(type),
Integer.valueOf(level));
throw new IllegalArgumentException();
}
mCurLayer = layer;
mCurBucket = bucket;
return layer;
return bucket;
}
private int countVboSize() {
int vboShorts = 0;
for (RenderElement l = baseLayers; l != null; l = l.next)
for (RenderBucket l = baseBuckets; l != null; l = l.next)
vboShorts += l.numVertices * VERTEX_SHORT_CNT[l.type];
for (RenderElement l = textureLayers; l != null; l = l.next)
for (RenderBucket l = textureBuckets; l != null; l = l.next)
vboShorts += l.numVertices * TEXTURE_VERTEX_SHORTS;
return vboShorts;
@ -286,31 +286,31 @@ public class ElementLayers extends TileData {
private int countIboSize() {
int numIndices = 0;
for (RenderElement l = baseLayers; l != null; l = l.next)
for (RenderBucket l = baseBuckets; l != null; l = l.next)
numIndices += l.numIndices;
for (RenderElement l = textureLayers; l != null; l = l.next)
for (RenderBucket l = textureBuckets; l != null; l = l.next)
numIndices += l.numIndices;
return numIndices;
}
public void setFrom(ElementLayers layers) {
setBaseLayers(layers.baseLayers);
setTextureLayers((TextureLayer) layers.textureLayers);
public void setFrom(RenderBuckets buckets) {
setBaseBuckets(buckets.baseBuckets);
setTextureBuckets((TextureBucket) buckets.textureBuckets);
mCurLayer = null;
layers.baseLayers = null;
layers.textureLayers = null;
layers.mCurLayer = null;
mCurBucket = null;
buckets.baseBuckets = null;
buckets.textureBuckets = null;
buckets.mCurBucket = null;
}
/** cleanup only when layers are not used by tile or layer anymore! */
/** cleanup only when buckets are not used by tile or bucket anymore! */
public void clear() {
/* NB: set null calls clear() on each layer! */
setBaseLayers(null);
setTextureLayers(null);
mCurLayer = null;
/* NB: set null calls clear() on each bucket! */
setBaseBuckets(null);
setTextureBuckets(null);
mCurBucket = null;
vbo = BufferObject.release(vbo);
ibo = BufferObject.release(ibo);
@ -322,10 +322,10 @@ public class ElementLayers extends TileData {
}
public void prepare() {
for (RenderElement l = baseLayers; l != null; l = l.next)
for (RenderBucket l = baseBuckets; l != null; l = l.next)
l.prepare();
for (RenderElement l = textureLayers; l != null; l = l.next)
for (RenderBucket l = textureBuckets; l != null; l = l.next)
l.prepare();
}
@ -367,7 +367,7 @@ public class ElementLayers extends TileData {
//>>compile(vboData, iboData, addFill);
int pos = addFill ? 4 : 0;
for (RenderElement l = baseLayers; l != null; l = l.next) {
for (RenderBucket l = baseBuckets; l != null; l = l.next) {
if (l.type == POLYGON) {
l.compile(vboData, iboData);
@ -379,7 +379,7 @@ public class ElementLayers extends TileData {
offset[LINE] = vboData.position() * SHORT_BYTES;
pos = 0;
for (RenderElement l = baseLayers; l != null; l = l.next) {
for (RenderBucket l = baseBuckets; l != null; l = l.next) {
if (l.type == LINE) {
l.compile(vboData, iboData);
@ -390,13 +390,13 @@ public class ElementLayers extends TileData {
//offset[TEXLINE] = size * SHORT_BYTES;
for (RenderElement l = baseLayers; l != null; l = l.next) {
for (RenderBucket l = baseBuckets; l != null; l = l.next) {
if (l.type == TEXLINE || l.type == MESH || l.type == HAIRLINE) {
l.compile(vboData, iboData);
}
}
for (RenderElement l = textureLayers; l != null; l = l.next) {
for (RenderBucket l = textureBuckets; l != null; l = l.next) {
l.compile(vboData, iboData);
}
//<<
@ -441,15 +441,15 @@ public class ElementLayers extends TileData {
}
public static void initRenderer(GL20 gl) {
RenderElement.GL = gl;
RenderBucket.GL = gl;
LineLayer.Renderer.init();
LineTexLayer.Renderer.init();
PolygonLayer.Renderer.init();
TextureLayer.Renderer.init();
BitmapLayer.Renderer.init();
MeshLayer.Renderer.init();
HairLineLayer.Renderer.init();
LineBucket.Renderer.init();
LineTexBucket.Renderer.init();
PolygonBucket.Renderer.init();
TextureBucket.Renderer.init();
BitmapBucket.Renderer.init();
MeshBucket.Renderer.init();
HairLineBucket.Renderer.init();
TextureItem.init(gl);
}

@ -14,7 +14,7 @@
* 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.elements;
package org.oscim.renderer.bucket;
import java.nio.ShortBuffer;
@ -25,8 +25,8 @@ import org.oscim.utils.pool.Inlist;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public final class SymbolLayer extends TextureLayer {
static final Logger log = LoggerFactory.getLogger(SymbolLayer.class);
public final class SymbolBucket extends TextureBucket {
static final Logger log = LoggerFactory.getLogger(SymbolBucket.class);
private final static float SCALE = 8.0f;
private final static int VERTICES_PER_SPRITE = 4;
@ -35,8 +35,8 @@ public final class SymbolLayer extends TextureLayer {
private TextureItem prevTextures;
private List<SymbolItem> mSymbols = new List<SymbolItem>();
public SymbolLayer() {
super(RenderElement.SYMBOL);
public SymbolBucket() {
super(RenderBucket.SYMBOL);
fixed = true;
}
@ -160,7 +160,7 @@ public final class SymbolLayer extends TextureLayer {
vertexItems.add(tx, ty, x2, y2, u2, v1);
/* six elements used to draw the four vertices */
t.indices += TextureLayer.INDICES_PER_SPRITE;
t.indices += TextureBucket.INDICES_PER_SPRITE;
}
numIndices += t.indices;
}

@ -14,7 +14,7 @@
* 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.elements;
package org.oscim.renderer.bucket;
import org.oscim.backend.canvas.Bitmap;
import org.oscim.core.PointF;

@ -14,14 +14,14 @@
* 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.elements;
package org.oscim.renderer.bucket;
import static org.oscim.renderer.MapRenderer.COORD_SCALE;
import org.oscim.backend.CanvasAdapter;
import org.oscim.backend.canvas.Canvas;
public class TextLayer extends TextureLayer {
public class TextBucket extends TextureBucket {
//static final Logger log = LoggerFactory.getLogger(TextureLayer.class);
protected final static int LBIT_MASK = 0xfffffffe;
@ -40,8 +40,8 @@ public class TextLayer extends TextureLayer {
this.labels = labels;
}
public TextLayer() {
super(RenderElement.SYMBOL);
public TextBucket() {
super(RenderBucket.SYMBOL);
mCanvas = CanvasAdapter.newCanvas();
fixed = true;
}
@ -141,7 +141,7 @@ public class TextLayer extends TextureLayer {
addItem(it, width, height, x, y);
/* six indices to draw the four vertices */
numIndices += TextureLayer.INDICES_PER_SPRITE;
numIndices += TextureBucket.INDICES_PER_SPRITE;
numVertices += 4;
if (it.next == null

@ -14,7 +14,7 @@
* 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.elements;
package org.oscim.renderer.bucket;
import org.oscim.theme.styles.TextStyle;
import org.oscim.utils.pool.Inlist;

@ -14,7 +14,7 @@
* 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.elements;
package org.oscim.renderer.bucket;
import static org.oscim.renderer.MapRenderer.COORD_SCALE;
@ -25,13 +25,13 @@ import org.oscim.renderer.GLShader;
import org.oscim.renderer.GLState;
import org.oscim.renderer.GLViewport;
import org.oscim.renderer.MapRenderer;
import org.oscim.renderer.elements.TextureItem.TexturePool;
import org.oscim.renderer.bucket.TextureItem.TexturePool;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public abstract class TextureLayer extends RenderElement {
public abstract class TextureBucket extends RenderBucket {
static final Logger log = LoggerFactory.getLogger(TextureLayer.class);
static final Logger log = LoggerFactory.getLogger(TextureBucket.class);
public final static int INDICES_PER_SPRITE = 6;
final static int VERTICES_PER_SPRITE = 4;
@ -46,7 +46,7 @@ public abstract class TextureLayer extends RenderElement {
TEXTURE_WIDTH,
TEXTURE_HEIGHT);
protected TextureLayer(int type) {
protected TextureBucket(int type) {
super(type);
}
@ -111,7 +111,7 @@ public abstract class TextureLayer extends RenderElement {
pool.init(0);
}
public static RenderElement draw(ElementLayers layers, RenderElement l,
public static RenderBucket draw(RenderBuckets layers, RenderBucket l,
GLViewport v, float scale) {
GLState.test(false, false);
@ -119,7 +119,7 @@ public abstract class TextureLayer extends RenderElement {
shader.useProgram();
TextureLayer tl = (TextureLayer) l;
TextureBucket tl = (TextureBucket) l;
GL.glUniform1f(shader.uScale, tl.fixed ? 1 / scale : 1);
v.proj.setAsUniform(shader.uProj);

@ -14,7 +14,7 @@
* 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.elements;
package org.oscim.renderer.bucket;
import java.util.ArrayList;

@ -14,11 +14,11 @@
* 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.elements;
package org.oscim.renderer.bucket;
import java.nio.ShortBuffer;
import org.oscim.renderer.elements.VertexData.Chunk;
import org.oscim.renderer.bucket.VertexData.Chunk;
import org.oscim.utils.pool.Inlist;
import org.oscim.utils.pool.SyncPool;
import org.slf4j.Logger;
@ -102,6 +102,9 @@ public class VertexData extends Inlist.List<Chunk> {
vertices = null;
}
/**
* @return sum of elements added
*/
public int compile(ShortBuffer sbuf) {
if (cur == null)
return 0;
@ -114,7 +117,6 @@ public class VertexData extends Inlist.List<Chunk> {
sbuf.put(it.vertices, 0, it.used);
}
dispose();
//log.debug("compiled {}", size);
return size;
}

@ -37,7 +37,7 @@ import org.oscim.backend.canvas.Paint.FontStyle;
import org.oscim.renderer.atlas.TextureAtlas;
import org.oscim.renderer.atlas.TextureAtlas.Rect;
import org.oscim.renderer.atlas.TextureRegion;
import org.oscim.renderer.elements.TextureItem;
import org.oscim.renderer.bucket.TextureItem;
import org.oscim.theme.IRenderTheme.ThemeException;
import org.oscim.theme.rule.Rule;
import org.oscim.theme.rule.Rule.Closed;

@ -19,7 +19,7 @@ package org.oscim.theme.styles;
import static org.oscim.backend.canvas.Color.parseColor;
import org.oscim.backend.canvas.Color;
import org.oscim.renderer.elements.TextureItem;
import org.oscim.renderer.bucket.TextureItem;
import org.oscim.theme.IRenderTheme.Callback;
/*TODO

@ -18,7 +18,7 @@ package org.oscim.utils;
import java.util.Arrays;
import org.oscim.renderer.elements.VertexData;
import org.oscim.renderer.bucket.VertexData;
import org.oscim.utils.math.MathUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;