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

View File

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

View File

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

View File

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

View File

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

View File

@ -6,12 +6,12 @@ import org.oscim.core.GeometryBuffer;
import org.oscim.gdx.GdxMap; import org.oscim.gdx.GdxMap;
import org.oscim.gdx.GdxMapApp; import org.oscim.gdx.GdxMapApp;
import org.oscim.layers.GenericLayer; import org.oscim.layers.GenericLayer;
import org.oscim.renderer.ElementRenderer; import org.oscim.renderer.BucketRenderer;
import org.oscim.renderer.GLViewport; import org.oscim.renderer.GLViewport;
import org.oscim.renderer.MapRenderer; import org.oscim.renderer.MapRenderer;
import org.oscim.renderer.elements.HairLineLayer; import org.oscim.renderer.bucket.HairLineBucket;
import org.oscim.renderer.elements.LineLayer; import org.oscim.renderer.bucket.LineBucket;
import org.oscim.renderer.elements.PolygonLayer; import org.oscim.renderer.bucket.PolygonBucket;
import org.oscim.theme.styles.AreaStyle; import org.oscim.theme.styles.AreaStyle;
import org.oscim.theme.styles.LineStyle; import org.oscim.theme.styles.LineStyle;
import org.oscim.theme.styles.LineStyle.LineBuilder; import org.oscim.theme.styles.LineStyle.LineBuilder;
@ -31,24 +31,24 @@ public class HairLineTest extends GdxMap {
return in; return in;
} }
static class Renderer extends ElementRenderer { static class Renderer extends BucketRenderer {
boolean init; boolean init;
LineBuilder l = new LineStyle.LineBuilder() LineBuilder l = new LineStyle.LineBuilder()
.color(Color.WHITE) .color(Color.WHITE)
.width(1.5f) .width(1.5f)
.cap(Cap.ROUND); .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)); //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); 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); //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) .color(Color.BLUE)
//.outline(Color.CYAN, 1) //.outline(Color.CYAN, 1)
.build()); .build());

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -23,7 +23,7 @@ import org.oscim.layers.tile.TileLoader;
import org.oscim.layers.tile.TileManager; import org.oscim.layers.tile.TileManager;
import org.oscim.layers.tile.VectorTileRenderer; import org.oscim.layers.tile.VectorTileRenderer;
import org.oscim.map.Map; 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.tiling.TileSource;
import org.oscim.utils.FastMath; import org.oscim.utils.FastMath;
import org.slf4j.Logger; import org.slf4j.Logger;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -16,7 +16,7 @@
*/ */
package org.oscim.layers.tile.vector.labeling; 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; import org.oscim.utils.geom.OBB2D;
final class Label extends TextItem { final class Label extends TextItem {

View File

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

View File

@ -1,6 +1,6 @@
package org.oscim.layers.tile.vector.labeling; 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; import org.oscim.utils.pool.Pool;
final class LabelPool extends Pool<TextItem> { final class LabelPool extends Pool<TextItem> {

View File

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

View File

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

View File

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

View File

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

View File

@ -18,7 +18,7 @@
package org.oscim.layers.tile.vector.labeling; package org.oscim.layers.tile.vector.labeling;
import org.oscim.core.Tile; 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.theme.styles.TextStyle;
import org.oscim.utils.geom.GeometryUtils; import org.oscim.utils.geom.GeometryUtils;
import org.oscim.utils.geom.LineClipper; import org.oscim.utils.geom.LineClipper;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -64,7 +64,7 @@ package org.oscim.renderer.atlas;
import java.util.HashMap; import java.util.HashMap;
import org.oscim.backend.canvas.Bitmap; 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.oscim.utils.pool.Inlist;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;

View File

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

View File

@ -14,7 +14,7 @@
* You should have received a copy of the GNU Lesser General Public License along with * You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>. * this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.oscim.renderer.elements; package org.oscim.renderer.bucket;
import java.nio.ShortBuffer; import java.nio.ShortBuffer;
@ -24,12 +24,12 @@ import org.oscim.renderer.GLShader;
import org.oscim.renderer.GLState; import org.oscim.renderer.GLState;
import org.oscim.renderer.GLViewport; import org.oscim.renderer.GLViewport;
import org.oscim.renderer.MapRenderer; 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. * 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 // TODO share layers.vbo() between BitmapTileLayers
// static final Logger log = LoggerFactory.getLogger(BitmapLayer.class); // 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 * @param reuseBitmap false if the Bitmap should be disposed
* after loading to texture. * after loading to texture.
*/ */
public BitmapLayer(boolean reuseBitmap) { public BitmapBucket(boolean reuseBitmap) {
super(RenderElement.BITMAP); super(RenderBucket.BITMAP);
mReuseBitmap = reuseBitmap; mReuseBitmap = reuseBitmap;
mVertices = new short[24]; mVertices = new short[24];
@ -75,7 +75,7 @@ public class BitmapLayer extends TextureLayer {
} }
TextureItem t = textures; TextureItem t = textures;
t.indices = TextureLayer.INDICES_PER_SPRITE; t.indices = TextureBucket.INDICES_PER_SPRITE;
} }
private void setVertices(ShortBuffer vboData) { private void setVertices(ShortBuffer vboData) {
@ -192,14 +192,14 @@ public class BitmapLayer extends TextureLayer {
shader = new Shader("texture_alpha"); 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) { float scale, float alpha) {
GLState.blend(true); GLState.blend(true);
Shader s = shader; Shader s = shader;
s.useProgram(); s.useProgram();
TextureLayer tl = (TextureLayer) renderElement; TextureBucket tl = (TextureBucket) renderElement;
GL.glUniform1f(s.uAlpha, alpha); GL.glUniform1f(s.uAlpha, alpha);
v.mvp.setAsUniform(s.uMVP); v.mvp.setAsUniform(s.uMVP);

View File

@ -14,7 +14,7 @@
* You should have received a copy of the GNU Lesser General Public License along with * You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>. * this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.oscim.renderer.elements; package org.oscim.renderer.bucket;
import java.nio.ShortBuffer; import java.nio.ShortBuffer;
@ -33,8 +33,8 @@ import org.oscim.utils.pool.Pool;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
public class ExtrusionLayer extends RenderElement { public class ExtrusionBucket extends RenderBucket {
static final Logger log = LoggerFactory.getLogger(ExtrusionLayer.class); static final Logger log = LoggerFactory.getLogger(ExtrusionBucket.class);
private static final float S = MapRenderer.COORD_SCALE; private static final float S = MapRenderer.COORD_SCALE;
@ -68,8 +68,8 @@ public class ExtrusionLayer extends RenderElement {
/** /**
* ExtrusionLayer for polygon geometries. * ExtrusionLayer for polygon geometries.
*/ */
public ExtrusionLayer(int level, float groundResolution, float[] colors) { public ExtrusionBucket(int level, float groundResolution, float[] colors) {
super(RenderElement.EXTRUSION); super(RenderBucket.EXTRUSION);
this.level = level; this.level = level;
this.colors = colors; this.colors = colors;
this.color = 0; this.color = 0;
@ -87,8 +87,8 @@ public class ExtrusionLayer extends RenderElement {
/** /**
* ExtrusionLayer for triangle geometries. * ExtrusionLayer for triangle geometries.
*/ */
public ExtrusionLayer(int level, float groundResolution, int color) { public ExtrusionBucket(int level, float groundResolution, int color) {
super(RenderElement.EXTRUSION); super(RenderBucket.EXTRUSION);
this.level = level; this.level = level;
this.color = color; this.color = color;
@ -620,7 +620,7 @@ public class ExtrusionLayer extends RenderElement {
} }
} }
public ExtrusionLayer next() { public ExtrusionBucket next() {
return (ExtrusionLayer) next; return (ExtrusionBucket) next;
} }
} }

View File

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

View File

@ -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_LINES;
import static org.oscim.backend.GL20.GL_SHORT; 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.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
public class HairLineLayer extends RenderElement { public class HairLineBucket extends RenderBucket {
static final Logger log = LoggerFactory.getLogger(HairLineLayer.class); static final Logger log = LoggerFactory.getLogger(HairLineBucket.class);
public LineStyle line; public LineStyle line;
public HairLineLayer(int level) { public HairLineBucket(int level) {
super(RenderElement.HAIRLINE); super(RenderBucket.HAIRLINE);
this.level = level; 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); GLState.blend(true);
Shader s = shader; Shader s = shader;
@ -120,7 +120,7 @@ public class HairLineLayer extends RenderElement {
s.set(v); s.set(v);
for (; l != null && l.type == HAIRLINE; l = l.next) { 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); GLUtils.setColor(s.uColor, ll.line.color, 1);

View File

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

View File

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

View File

@ -14,7 +14,7 @@
* You should have received a copy of the GNU Lesser General Public License along with * You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>. * this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.oscim.renderer.elements; package org.oscim.renderer.bucket;
import static org.oscim.backend.GL20.GL_LINES; import static org.oscim.backend.GL20.GL_LINES;
import static org.oscim.backend.GL20.GL_SHORT; 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.GLUtils;
import org.oscim.renderer.GLViewport; import org.oscim.renderer.GLViewport;
import org.oscim.renderer.MapRenderer; 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.theme.styles.AreaStyle;
import org.oscim.utils.ColorUtil; import org.oscim.utils.ColorUtil;
import org.oscim.utils.TessJNI; import org.oscim.utils.TessJNI;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
public class MeshLayer extends RenderElement { public class MeshBucket extends RenderBucket {
static final Logger log = LoggerFactory.getLogger(MeshLayer.class); static final Logger log = LoggerFactory.getLogger(MeshBucket.class);
static final boolean dbgRender = false; static final boolean dbgRender = false;
public AreaStyle area; public AreaStyle area;
@ -45,8 +45,8 @@ public class MeshLayer extends RenderElement {
TessJNI tess = new TessJNI(8); TessJNI tess = new TessJNI(8);
public MeshLayer(int level) { public MeshBucket(int level) {
super(RenderElement.MESH); super(RenderBucket.MESH);
this.level = level; 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); GLState.blend(true);
Shader s = shader; Shader s = shader;
@ -141,7 +141,7 @@ public class MeshLayer extends RenderElement {
GL.glUniform1f(s.uHeight, heightOffset); GL.glUniform1f(s.uHeight, heightOffset);
for (; l != null && l.type == MESH; l = l.next) { for (; l != null && l.type == MESH; l = l.next) {
MeshLayer ml = (MeshLayer) l; MeshBucket ml = (MeshBucket) l;
//if (ml.indicesVbo == null) //if (ml.indicesVbo == null)
// continue; // continue;

View File

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

View File

@ -14,14 +14,14 @@
* You should have received a copy of the GNU Lesser General Public License along with * You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>. * this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.oscim.renderer.elements; package org.oscim.renderer.bucket;
import java.nio.ShortBuffer; import java.nio.ShortBuffer;
import org.oscim.backend.GL20; import org.oscim.backend.GL20;
import org.oscim.utils.pool.Inlist; import org.oscim.utils.pool.Inlist;
public abstract class RenderElement extends Inlist<RenderElement> { public abstract class RenderBucket extends Inlist<RenderBucket> {
protected static GL20 GL; protected static GL20 GL;
public static final int LINE = 0; 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 vertexItems = new VertexData();
protected final VertexData indiceItems = new VertexData(); protected final VertexData indiceItems = new VertexData();
protected RenderElement(int type) { protected RenderBucket(int type) {
this.type = type; this.type = type;
} }

View File

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

View File

@ -14,7 +14,7 @@
* You should have received a copy of the GNU Lesser General Public License along with * You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>. * this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.oscim.renderer.elements; package org.oscim.renderer.bucket;
import java.nio.ShortBuffer; import java.nio.ShortBuffer;
@ -25,8 +25,8 @@ import org.oscim.utils.pool.Inlist;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
public final class SymbolLayer extends TextureLayer { public final class SymbolBucket extends TextureBucket {
static final Logger log = LoggerFactory.getLogger(SymbolLayer.class); static final Logger log = LoggerFactory.getLogger(SymbolBucket.class);
private final static float SCALE = 8.0f; private final static float SCALE = 8.0f;
private final static int VERTICES_PER_SPRITE = 4; private final static int VERTICES_PER_SPRITE = 4;
@ -35,8 +35,8 @@ public final class SymbolLayer extends TextureLayer {
private TextureItem prevTextures; private TextureItem prevTextures;
private List<SymbolItem> mSymbols = new List<SymbolItem>(); private List<SymbolItem> mSymbols = new List<SymbolItem>();
public SymbolLayer() { public SymbolBucket() {
super(RenderElement.SYMBOL); super(RenderBucket.SYMBOL);
fixed = true; fixed = true;
} }
@ -160,7 +160,7 @@ public final class SymbolLayer extends TextureLayer {
vertexItems.add(tx, ty, x2, y2, u2, v1); vertexItems.add(tx, ty, x2, y2, u2, v1);
/* six elements used to draw the four vertices */ /* six elements used to draw the four vertices */
t.indices += TextureLayer.INDICES_PER_SPRITE; t.indices += TextureBucket.INDICES_PER_SPRITE;
} }
numIndices += t.indices; numIndices += t.indices;
} }

View File

@ -14,7 +14,7 @@
* You should have received a copy of the GNU Lesser General Public License along with * You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>. * this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.oscim.renderer.elements; package org.oscim.renderer.bucket;
import org.oscim.backend.canvas.Bitmap; import org.oscim.backend.canvas.Bitmap;
import org.oscim.core.PointF; import org.oscim.core.PointF;

View File

@ -14,14 +14,14 @@
* You should have received a copy of the GNU Lesser General Public License along with * You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>. * this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.oscim.renderer.elements; package org.oscim.renderer.bucket;
import static org.oscim.renderer.MapRenderer.COORD_SCALE; import static org.oscim.renderer.MapRenderer.COORD_SCALE;
import org.oscim.backend.CanvasAdapter; import org.oscim.backend.CanvasAdapter;
import org.oscim.backend.canvas.Canvas; import org.oscim.backend.canvas.Canvas;
public class TextLayer extends TextureLayer { public class TextBucket extends TextureBucket {
//static final Logger log = LoggerFactory.getLogger(TextureLayer.class); //static final Logger log = LoggerFactory.getLogger(TextureLayer.class);
protected final static int LBIT_MASK = 0xfffffffe; protected final static int LBIT_MASK = 0xfffffffe;
@ -40,8 +40,8 @@ public class TextLayer extends TextureLayer {
this.labels = labels; this.labels = labels;
} }
public TextLayer() { public TextBucket() {
super(RenderElement.SYMBOL); super(RenderBucket.SYMBOL);
mCanvas = CanvasAdapter.newCanvas(); mCanvas = CanvasAdapter.newCanvas();
fixed = true; fixed = true;
} }
@ -141,7 +141,7 @@ public class TextLayer extends TextureLayer {
addItem(it, width, height, x, y); addItem(it, width, height, x, y);
/* six indices to draw the four vertices */ /* six indices to draw the four vertices */
numIndices += TextureLayer.INDICES_PER_SPRITE; numIndices += TextureBucket.INDICES_PER_SPRITE;
numVertices += 4; numVertices += 4;
if (it.next == null if (it.next == null

View File

@ -14,7 +14,7 @@
* You should have received a copy of the GNU Lesser General Public License along with * You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>. * this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.oscim.renderer.elements; package org.oscim.renderer.bucket;
import org.oscim.theme.styles.TextStyle; import org.oscim.theme.styles.TextStyle;
import org.oscim.utils.pool.Inlist; import org.oscim.utils.pool.Inlist;

View File

@ -14,7 +14,7 @@
* You should have received a copy of the GNU Lesser General Public License along with * You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>. * this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.oscim.renderer.elements; package org.oscim.renderer.bucket;
import static org.oscim.renderer.MapRenderer.COORD_SCALE; 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.GLState;
import org.oscim.renderer.GLViewport; import org.oscim.renderer.GLViewport;
import org.oscim.renderer.MapRenderer; 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.Logger;
import org.slf4j.LoggerFactory; 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; public final static int INDICES_PER_SPRITE = 6;
final static int VERTICES_PER_SPRITE = 4; final static int VERTICES_PER_SPRITE = 4;
@ -46,7 +46,7 @@ public abstract class TextureLayer extends RenderElement {
TEXTURE_WIDTH, TEXTURE_WIDTH,
TEXTURE_HEIGHT); TEXTURE_HEIGHT);
protected TextureLayer(int type) { protected TextureBucket(int type) {
super(type); super(type);
} }
@ -111,7 +111,7 @@ public abstract class TextureLayer extends RenderElement {
pool.init(0); pool.init(0);
} }
public static RenderElement draw(ElementLayers layers, RenderElement l, public static RenderBucket draw(RenderBuckets layers, RenderBucket l,
GLViewport v, float scale) { GLViewport v, float scale) {
GLState.test(false, false); GLState.test(false, false);
@ -119,7 +119,7 @@ public abstract class TextureLayer extends RenderElement {
shader.useProgram(); shader.useProgram();
TextureLayer tl = (TextureLayer) l; TextureBucket tl = (TextureBucket) l;
GL.glUniform1f(shader.uScale, tl.fixed ? 1 / scale : 1); GL.glUniform1f(shader.uScale, tl.fixed ? 1 / scale : 1);
v.proj.setAsUniform(shader.uProj); v.proj.setAsUniform(shader.uProj);

View File

@ -14,7 +14,7 @@
* You should have received a copy of the GNU Lesser General Public License along with * You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>. * this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.oscim.renderer.elements; package org.oscim.renderer.bucket;
import java.util.ArrayList; import java.util.ArrayList;

View File

@ -14,11 +14,11 @@
* You should have received a copy of the GNU Lesser General Public License along with * You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>. * this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.oscim.renderer.elements; package org.oscim.renderer.bucket;
import java.nio.ShortBuffer; 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.Inlist;
import org.oscim.utils.pool.SyncPool; import org.oscim.utils.pool.SyncPool;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -102,6 +102,9 @@ public class VertexData extends Inlist.List<Chunk> {
vertices = null; vertices = null;
} }
/**
* @return sum of elements added
*/
public int compile(ShortBuffer sbuf) { public int compile(ShortBuffer sbuf) {
if (cur == null) if (cur == null)
return 0; return 0;
@ -114,7 +117,6 @@ public class VertexData extends Inlist.List<Chunk> {
sbuf.put(it.vertices, 0, it.used); sbuf.put(it.vertices, 0, it.used);
} }
dispose(); dispose();
//log.debug("compiled {}", size);
return size; return size;
} }

View File

@ -37,7 +37,7 @@ import org.oscim.backend.canvas.Paint.FontStyle;
import org.oscim.renderer.atlas.TextureAtlas; import org.oscim.renderer.atlas.TextureAtlas;
import org.oscim.renderer.atlas.TextureAtlas.Rect; import org.oscim.renderer.atlas.TextureAtlas.Rect;
import org.oscim.renderer.atlas.TextureRegion; 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.IRenderTheme.ThemeException;
import org.oscim.theme.rule.Rule; import org.oscim.theme.rule.Rule;
import org.oscim.theme.rule.Rule.Closed; import org.oscim.theme.rule.Rule.Closed;

View File

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

View File

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