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:
parent
b4a567884f
commit
f6d85ce8bd
vtm-desktop/src/org/oscim/awt
vtm-jeo/src/org/oscim/layers
vtm-playground/src/org/oscim/test
vtm-web/src/org/oscim/gdx/emu/org/oscim/utils
vtm/src/org/oscim
layers
PathLayer.java
marker
tile
vector
renderer
BitmapRenderer.javaBucketRenderer.javaExtrusionRenderer.javaGridRenderer.javaMapRenderer.java
atlas
bucket
theme
utils
@ -25,7 +25,7 @@ import java.nio.IntBuffer;
|
||||
import javax.imageio.ImageIO;
|
||||
|
||||
import org.oscim.backend.canvas.Bitmap;
|
||||
import org.oscim.renderer.elements.TextureLayer;
|
||||
import org.oscim.renderer.bucket.TextureBucket;
|
||||
|
||||
import com.badlogic.gdx.Gdx;
|
||||
import com.badlogic.gdx.graphics.GL20;
|
||||
@ -77,10 +77,10 @@ public class AwtBitmap implements Bitmap {
|
||||
public void eraseColor(int transparent) {
|
||||
}
|
||||
|
||||
private final static IntBuffer tmpBuffer = BufferUtils.newIntBuffer(TextureLayer.TEXTURE_HEIGHT
|
||||
* TextureLayer.TEXTURE_WIDTH);
|
||||
private final static int[] tmpPixel = new int[TextureLayer.TEXTURE_HEIGHT
|
||||
* TextureLayer.TEXTURE_WIDTH];
|
||||
private final static IntBuffer tmpBuffer = BufferUtils.newIntBuffer(TextureBucket.TEXTURE_HEIGHT
|
||||
* TextureBucket.TEXTURE_WIDTH);
|
||||
private final static int[] tmpPixel = new int[TextureBucket.TEXTURE_HEIGHT
|
||||
* TextureBucket.TEXTURE_WIDTH];
|
||||
|
||||
private final static boolean WRITE_TEX = false;
|
||||
private int dbgCnt;
|
||||
@ -90,7 +90,7 @@ public class AwtBitmap implements Bitmap {
|
||||
int[] pixels;
|
||||
IntBuffer buffer;
|
||||
|
||||
if (width * height < TextureLayer.TEXTURE_HEIGHT * TextureLayer.TEXTURE_WIDTH) {
|
||||
if (width * height < TextureBucket.TEXTURE_HEIGHT * TextureBucket.TEXTURE_WIDTH) {
|
||||
pixels = tmpPixel;
|
||||
buffer = tmpBuffer;
|
||||
buffer.clear();
|
||||
|
@ -13,8 +13,8 @@ import org.jeo.map.RuleList;
|
||||
import org.jeo.map.Style;
|
||||
import org.oscim.jeo.JeoUtils;
|
||||
import org.oscim.map.Map;
|
||||
import org.oscim.renderer.elements.LineLayer;
|
||||
import org.oscim.renderer.elements.MeshLayer;
|
||||
import org.oscim.renderer.bucket.LineBucket;
|
||||
import org.oscim.renderer.bucket.MeshBucket;
|
||||
import org.oscim.theme.styles.AreaStyle;
|
||||
import org.oscim.theme.styles.LineStyle;
|
||||
import org.slf4j.Logger;
|
||||
@ -113,7 +113,7 @@ public class JeoVectorLayer extends JtsLayer {
|
||||
return;
|
||||
}
|
||||
|
||||
LineLayer ll = t.layers.getLineLayer(2);
|
||||
LineBucket ll = t.buckets.getLineBucket(2);
|
||||
if (ll.line == null) {
|
||||
RGB color = rule.color(f, CartoCSS.LINE_COLOR, RGB.black);
|
||||
float width = rule.number(f, CartoCSS.LINE_WIDTH, 1.2f);
|
||||
@ -126,7 +126,7 @@ public class JeoVectorLayer extends JtsLayer {
|
||||
|
||||
protected void addPolygon(Task t, Feature f, Rule rule, Geometry g) {
|
||||
|
||||
LineLayer ll = t.layers.getLineLayer(1);
|
||||
LineBucket ll = t.buckets.getLineBucket(1);
|
||||
|
||||
if (ll.line == null) {
|
||||
float width = rule.number(f, CartoCSS.LINE_WIDTH, 1.2f);
|
||||
@ -135,7 +135,7 @@ public class JeoVectorLayer extends JtsLayer {
|
||||
ll.setDropDistance(0.5f);
|
||||
}
|
||||
|
||||
MeshLayer mesh = t.layers.getMeshLayer(0);
|
||||
MeshBucket mesh = t.buckets.getMeshBucket(0);
|
||||
if (mesh.area == null) {
|
||||
int color = JeoUtils.color(rule.color(f, CartoCSS.POLYGON_FILL, RGB.red));
|
||||
mesh.area = new AreaStyle(color);
|
||||
|
@ -8,8 +8,8 @@ import org.oscim.core.MercatorProjection;
|
||||
import org.oscim.core.Tile;
|
||||
import org.oscim.layers.vector.AbstractVectorLayer;
|
||||
import org.oscim.map.Map;
|
||||
import org.oscim.renderer.elements.LineLayer;
|
||||
import org.oscim.renderer.elements.MeshLayer;
|
||||
import org.oscim.renderer.bucket.LineBucket;
|
||||
import org.oscim.renderer.bucket.MeshBucket;
|
||||
import org.oscim.utils.geom.SimplifyDP;
|
||||
import org.oscim.utils.geom.SimplifyVW;
|
||||
|
||||
@ -69,7 +69,7 @@ public abstract class JtsLayer extends AbstractVectorLayer<Geometry> {
|
||||
SimplifyDP mSimpDP = new SimplifyDP();
|
||||
SimplifyVW mSimpVW = new SimplifyVW();
|
||||
|
||||
protected void addPolygon(Task t, Geometry g, MeshLayer ml, LineLayer ll) {
|
||||
protected void addPolygon(Task t, Geometry g, MeshBucket ml, LineBucket ll) {
|
||||
mGeom.clear();
|
||||
mGeom.startPolygon();
|
||||
|
||||
@ -90,7 +90,7 @@ public abstract class JtsLayer extends AbstractVectorLayer<Geometry> {
|
||||
ml.addMesh(mGeom);
|
||||
}
|
||||
|
||||
protected void addLine(Task t, Geometry g, LineLayer ll) {
|
||||
protected void addLine(Task t, Geometry g, LineBucket ll) {
|
||||
mGeom.clear();
|
||||
mGeom.startLine();
|
||||
|
||||
|
@ -11,10 +11,10 @@ import org.jeo.map.Style;
|
||||
import org.oscim.backend.canvas.Color;
|
||||
import org.oscim.jeo.JeoUtils;
|
||||
import org.oscim.map.Map;
|
||||
import org.oscim.renderer.elements.LineLayer;
|
||||
import org.oscim.renderer.elements.MeshLayer;
|
||||
import org.oscim.renderer.elements.TextItem;
|
||||
import org.oscim.renderer.elements.TextLayer;
|
||||
import org.oscim.renderer.bucket.LineBucket;
|
||||
import org.oscim.renderer.bucket.MeshBucket;
|
||||
import org.oscim.renderer.bucket.TextBucket;
|
||||
import org.oscim.renderer.bucket.TextItem;
|
||||
import org.oscim.theme.styles.AreaStyle;
|
||||
import org.oscim.theme.styles.LineStyle;
|
||||
import org.oscim.theme.styles.TextStyle;
|
||||
@ -26,7 +26,7 @@ import com.vividsolutions.jts.geom.LineString;
|
||||
|
||||
public class OSMIndoorLayer extends JeoVectorLayer {
|
||||
|
||||
protected TextLayer mTextLayer;
|
||||
protected TextBucket mTextLayer;
|
||||
protected TextStyle mText = new TextBuilder()
|
||||
.setFontSize(16).setColor(Color.BLACK)
|
||||
.setStrokeWidth(2.2f).setStroke(Color.WHITE)
|
||||
@ -40,7 +40,9 @@ public class OSMIndoorLayer extends JeoVectorLayer {
|
||||
|
||||
@Override
|
||||
protected void processFeatures(Task t, Envelope b) {
|
||||
mTextLayer = t.layers.addTextLayer(new TextLayer());
|
||||
mTextLayer = new TextBucket();
|
||||
|
||||
t.buckets.set(mTextLayer);
|
||||
|
||||
super.processFeatures(t, b);
|
||||
|
||||
@ -58,7 +60,7 @@ public class OSMIndoorLayer extends JeoVectorLayer {
|
||||
|
||||
int level = getLevel(f);
|
||||
|
||||
LineLayer ll = t.layers.getLineLayer(level * 3 + 2);
|
||||
LineBucket ll = t.buckets.getLineBucket(level * 3 + 2);
|
||||
if (ll.line == null) {
|
||||
RGB color = rule.color(f, CartoCSS.LINE_COLOR, RGB.black);
|
||||
float width = rule.number(f, CartoCSS.LINE_WIDTH, 1.2f);
|
||||
@ -73,7 +75,7 @@ public class OSMIndoorLayer extends JeoVectorLayer {
|
||||
protected void addPolygon(Task t, Feature f, Rule rule, Geometry g) {
|
||||
int level = getLevel(f);
|
||||
|
||||
LineLayer ll = t.layers.getLineLayer(level * 3 + 1);
|
||||
LineBucket ll = t.buckets.getLineBucket(level * 3 + 1);
|
||||
|
||||
boolean active = activeLevels[level + 1];
|
||||
|
||||
@ -89,7 +91,7 @@ public class OSMIndoorLayer extends JeoVectorLayer {
|
||||
ll.setDropDistance(0);
|
||||
}
|
||||
|
||||
MeshLayer mesh = t.layers.getMeshLayer(level * 3);
|
||||
MeshBucket mesh = t.buckets.getMeshBucket(level * 3);
|
||||
if (mesh.area == null) {
|
||||
int color = JeoUtils.color(rule.color(f, CartoCSS.POLYGON_FILL, RGB.red));
|
||||
if (level > -2 && !active)
|
||||
|
@ -6,12 +6,12 @@ import org.oscim.core.GeometryBuffer;
|
||||
import org.oscim.gdx.GdxMap;
|
||||
import org.oscim.gdx.GdxMapApp;
|
||||
import org.oscim.layers.GenericLayer;
|
||||
import org.oscim.renderer.ElementRenderer;
|
||||
import org.oscim.renderer.BucketRenderer;
|
||||
import org.oscim.renderer.GLViewport;
|
||||
import org.oscim.renderer.MapRenderer;
|
||||
import org.oscim.renderer.elements.HairLineLayer;
|
||||
import org.oscim.renderer.elements.LineLayer;
|
||||
import org.oscim.renderer.elements.PolygonLayer;
|
||||
import org.oscim.renderer.bucket.HairLineBucket;
|
||||
import org.oscim.renderer.bucket.LineBucket;
|
||||
import org.oscim.renderer.bucket.PolygonBucket;
|
||||
import org.oscim.theme.styles.AreaStyle;
|
||||
import org.oscim.theme.styles.LineStyle;
|
||||
import org.oscim.theme.styles.LineStyle.LineBuilder;
|
||||
@ -31,24 +31,24 @@ public class HairLineTest extends GdxMap {
|
||||
return in;
|
||||
}
|
||||
|
||||
static class Renderer extends ElementRenderer {
|
||||
static class Renderer extends BucketRenderer {
|
||||
boolean init;
|
||||
LineBuilder l = new LineStyle.LineBuilder()
|
||||
.color(Color.WHITE)
|
||||
.width(1.5f)
|
||||
.cap(Cap.ROUND);
|
||||
|
||||
HairLineLayer ll = layers.addHairLineLayer(1, l.build());
|
||||
HairLineBucket ll = buckets.addHairLineBucket(1, l.build());
|
||||
|
||||
//LineLayer ll = layers.addLineLayer(1, new LineStyle(Color.fade(Color.CYAN, 0.6f), 2.5f));
|
||||
LineStyle style = new LineStyle(Color.fade(Color.MAGENTA, 0.6f), 2.5f);
|
||||
|
||||
HairLineLayer l1 = layers.addHairLineLayer(2, style);
|
||||
HairLineBucket l1 = buckets.addHairLineBucket(2, style);
|
||||
|
||||
//style = new LineStyle(Color.fade(Color.LTGRAY, 0.8f), 1.5f);
|
||||
LineLayer l2 = layers.addLineLayer(3, style);
|
||||
LineBucket l2 = buckets.addLineBucket(3, style);
|
||||
|
||||
PolygonLayer pl = layers.addPolygonLayer(4, new AreaStyle.AreaBuilder()
|
||||
PolygonBucket pl = buckets.addPolygonBucket(4, new AreaStyle.AreaBuilder()
|
||||
.color(Color.BLUE)
|
||||
//.outline(Color.CYAN, 1)
|
||||
.build());
|
||||
|
@ -6,11 +6,11 @@ import org.oscim.core.GeometryBuffer;
|
||||
import org.oscim.gdx.GdxMap;
|
||||
import org.oscim.gdx.GdxMapApp;
|
||||
import org.oscim.layers.GenericLayer;
|
||||
import org.oscim.renderer.ElementRenderer;
|
||||
import org.oscim.renderer.BucketRenderer;
|
||||
import org.oscim.renderer.GLViewport;
|
||||
import org.oscim.renderer.MapRenderer;
|
||||
import org.oscim.renderer.elements.LineLayer;
|
||||
import org.oscim.renderer.elements.LineTexLayer;
|
||||
import org.oscim.renderer.bucket.LineBucket;
|
||||
import org.oscim.renderer.bucket.LineTexBucket;
|
||||
import org.oscim.theme.styles.LineStyle;
|
||||
|
||||
import com.badlogic.gdx.Input;
|
||||
@ -75,10 +75,10 @@ public class LineRenderTest extends GdxMap {
|
||||
LineStyle outline2 = new LineStyle(0, null, Color.RED, 2.0f, Cap.ROUND, false, 0,
|
||||
0, 0, 0, 0, true);
|
||||
|
||||
LineLayer ol = l.layers.addLineLayer(0, outline);
|
||||
LineLayer ol2 = l.layers.addLineLayer(5, outline2);
|
||||
LineBucket ol = l.buckets.addLineBucket(0, outline);
|
||||
LineBucket ol2 = l.buckets.addLineBucket(5, outline2);
|
||||
|
||||
LineLayer ll = l.layers.addLineLayer(10, line1);
|
||||
LineBucket ll = l.buckets.addLineBucket(10, line1);
|
||||
ll.addLine(g.translate(0, -20));
|
||||
ll.addLine(g.translate(0, 10.5f));
|
||||
addCircle(-200, -200, 100, ll);
|
||||
@ -86,7 +86,7 @@ public class LineRenderTest extends GdxMap {
|
||||
if (addOutline)
|
||||
ol.addOutline(ll);
|
||||
|
||||
ll = l.layers.addLineLayer(20, line2);
|
||||
ll = l.buckets.addLineBucket(20, line2);
|
||||
ll.addLine(g.translate(0, 10.5f));
|
||||
ll.addLine(g.translate(0, 10.5f));
|
||||
addCircle(200, -200, 100, ll);
|
||||
@ -94,7 +94,7 @@ public class LineRenderTest extends GdxMap {
|
||||
if (addOutline)
|
||||
ol.addOutline(ll);
|
||||
|
||||
LineTexLayer lt = l.layers.getLineTexLayer(30);
|
||||
LineTexBucket lt = l.buckets.getLineTexBucket(30);
|
||||
lt.line = line3;
|
||||
lt.addLine(g.translate(0, 10.5f));
|
||||
lt.addLine(g.translate(0, 10.5f));
|
||||
@ -103,7 +103,7 @@ public class LineRenderTest extends GdxMap {
|
||||
// if (addOutline)
|
||||
// ol2.addOutline(ll);
|
||||
|
||||
ll = l.layers.addLineLayer(40, line4);
|
||||
ll = l.buckets.addLineBucket(40, line4);
|
||||
ll.addLine(g.translate(0, 10.5f));
|
||||
ll.addLine(g.translate(0, 10.5f));
|
||||
addCircle(-200, 200, 100, ll);
|
||||
@ -112,7 +112,7 @@ public class LineRenderTest extends GdxMap {
|
||||
ol2.addOutline(ll);
|
||||
}
|
||||
|
||||
void addCircle(float cx, float cy, float radius, LineLayer ll) {
|
||||
void addCircle(float cx, float cy, float radius, LineBucket ll) {
|
||||
GeometryBuffer g = mGeom;
|
||||
|
||||
g.clear();
|
||||
@ -128,7 +128,7 @@ public class LineRenderTest extends GdxMap {
|
||||
}
|
||||
}
|
||||
|
||||
void addCircle(float cx, float cy, float radius, LineTexLayer ll) {
|
||||
void addCircle(float cx, float cy, float radius, LineTexBucket ll) {
|
||||
GeometryBuffer g = mGeom;
|
||||
|
||||
g.clear();
|
||||
@ -173,14 +173,14 @@ public class LineRenderTest extends GdxMap {
|
||||
return true;
|
||||
}
|
||||
|
||||
class LineTest extends ElementRenderer {
|
||||
class LineTest extends BucketRenderer {
|
||||
|
||||
public LineTest() {
|
||||
mMapPosition.scale = 0;
|
||||
}
|
||||
|
||||
public synchronized void clear() {
|
||||
layers.clear();
|
||||
buckets.clear();
|
||||
setReady(false);
|
||||
}
|
||||
|
||||
|
@ -5,10 +5,10 @@ import org.oscim.core.GeometryBuffer;
|
||||
import org.oscim.gdx.GdxMap;
|
||||
import org.oscim.gdx.GdxMapApp;
|
||||
import org.oscim.layers.GenericLayer;
|
||||
import org.oscim.renderer.ElementRenderer;
|
||||
import org.oscim.renderer.BucketRenderer;
|
||||
import org.oscim.renderer.GLViewport;
|
||||
import org.oscim.renderer.MapRenderer;
|
||||
import org.oscim.renderer.elements.LineLayer;
|
||||
import org.oscim.renderer.bucket.LineBucket;
|
||||
import org.oscim.theme.styles.LineStyle;
|
||||
|
||||
import com.badlogic.gdx.Gdx;
|
||||
@ -38,10 +38,10 @@ public class LineTest extends GdxMap {
|
||||
|
||||
@Override
|
||||
protected void createLayers() {
|
||||
mMap.layers().add(new GenericLayer(mMap, new ElementRenderer() {
|
||||
mMap.layers().add(new GenericLayer(mMap, new BucketRenderer() {
|
||||
boolean init;
|
||||
|
||||
LineLayer ll = layers.addLineLayer(0,
|
||||
LineBucket ll = buckets.addLineBucket(0,
|
||||
new LineStyle(Color.fade(Color.CYAN, 0.5f), 1.5f));
|
||||
|
||||
GeometryBuffer g = new GeometryBuffer(10, 1);
|
||||
@ -79,8 +79,8 @@ public class LineTest extends GdxMap {
|
||||
// compile();
|
||||
}
|
||||
|
||||
layers.clear();
|
||||
layers.setBaseLayers(ll);
|
||||
buckets.clear();
|
||||
buckets.setBaseBuckets(ll);
|
||||
g.clear();
|
||||
for (int i = 0; i < 60; i++) {
|
||||
g.startLine();
|
||||
|
@ -20,8 +20,8 @@ import org.oscim.backend.CanvasAdapter;
|
||||
import org.oscim.backend.canvas.Canvas;
|
||||
import org.oscim.renderer.atlas.TextureAtlas;
|
||||
import org.oscim.renderer.atlas.TextureAtlas.Rect;
|
||||
import org.oscim.renderer.elements.TextureItem;
|
||||
import org.oscim.renderer.elements.TextureItem.TexturePool;
|
||||
import org.oscim.renderer.bucket.TextureItem;
|
||||
import org.oscim.renderer.bucket.TextureItem.TexturePool;
|
||||
import org.oscim.utils.pool.Inlist;
|
||||
|
||||
/**
|
||||
|
@ -16,8 +16,8 @@ import org.oscim.layers.tile.TileSet;
|
||||
import org.oscim.layers.tile.vector.VectorTileLayer;
|
||||
import org.oscim.layers.tile.vector.VectorTileLayer.TileLoaderProcessHook;
|
||||
import org.oscim.map.Map;
|
||||
import org.oscim.renderer.elements.ElementLayers;
|
||||
import org.oscim.renderer.elements.SymbolItem;
|
||||
import org.oscim.renderer.bucket.RenderBuckets;
|
||||
import org.oscim.renderer.bucket.SymbolItem;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@ -59,7 +59,7 @@ public class Poi3DLayer extends Layer implements Map.UpdateListener {
|
||||
tileLayer.addHook(new TileLoaderProcessHook() {
|
||||
|
||||
@Override
|
||||
public boolean process(MapTile tile, ElementLayers layers, MapElement element) {
|
||||
public boolean process(MapTile tile, RenderBuckets buckets, MapElement element) {
|
||||
|
||||
if (!element.tags.contains(TREE_TAG))
|
||||
return false;
|
||||
|
@ -7,14 +7,14 @@ import org.oscim.backend.canvas.Paint.Cap;
|
||||
import org.oscim.gdx.GdxMap;
|
||||
import org.oscim.gdx.GdxMapApp;
|
||||
import org.oscim.layers.GenericLayer;
|
||||
import org.oscim.renderer.ElementRenderer;
|
||||
import org.oscim.renderer.BucketRenderer;
|
||||
import org.oscim.renderer.GLViewport;
|
||||
import org.oscim.renderer.atlas.TextureAtlas;
|
||||
import org.oscim.renderer.atlas.TextureAtlas.Rect;
|
||||
import org.oscim.renderer.atlas.TextureAtlas.Slot;
|
||||
import org.oscim.renderer.elements.LineLayer;
|
||||
import org.oscim.renderer.elements.TextItem;
|
||||
import org.oscim.renderer.elements.TextLayer;
|
||||
import org.oscim.renderer.bucket.LineBucket;
|
||||
import org.oscim.renderer.bucket.TextBucket;
|
||||
import org.oscim.renderer.bucket.TextItem;
|
||||
import org.oscim.theme.styles.LineStyle;
|
||||
import org.oscim.theme.styles.TextStyle;
|
||||
import org.oscim.theme.styles.TextStyle.TextBuilder;
|
||||
@ -34,7 +34,7 @@ public class AtlasTest extends GdxMap {
|
||||
GdxMapApp.run(new AtlasTest(), null, 400);
|
||||
}
|
||||
|
||||
static class AtlasRenderLayer extends ElementRenderer {
|
||||
static class AtlasRenderLayer extends BucketRenderer {
|
||||
|
||||
Logger log = LoggerFactory.getLogger(AtlasRenderLayer.class);
|
||||
|
||||
@ -42,21 +42,21 @@ public class AtlasTest extends GdxMap {
|
||||
|
||||
TextureAtlas mAtlas = TextureAtlas.create(2048, 2048, 1);
|
||||
|
||||
LineLayer ll = layers.getLineLayer(0);
|
||||
LineBucket ll = buckets.getLineBucket(0);
|
||||
ll.line = new LineStyle(Color.BLUE, 3, Cap.BUTT);
|
||||
ll.scale = 1f;
|
||||
|
||||
LineLayer ll2 = layers.getLineLayer(1);
|
||||
LineBucket ll2 = buckets.getLineBucket(1);
|
||||
ll2.line = new LineStyle(Color.RED, 3, Cap.BUTT);
|
||||
ll2.scale = 1f;
|
||||
|
||||
LineLayer ll3 = layers.getLineLayer(2);
|
||||
LineBucket ll3 = buckets.getLineBucket(2);
|
||||
ll3.line = new LineStyle(Color.GREEN, 3, Cap.BUTT);
|
||||
ll3.scale = 1f;
|
||||
|
||||
TextLayer tl = new TextLayer();
|
||||
TextBucket tl = new TextBucket();
|
||||
TextStyle t = new TextBuilder().setFontSize(20).setColor(Color.BLACK).build();
|
||||
layers.setTextureLayers(tl);
|
||||
buckets.setTextureBuckets(tl);
|
||||
|
||||
float[] points = new float[10];
|
||||
|
||||
|
@ -8,9 +8,9 @@ import org.oscim.core.Point;
|
||||
import org.oscim.gdx.GdxMap;
|
||||
import org.oscim.gdx.GdxMapApp;
|
||||
import org.oscim.layers.GenericLayer;
|
||||
import org.oscim.renderer.ElementRenderer;
|
||||
import org.oscim.renderer.BucketRenderer;
|
||||
import org.oscim.renderer.GLViewport;
|
||||
import org.oscim.renderer.elements.LineLayer;
|
||||
import org.oscim.renderer.bucket.LineBucket;
|
||||
import org.oscim.theme.styles.LineStyle;
|
||||
import org.oscim.utils.geom.BezierPath;
|
||||
|
||||
@ -26,7 +26,7 @@ public class BezierTest extends GdxMap {
|
||||
GdxMapApp.run(new BezierTest(), null, 400);
|
||||
}
|
||||
|
||||
static class BezierPathLayer extends ElementRenderer {
|
||||
static class BezierPathLayer extends BucketRenderer {
|
||||
|
||||
public BezierPathLayer() {
|
||||
mMapPosition.scale = 0;
|
||||
@ -42,7 +42,7 @@ public class BezierTest extends GdxMap {
|
||||
// System.out.println(pts[i]);
|
||||
g.addPoint(pts[i]);
|
||||
}
|
||||
LineLayer ll = layers.addLineLayer(0, new LineStyle(Color.BLUE, 2f));
|
||||
LineBucket ll = buckets.addLineBucket(0, new LineStyle(Color.BLUE, 2f));
|
||||
ll.addLine(g);
|
||||
|
||||
List<Point> ctrl = BezierPath.cubicSplineControlPoints(pts, 0.1f);
|
||||
@ -64,13 +64,13 @@ public class BezierTest extends GdxMap {
|
||||
}
|
||||
p0 = p3;
|
||||
}
|
||||
ll = layers.addLineLayer(1, new LineStyle(Color.CYAN, 2f));
|
||||
ll = buckets.addLineBucket(1, new LineStyle(Color.CYAN, 2f));
|
||||
ll.addLine(g);
|
||||
|
||||
}
|
||||
|
||||
public synchronized void clear() {
|
||||
layers.clear();
|
||||
buckets.clear();
|
||||
setReady(false);
|
||||
}
|
||||
|
||||
|
@ -8,7 +8,7 @@ import org.oscim.gdx.GdxMap;
|
||||
import org.oscim.gdx.GdxMapApp;
|
||||
import org.oscim.layers.GenericLayer;
|
||||
import org.oscim.renderer.BufferObject;
|
||||
import org.oscim.renderer.ElementRenderer;
|
||||
import org.oscim.renderer.BucketRenderer;
|
||||
import org.oscim.renderer.GLShader;
|
||||
import org.oscim.renderer.GLState;
|
||||
import org.oscim.renderer.GLUtils;
|
||||
@ -35,7 +35,7 @@ public class HexagonRenderTest extends GdxMap {
|
||||
* based on chapter 2 from:
|
||||
* https://github.com/dalinaum/opengl-es-book-samples/tree/master/Android */
|
||||
|
||||
static class HexagonRenderer extends ElementRenderer {
|
||||
static class HexagonRenderer extends BucketRenderer {
|
||||
|
||||
private int mProgramObject;
|
||||
private int hVertexPosition;
|
||||
|
@ -17,17 +17,17 @@
|
||||
package org.oscim.test.renderer;
|
||||
|
||||
import org.oscim.backend.CanvasAdapter;
|
||||
import org.oscim.renderer.ElementRenderer;
|
||||
import org.oscim.renderer.BucketRenderer;
|
||||
import org.oscim.renderer.GLViewport;
|
||||
import org.oscim.renderer.elements.SymbolItem;
|
||||
import org.oscim.renderer.elements.SymbolLayer;
|
||||
import org.oscim.renderer.bucket.SymbolBucket;
|
||||
import org.oscim.renderer.bucket.SymbolItem;
|
||||
|
||||
public class SymbolRenderLayer extends ElementRenderer {
|
||||
public class SymbolRenderLayer extends BucketRenderer {
|
||||
boolean initialize = true;
|
||||
|
||||
public SymbolRenderLayer() {
|
||||
SymbolLayer l = new SymbolLayer();
|
||||
layers.setTextureLayers(l);
|
||||
SymbolBucket l = new SymbolBucket();
|
||||
buckets.setTextureBuckets(l);
|
||||
|
||||
SymbolItem it = SymbolItem.pool.get();
|
||||
it.billboard = false;
|
||||
|
@ -1,7 +1,7 @@
|
||||
package org.oscim.utils;
|
||||
|
||||
import org.oscim.core.GeometryBuffer;
|
||||
import org.oscim.renderer.elements.VertexData;
|
||||
import org.oscim.renderer.bucket.VertexData;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
@ -28,10 +28,10 @@ import org.oscim.core.MapPosition;
|
||||
import org.oscim.core.MercatorProjection;
|
||||
import org.oscim.core.Tile;
|
||||
import org.oscim.map.Map;
|
||||
import org.oscim.renderer.ElementRenderer;
|
||||
import org.oscim.renderer.BucketRenderer;
|
||||
import org.oscim.renderer.GLViewport;
|
||||
import org.oscim.renderer.elements.ElementLayers;
|
||||
import org.oscim.renderer.elements.LineLayer;
|
||||
import org.oscim.renderer.bucket.LineBucket;
|
||||
import org.oscim.renderer.bucket.RenderBuckets;
|
||||
import org.oscim.theme.styles.LineStyle;
|
||||
import org.oscim.utils.FastMath;
|
||||
import org.oscim.utils.async.SimpleWorker;
|
||||
@ -188,11 +188,11 @@ public class PathLayer extends Layer {
|
||||
/***
|
||||
* everything below runs on GL- and Worker-Thread
|
||||
***/
|
||||
final class RenderPath extends ElementRenderer {
|
||||
final class RenderPath extends BucketRenderer {
|
||||
|
||||
public RenderPath() {
|
||||
|
||||
layers.addLineLayer(0, mLineStyle);
|
||||
buckets.addLineBucket(0, mLineStyle);
|
||||
}
|
||||
|
||||
private int mCurX = -1;
|
||||
@ -221,13 +221,13 @@ public class PathLayer extends Layer {
|
||||
mMapPosition.copy(t.pos);
|
||||
|
||||
// compile new layers
|
||||
layers.setBaseLayers(t.layer.getBaseLayers());
|
||||
buckets.setBaseBuckets(t.bucket.getBaseBuckets());
|
||||
compile();
|
||||
}
|
||||
}
|
||||
|
||||
final static class Task {
|
||||
ElementLayers layer = new ElementLayers();
|
||||
RenderBuckets bucket = new RenderBuckets();
|
||||
MapPosition pos = new MapPosition();
|
||||
}
|
||||
|
||||
@ -294,16 +294,16 @@ public class PathLayer extends Layer {
|
||||
|
||||
}
|
||||
if (size == 0) {
|
||||
if (task.layer.getBaseLayers() != null) {
|
||||
task.layer.clear();
|
||||
if (task.bucket.getBaseBuckets() != null) {
|
||||
task.bucket.clear();
|
||||
mMap.render();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
ElementLayers layers = task.layer;
|
||||
RenderBuckets layers = task.bucket;
|
||||
|
||||
LineLayer ll = layers.getLineLayer(0);
|
||||
LineBucket ll = layers.getLineBucket(0);
|
||||
ll.line = mLineStyle;
|
||||
ll.scale = ll.line.width;
|
||||
|
||||
@ -398,7 +398,7 @@ public class PathLayer extends Layer {
|
||||
|
||||
@Override
|
||||
public void cleanup(Task task) {
|
||||
task.layer.clear();
|
||||
task.bucket.clear();
|
||||
}
|
||||
|
||||
private int addPoint(float[] points, int i, int x, int y) {
|
||||
|
@ -22,18 +22,18 @@ import java.util.Comparator;
|
||||
import org.oscim.core.MercatorProjection;
|
||||
import org.oscim.core.Point;
|
||||
import org.oscim.core.Tile;
|
||||
import org.oscim.renderer.ElementRenderer;
|
||||
import org.oscim.renderer.BucketRenderer;
|
||||
import org.oscim.renderer.GLViewport;
|
||||
import org.oscim.renderer.elements.SymbolItem;
|
||||
import org.oscim.renderer.elements.SymbolLayer;
|
||||
import org.oscim.renderer.bucket.SymbolBucket;
|
||||
import org.oscim.renderer.bucket.SymbolItem;
|
||||
import org.oscim.utils.TimSort;
|
||||
import org.oscim.utils.geom.GeometryUtils;
|
||||
|
||||
public class MarkerRenderer extends ElementRenderer {
|
||||
public class MarkerRenderer extends BucketRenderer {
|
||||
|
||||
protected final MarkerSymbol mDefaultMarker;
|
||||
|
||||
private final SymbolLayer mSymbolLayer;
|
||||
private final SymbolBucket mSymbolLayer;
|
||||
private final float[] mBox = new float[8];
|
||||
private final MarkerLayer<MarkerItem> mMarkerLayer;
|
||||
private final Point mMapPoint = new Point();
|
||||
@ -61,7 +61,7 @@ public class MarkerRenderer extends ElementRenderer {
|
||||
}
|
||||
|
||||
public MarkerRenderer(MarkerLayer<MarkerItem> markerLayer, MarkerSymbol defaultSymbol) {
|
||||
mSymbolLayer = new SymbolLayer();
|
||||
mSymbolLayer = new SymbolBucket();
|
||||
mMarkerLayer = markerLayer;
|
||||
mDefaultMarker = defaultSymbol;
|
||||
}
|
||||
@ -86,8 +86,8 @@ public class MarkerRenderer extends ElementRenderer {
|
||||
long flip = (long) (Tile.SIZE * v.pos.scale) >> 1;
|
||||
|
||||
if (mItems == null) {
|
||||
if (layers.getTextureLayers() != null) {
|
||||
layers.clear();
|
||||
if (buckets.getTextureBuckets() != null) {
|
||||
buckets.clear();
|
||||
compile();
|
||||
}
|
||||
return;
|
||||
@ -131,7 +131,7 @@ public class MarkerRenderer extends ElementRenderer {
|
||||
* or more than 10 of the current items became invisible */
|
||||
//if ((numVisible == 0) && (changedVisible == 0 && changesInvisible < 10))
|
||||
// return;
|
||||
layers.clear();
|
||||
buckets.clear();
|
||||
|
||||
if (numVisible == 0) {
|
||||
compile();
|
||||
@ -162,8 +162,8 @@ public class MarkerRenderer extends ElementRenderer {
|
||||
mSymbolLayer.pushSymbol(s);
|
||||
}
|
||||
|
||||
layers.setTextureLayers(mSymbolLayer);
|
||||
layers.prepare();
|
||||
buckets.setTextureBuckets(mSymbolLayer);
|
||||
buckets.prepare();
|
||||
|
||||
compile();
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ import static org.oscim.layers.tile.MapTile.State.READY;
|
||||
import org.oscim.core.Tile;
|
||||
import org.oscim.layers.tile.vector.VectorTileLoader;
|
||||
import org.oscim.layers.tile.vector.labeling.LabelTileLoaderHook;
|
||||
import org.oscim.renderer.elements.ElementLayers;
|
||||
import org.oscim.renderer.bucket.RenderBuckets;
|
||||
import org.oscim.utils.pool.Inlist;
|
||||
import org.oscim.utils.quadtree.TileIndex;
|
||||
import org.oscim.utils.quadtree.TreeNode;
|
||||
@ -266,11 +266,11 @@ public class MapTile extends Tile {
|
||||
* Get the default ElementLayers which are added
|
||||
* by {@link VectorTileLoader}
|
||||
*/
|
||||
public ElementLayers getLayers() {
|
||||
if (!(data instanceof ElementLayers))
|
||||
public RenderBuckets getLayers() {
|
||||
if (!(data instanceof RenderBuckets))
|
||||
return null;
|
||||
|
||||
return (ElementLayers) data;
|
||||
return (RenderBuckets) data;
|
||||
}
|
||||
|
||||
public TileData getData(Object id) {
|
||||
|
@ -26,7 +26,7 @@ import org.oscim.renderer.BufferObject;
|
||||
import org.oscim.renderer.GLViewport;
|
||||
import org.oscim.renderer.LayerRenderer;
|
||||
import org.oscim.renderer.MapRenderer;
|
||||
import org.oscim.renderer.elements.ElementLayers;
|
||||
import org.oscim.renderer.bucket.RenderBuckets;
|
||||
import org.oscim.utils.ScanBox;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -175,7 +175,7 @@ public abstract class TileRenderer extends LayerRenderer {
|
||||
|
||||
private static int uploadTileData(MapTile tile) {
|
||||
tile.state = READY;
|
||||
ElementLayers layers = tile.getLayers();
|
||||
RenderBuckets layers = tile.getLayers();
|
||||
|
||||
/* tile might only contain label layers */
|
||||
if (layers == null)
|
||||
|
@ -5,12 +5,12 @@ import static org.oscim.layers.tile.MapTile.PROXY_GRAMPA;
|
||||
import static org.oscim.layers.tile.MapTile.PROXY_PARENT;
|
||||
import static org.oscim.layers.tile.MapTile.State.READY;
|
||||
import static org.oscim.renderer.MapRenderer.COORD_SCALE;
|
||||
import static org.oscim.renderer.elements.RenderElement.BITMAP;
|
||||
import static org.oscim.renderer.elements.RenderElement.HAIRLINE;
|
||||
import static org.oscim.renderer.elements.RenderElement.LINE;
|
||||
import static org.oscim.renderer.elements.RenderElement.MESH;
|
||||
import static org.oscim.renderer.elements.RenderElement.POLYGON;
|
||||
import static org.oscim.renderer.elements.RenderElement.TEXLINE;
|
||||
import static org.oscim.renderer.bucket.RenderBucket.BITMAP;
|
||||
import static org.oscim.renderer.bucket.RenderBucket.HAIRLINE;
|
||||
import static org.oscim.renderer.bucket.RenderBucket.LINE;
|
||||
import static org.oscim.renderer.bucket.RenderBucket.MESH;
|
||||
import static org.oscim.renderer.bucket.RenderBucket.POLYGON;
|
||||
import static org.oscim.renderer.bucket.RenderBucket.TEXLINE;
|
||||
|
||||
import org.oscim.backend.GL20;
|
||||
import org.oscim.backend.canvas.Color;
|
||||
@ -19,14 +19,14 @@ import org.oscim.core.Tile;
|
||||
import org.oscim.renderer.GLMatrix;
|
||||
import org.oscim.renderer.GLViewport;
|
||||
import org.oscim.renderer.MapRenderer;
|
||||
import org.oscim.renderer.elements.BitmapLayer;
|
||||
import org.oscim.renderer.elements.ElementLayers;
|
||||
import org.oscim.renderer.elements.HairLineLayer;
|
||||
import org.oscim.renderer.elements.LineLayer;
|
||||
import org.oscim.renderer.elements.LineTexLayer;
|
||||
import org.oscim.renderer.elements.MeshLayer;
|
||||
import org.oscim.renderer.elements.PolygonLayer;
|
||||
import org.oscim.renderer.elements.RenderElement;
|
||||
import org.oscim.renderer.bucket.BitmapBucket;
|
||||
import org.oscim.renderer.bucket.HairLineBucket;
|
||||
import org.oscim.renderer.bucket.LineBucket;
|
||||
import org.oscim.renderer.bucket.LineTexBucket;
|
||||
import org.oscim.renderer.bucket.MeshBucket;
|
||||
import org.oscim.renderer.bucket.PolygonBucket;
|
||||
import org.oscim.renderer.bucket.RenderBucket;
|
||||
import org.oscim.renderer.bucket.RenderBuckets;
|
||||
import org.oscim.utils.FastMath;
|
||||
|
||||
public class VectorTileRenderer extends TileRenderer {
|
||||
@ -55,7 +55,7 @@ public class VectorTileRenderer extends TileRenderer {
|
||||
mClipProj.setValue(14, 0);
|
||||
mClipProj.multiplyRhs(v.view);
|
||||
|
||||
mClipMode = PolygonLayer.CLIP_STENCIL;
|
||||
mClipMode = PolygonBucket.CLIP_STENCIL;
|
||||
|
||||
int tileCnt = mDrawTiles.cnt + mProxyTileCnt;
|
||||
|
||||
@ -77,7 +77,7 @@ public class VectorTileRenderer extends TileRenderer {
|
||||
* draw where tiles were already drawn */
|
||||
GL.glDepthFunc(GL20.GL_ALWAYS);
|
||||
|
||||
mClipMode = PolygonLayer.CLIP_DEPTH;
|
||||
mClipMode = PolygonBucket.CLIP_DEPTH;
|
||||
drawProxies = true;
|
||||
|
||||
break;
|
||||
@ -150,11 +150,11 @@ public class VectorTileRenderer extends TileRenderer {
|
||||
tile.lastDraw = mDrawSerial;
|
||||
|
||||
/* use holder proxy when it is set */
|
||||
ElementLayers layers = (tile.holder == null)
|
||||
RenderBuckets buckets = (tile.holder == null)
|
||||
? tile.getLayers()
|
||||
: tile.holder.getLayers();
|
||||
|
||||
if (layers == null || layers.vbo == null)
|
||||
if (buckets == null || buckets.vbo == null)
|
||||
return;
|
||||
|
||||
MapPosition pos = v.pos;
|
||||
@ -174,63 +174,63 @@ public class VectorTileRenderer extends TileRenderer {
|
||||
mClipMVP.setTransScale(x, y, scale / COORD_SCALE);
|
||||
mClipMVP.multiplyLhs(mClipProj);
|
||||
|
||||
layers.bind();
|
||||
buckets.bind();
|
||||
|
||||
RenderElement l = layers.getBaseLayers();
|
||||
PolygonLayer.Renderer.clip(mClipMVP, mClipMode);
|
||||
PolygonBucket.Renderer.clip(mClipMVP, mClipMode);
|
||||
|
||||
RenderBucket b = buckets.getBaseBuckets();
|
||||
|
||||
boolean first = true;
|
||||
while (l != null) {
|
||||
if (l.type == POLYGON) {
|
||||
l = PolygonLayer.Renderer.draw(l, v, div, first);
|
||||
while (b != null) {
|
||||
if (b.type == POLYGON) {
|
||||
b = PolygonBucket.Renderer.draw(b, v, div, first);
|
||||
first = false;
|
||||
|
||||
/* set test for clip to tile region */
|
||||
GL.glStencilFunc(GL_EQUAL, 0x80, 0x80);
|
||||
continue;
|
||||
}
|
||||
if (l.type == LINE) {
|
||||
l = LineLayer.Renderer.draw(l, v, scale, layers);
|
||||
if (b.type == LINE) {
|
||||
b = LineBucket.Renderer.draw(b, v, scale, buckets);
|
||||
continue;
|
||||
}
|
||||
if (l.type == TEXLINE) {
|
||||
l = LineTexLayer.Renderer.draw(l, v, div, layers);
|
||||
if (layers.ibo != null)
|
||||
layers.ibo.bind();
|
||||
if (b.type == TEXLINE) {
|
||||
b = LineTexBucket.Renderer.draw(b, v, div, buckets);
|
||||
if (buckets.ibo != null)
|
||||
buckets.ibo.bind();
|
||||
continue;
|
||||
}
|
||||
if (l.type == MESH) {
|
||||
l = MeshLayer.Renderer.draw(l, v);
|
||||
if (b.type == MESH) {
|
||||
b = MeshBucket.Renderer.draw(b, v);
|
||||
continue;
|
||||
}
|
||||
if (l.type == HAIRLINE) {
|
||||
l = HairLineLayer.Renderer.draw(l, v);
|
||||
if (b.type == HAIRLINE) {
|
||||
b = HairLineBucket.Renderer.draw(b, v);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* just in case */
|
||||
log.error("unknown layer {}", l.type);
|
||||
l = l.next;
|
||||
log.error("unknown layer {}", b.type);
|
||||
b = b.next;
|
||||
}
|
||||
|
||||
l = layers.getTextureLayers();
|
||||
while (l != null) {
|
||||
if (l.type == BITMAP) {
|
||||
l = BitmapLayer.Renderer.draw(l, v, 1, mLayerAlpha);
|
||||
b = buckets.getTextureBuckets();
|
||||
while (b != null) {
|
||||
if (b.type == BITMAP) {
|
||||
b = BitmapBucket.Renderer.draw(b, v, 1, mLayerAlpha);
|
||||
continue;
|
||||
}
|
||||
log.error("unknown layer {}", l.type);
|
||||
l = l.next;
|
||||
log.error("unknown layer {}", b.type);
|
||||
b = b.next;
|
||||
}
|
||||
|
||||
if (debugOverdraw) {
|
||||
|
||||
if (tile.zoomLevel > pos.zoomLevel)
|
||||
PolygonLayer.Renderer.drawOver(mClipMVP, Color.BLUE, 0.5f);
|
||||
PolygonBucket.Renderer.drawOver(mClipMVP, Color.BLUE, 0.5f);
|
||||
else if (tile.zoomLevel < pos.zoomLevel)
|
||||
PolygonLayer.Renderer.drawOver(mClipMVP, Color.RED, 0.5f);
|
||||
PolygonBucket.Renderer.drawOver(mClipMVP, Color.RED, 0.5f);
|
||||
else
|
||||
PolygonLayer.Renderer.drawOver(mClipMVP, Color.GREEN, 0.5f);
|
||||
PolygonBucket.Renderer.drawOver(mClipMVP, Color.GREEN, 0.5f);
|
||||
|
||||
return;
|
||||
}
|
||||
@ -244,12 +244,12 @@ public class VectorTileRenderer extends TileRenderer {
|
||||
long dTime = MapRenderer.frametime - tile.fadeTime;
|
||||
|
||||
if (mOverdrawColor == 0 || dTime > FADE_TIME) {
|
||||
PolygonLayer.Renderer.drawOver(mClipMVP, 0, 1);
|
||||
PolygonBucket.Renderer.drawOver(mClipMVP, 0, 1);
|
||||
return;
|
||||
}
|
||||
|
||||
float fade = 1 - dTime / FADE_TIME;
|
||||
PolygonLayer.Renderer.drawOver(mClipMVP, mOverdrawColor, fade * fade);
|
||||
PolygonBucket.Renderer.drawOver(mClipMVP, mOverdrawColor, fade * fade);
|
||||
|
||||
MapRenderer.animate();
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ import org.oscim.layers.tile.TileLoader;
|
||||
import org.oscim.layers.tile.TileManager;
|
||||
import org.oscim.layers.tile.VectorTileRenderer;
|
||||
import org.oscim.map.Map;
|
||||
import org.oscim.renderer.elements.TextureItem.TexturePool;
|
||||
import org.oscim.renderer.bucket.TextureItem.TexturePool;
|
||||
import org.oscim.tiling.TileSource;
|
||||
import org.oscim.utils.FastMath;
|
||||
import org.slf4j.Logger;
|
||||
|
@ -22,8 +22,8 @@ import org.oscim.backend.canvas.Bitmap;
|
||||
import org.oscim.core.Tile;
|
||||
import org.oscim.layers.tile.MapTile;
|
||||
import org.oscim.layers.tile.TileLoader;
|
||||
import org.oscim.renderer.elements.BitmapLayer;
|
||||
import org.oscim.renderer.elements.ElementLayers;
|
||||
import org.oscim.renderer.bucket.BitmapBucket;
|
||||
import org.oscim.renderer.bucket.RenderBuckets;
|
||||
import org.oscim.tiling.ITileDataSource;
|
||||
import org.oscim.tiling.TileSource;
|
||||
import org.slf4j.Logger;
|
||||
@ -58,11 +58,11 @@ public class BitmapTileLoader extends TileLoader {
|
||||
if (isCanceled() || mTile.state(CANCEL))
|
||||
return;
|
||||
|
||||
BitmapLayer l = new BitmapLayer(false);
|
||||
BitmapBucket l = new BitmapBucket(false);
|
||||
l.setBitmap(bitmap, Tile.SIZE, Tile.SIZE, mLayer.pool);
|
||||
|
||||
ElementLayers layers = new ElementLayers();
|
||||
layers.setTextureLayers(l);
|
||||
RenderBuckets layers = new RenderBuckets();
|
||||
layers.setTextureBuckets(l);
|
||||
mTile.data = layers;
|
||||
}
|
||||
|
||||
|
@ -27,9 +27,9 @@ import org.oscim.map.Map;
|
||||
import org.oscim.renderer.ExtrusionRenderer;
|
||||
import org.oscim.renderer.OffscreenRenderer;
|
||||
import org.oscim.renderer.OffscreenRenderer.Mode;
|
||||
import org.oscim.renderer.elements.ElementLayers;
|
||||
import org.oscim.renderer.elements.ExtrusionLayer;
|
||||
import org.oscim.renderer.elements.ExtrusionLayers;
|
||||
import org.oscim.renderer.bucket.ExtrusionBucket;
|
||||
import org.oscim.renderer.bucket.ExtrusionBuckets;
|
||||
import org.oscim.renderer.bucket.RenderBuckets;
|
||||
import org.oscim.theme.styles.ExtrusionStyle;
|
||||
import org.oscim.theme.styles.RenderStyle;
|
||||
import org.slf4j.Logger;
|
||||
@ -77,7 +77,7 @@ public class BuildingLayer extends Layer implements TileLoaderThemeHook {
|
||||
|
||||
/** TileLoaderThemeHook */
|
||||
@Override
|
||||
public boolean render(MapTile tile, ElementLayers layers, MapElement element,
|
||||
public boolean render(MapTile tile, RenderBuckets buckets, MapElement element,
|
||||
RenderStyle style, int level) {
|
||||
|
||||
if (!(style instanceof ExtrusionStyle))
|
||||
@ -95,14 +95,14 @@ public class BuildingLayer extends Layer implements TileLoaderThemeHook {
|
||||
if (v != null)
|
||||
minHeight = Integer.parseInt(v);
|
||||
|
||||
ExtrusionLayers el = get(tile);
|
||||
ExtrusionBuckets el = get(tile);
|
||||
|
||||
if (el.layers == null) {
|
||||
double lat = MercatorProjection.toLatitude(tile.y);
|
||||
float groundScale = (float) MercatorProjection
|
||||
.groundResolution(lat, 1 << tile.zoomLevel);
|
||||
|
||||
el.layers = new ExtrusionLayer(0, groundScale, extrusion.colors);
|
||||
el.layers = new ExtrusionBucket(0, groundScale, extrusion.colors);
|
||||
}
|
||||
|
||||
/* 12m default */
|
||||
@ -114,10 +114,10 @@ public class BuildingLayer extends Layer implements TileLoaderThemeHook {
|
||||
return true;
|
||||
}
|
||||
|
||||
public static ExtrusionLayers get(MapTile tile) {
|
||||
ExtrusionLayers el = (ExtrusionLayers) tile.getData(BUILDING_DATA);
|
||||
public static ExtrusionBuckets get(MapTile tile) {
|
||||
ExtrusionBuckets el = (ExtrusionBuckets) tile.getData(BUILDING_DATA);
|
||||
if (el == null) {
|
||||
el = new ExtrusionLayers(tile);
|
||||
el = new ExtrusionBuckets(tile);
|
||||
tile.addData(BUILDING_DATA, el);
|
||||
}
|
||||
return el;
|
||||
|
@ -12,8 +12,8 @@ import org.oscim.layers.tile.TileSet;
|
||||
import org.oscim.renderer.ExtrusionRenderer;
|
||||
import org.oscim.renderer.GLViewport;
|
||||
import org.oscim.renderer.MapRenderer;
|
||||
import org.oscim.renderer.elements.ElementLayers;
|
||||
import org.oscim.renderer.elements.ExtrusionLayers;
|
||||
import org.oscim.renderer.bucket.ExtrusionBuckets;
|
||||
import org.oscim.renderer.bucket.RenderBuckets;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@ -102,7 +102,7 @@ public class BuildingRenderer extends ExtrusionRenderer {
|
||||
|
||||
/* keep a list of tiles available for rendering */
|
||||
if (mExtrusionLayerSet == null || mExtrusionLayerSet.length < mTileSet.cnt * 4)
|
||||
mExtrusionLayerSet = new ExtrusionLayers[mTileSet.cnt * 4];
|
||||
mExtrusionLayerSet = new ExtrusionBuckets[mTileSet.cnt * 4];
|
||||
|
||||
/* compile one tile max per frame */
|
||||
boolean compiled = false;
|
||||
@ -114,7 +114,7 @@ public class BuildingRenderer extends ExtrusionRenderer {
|
||||
/* TODO - if tile is not available try parent or children */
|
||||
|
||||
for (int i = 0; i < mTileSet.cnt; i++) {
|
||||
ExtrusionLayers els = getLayer(tiles[i]);
|
||||
ExtrusionBuckets els = getLayer(tiles[i]);
|
||||
if (els == null)
|
||||
continue;
|
||||
|
||||
@ -137,7 +137,7 @@ public class BuildingRenderer extends ExtrusionRenderer {
|
||||
// if (c == t)
|
||||
// continue O;
|
||||
|
||||
ExtrusionLayers els = getLayer(t);
|
||||
ExtrusionBuckets els = getLayer(t);
|
||||
if (els == null)
|
||||
continue;
|
||||
|
||||
@ -158,7 +158,7 @@ public class BuildingRenderer extends ExtrusionRenderer {
|
||||
continue;
|
||||
|
||||
MapTile c = t.node.child(j);
|
||||
ExtrusionLayers el = getLayer(c);
|
||||
ExtrusionBuckets el = getLayer(c);
|
||||
|
||||
if (el == null || !el.compiled)
|
||||
continue;
|
||||
@ -192,8 +192,8 @@ public class BuildingRenderer extends ExtrusionRenderer {
|
||||
mTileLayer.releaseTiles(mTileSet);
|
||||
}
|
||||
|
||||
private static ExtrusionLayers getLayer(MapTile t) {
|
||||
ElementLayers layers = t.getLayers();
|
||||
private static ExtrusionBuckets getLayer(MapTile t) {
|
||||
RenderBuckets layers = t.getLayers();
|
||||
if (layers != null && !t.state(READY | NEW_DATA))
|
||||
return null;
|
||||
|
||||
|
@ -11,8 +11,8 @@ import org.oscim.core.Tag;
|
||||
import org.oscim.layers.tile.MapTile;
|
||||
import org.oscim.layers.tile.TileLoader;
|
||||
import org.oscim.layers.tile.TileManager;
|
||||
import org.oscim.renderer.elements.ExtrusionLayer;
|
||||
import org.oscim.renderer.elements.ExtrusionLayers;
|
||||
import org.oscim.renderer.bucket.ExtrusionBucket;
|
||||
import org.oscim.renderer.bucket.ExtrusionBuckets;
|
||||
import org.oscim.tiling.ITileDataSource;
|
||||
import org.oscim.tiling.TileSource;
|
||||
import org.slf4j.Logger;
|
||||
@ -24,8 +24,8 @@ class S3DBTileLoader extends TileLoader {
|
||||
/** current TileDataSource used by this MapTileLoader */
|
||||
private final ITileDataSource mTileDataSource;
|
||||
|
||||
private ExtrusionLayer mLayers;
|
||||
private ExtrusionLayer mRoofs;
|
||||
private ExtrusionBucket mLayers;
|
||||
private ExtrusionBucket mRoofs;
|
||||
|
||||
private float mGroundScale;
|
||||
|
||||
@ -75,13 +75,13 @@ class S3DBTileLoader extends TileLoader {
|
||||
mGroundScale = (float) MercatorProjection
|
||||
.groundResolution(lat, 1 << mTile.zoomLevel);
|
||||
|
||||
mRoofs = new ExtrusionLayer(0, mGroundScale, Color.get(247, 249, 250));
|
||||
mRoofs = new ExtrusionBucket(0, mGroundScale, Color.get(247, 249, 250));
|
||||
|
||||
mLayers = new ExtrusionLayer(0, mGroundScale, Color.get(255, 254, 252));
|
||||
mLayers = new ExtrusionBucket(0, mGroundScale, Color.get(255, 254, 252));
|
||||
//mRoofs = new ExtrusionLayer(0, mGroundScale, Color.get(207, 209, 210));
|
||||
mRoofs.next = mLayers;
|
||||
|
||||
ExtrusionLayers layers = BuildingLayer.get(tile);
|
||||
ExtrusionBuckets layers = BuildingLayer.get(tile);
|
||||
|
||||
layers.setLayers(mRoofs);
|
||||
|
||||
@ -127,13 +127,13 @@ class S3DBTileLoader extends TileLoader {
|
||||
return;
|
||||
}
|
||||
|
||||
for (ExtrusionLayer l = mLayers; l != null; l = l.next()) {
|
||||
for (ExtrusionBucket l = mLayers; l != null; l = l.next()) {
|
||||
if (l.color == c) {
|
||||
l.add(element);
|
||||
return;
|
||||
}
|
||||
}
|
||||
ExtrusionLayer l = new ExtrusionLayer(0, mGroundScale, c);
|
||||
ExtrusionBucket l = new ExtrusionBucket(0, mGroundScale, c);
|
||||
|
||||
l.next = mLayers.next;
|
||||
mLayers.next = l;
|
||||
|
@ -26,8 +26,8 @@ import org.oscim.layers.tile.TileLoader;
|
||||
import org.oscim.layers.tile.TileManager;
|
||||
import org.oscim.layers.tile.VectorTileRenderer;
|
||||
import org.oscim.map.Map;
|
||||
import org.oscim.renderer.elements.ElementLayers;
|
||||
import org.oscim.renderer.elements.LineLayer;
|
||||
import org.oscim.renderer.bucket.LineBucket;
|
||||
import org.oscim.renderer.bucket.RenderBuckets;
|
||||
import org.oscim.theme.styles.LineStyle;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -58,10 +58,10 @@ public class TestTileLayer extends TileLayer {
|
||||
@Override
|
||||
public boolean loadTile(MapTile tile) {
|
||||
log.debug("load tile " + tile);
|
||||
ElementLayers layers = new ElementLayers();
|
||||
RenderBuckets layers = new RenderBuckets();
|
||||
tile.data = layers;
|
||||
|
||||
LineLayer ll = layers.getLineLayer(0);
|
||||
LineBucket ll = layers.getLineBucket(0);
|
||||
ll.line = mLineStyle;
|
||||
ll.scale = 2;
|
||||
|
||||
|
@ -23,7 +23,7 @@ import org.oscim.layers.tile.TileLoader;
|
||||
import org.oscim.layers.tile.TileManager;
|
||||
import org.oscim.layers.tile.VectorTileRenderer;
|
||||
import org.oscim.map.Map;
|
||||
import org.oscim.renderer.elements.ElementLayers;
|
||||
import org.oscim.renderer.bucket.RenderBuckets;
|
||||
import org.oscim.theme.IRenderTheme;
|
||||
import org.oscim.theme.styles.RenderStyle;
|
||||
import org.oscim.tiling.TileSource;
|
||||
@ -132,7 +132,7 @@ public class VectorTileLayer extends TileLayer {
|
||||
* loader threads, so dont keep tile specific state.
|
||||
*/
|
||||
public interface TileLoaderProcessHook {
|
||||
public boolean process(MapTile tile, ElementLayers layers, MapElement element);
|
||||
public boolean process(MapTile tile, RenderBuckets layers, MapElement element);
|
||||
|
||||
/** Called on loader thread when tile loading is completed */
|
||||
public void complete(MapTile tile, boolean success);
|
||||
@ -145,7 +145,7 @@ public class VectorTileLayer extends TileLayer {
|
||||
*/
|
||||
public interface TileLoaderThemeHook {
|
||||
/** Called for each RenderStyle found for a MapElement. */
|
||||
public boolean render(MapTile tile, ElementLayers layers,
|
||||
public boolean render(MapTile tile, RenderBuckets buckets,
|
||||
MapElement element, RenderStyle style, int level);
|
||||
|
||||
/** Called on loader thread when tile loading is completed */
|
||||
@ -172,7 +172,7 @@ public class VectorTileLayer extends TileLayer {
|
||||
mTileSource.close();
|
||||
}
|
||||
|
||||
public void callThemeHooks(MapTile tile, ElementLayers layers, MapElement element,
|
||||
public void callThemeHooks(MapTile tile, RenderBuckets layers, MapElement element,
|
||||
RenderStyle style, int level) {
|
||||
|
||||
LList<TileLoaderThemeHook> th = mLoaderThemeHooks.head();
|
||||
@ -184,7 +184,7 @@ public class VectorTileLayer extends TileLayer {
|
||||
}
|
||||
}
|
||||
|
||||
public boolean callProcessHooks(MapTile tile, ElementLayers layers, MapElement element) {
|
||||
public boolean callProcessHooks(MapTile tile, RenderBuckets layers, MapElement element) {
|
||||
|
||||
LList<TileLoaderProcessHook> ph = mLoaderProcessHooks.head();
|
||||
while (ph != null) {
|
||||
|
@ -26,11 +26,11 @@ import org.oscim.core.TagSet;
|
||||
import org.oscim.core.Tile;
|
||||
import org.oscim.layers.tile.MapTile;
|
||||
import org.oscim.layers.tile.TileLoader;
|
||||
import org.oscim.renderer.elements.ElementLayers;
|
||||
import org.oscim.renderer.elements.LineLayer;
|
||||
import org.oscim.renderer.elements.LineTexLayer;
|
||||
import org.oscim.renderer.elements.MeshLayer;
|
||||
import org.oscim.renderer.elements.PolygonLayer;
|
||||
import org.oscim.renderer.bucket.LineBucket;
|
||||
import org.oscim.renderer.bucket.LineTexBucket;
|
||||
import org.oscim.renderer.bucket.MeshBucket;
|
||||
import org.oscim.renderer.bucket.PolygonBucket;
|
||||
import org.oscim.renderer.bucket.RenderBuckets;
|
||||
import org.oscim.theme.IRenderTheme;
|
||||
import org.oscim.theme.RenderTheme;
|
||||
import org.oscim.theme.styles.AreaStyle;
|
||||
@ -63,7 +63,7 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
|
||||
protected MapElement mElement;
|
||||
|
||||
/** current line layer (will be used for outline layers) */
|
||||
protected LineLayer mCurLineLayer;
|
||||
protected LineBucket mCurLineLayer;
|
||||
|
||||
/** Current layer for adding elements */
|
||||
protected int mCurLayer;
|
||||
@ -71,7 +71,7 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
|
||||
/** Line-scale-factor depending on zoom and latitude */
|
||||
protected float mLineScale = 1.0f;
|
||||
|
||||
protected ElementLayers mLayers;
|
||||
protected RenderBuckets mLayers;
|
||||
|
||||
private final VectorTileLayer mTileLayer;
|
||||
|
||||
@ -109,7 +109,7 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
|
||||
|
||||
/* scale line width relative to latitude + PI * thumb */
|
||||
mLineScale *= 0.4f + 0.6f * ((float) Math.sin(Math.abs(lat) * (Math.PI / 180)));
|
||||
mLayers = new ElementLayers();
|
||||
mLayers = new RenderBuckets();
|
||||
tile.data = mLayers;
|
||||
|
||||
try {
|
||||
@ -244,7 +244,7 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
|
||||
return;
|
||||
}
|
||||
|
||||
LineLayer ll = mLayers.getLineLayer(numLayer);
|
||||
LineBucket ll = mLayers.getLineBucket(numLayer);
|
||||
|
||||
if (ll.line == null) {
|
||||
ll.line = line;
|
||||
@ -263,7 +263,7 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
|
||||
mCurLineLayer = ll;
|
||||
|
||||
} else {
|
||||
LineTexLayer ll = mLayers.getLineTexLayer(numLayer);
|
||||
LineTexBucket ll = mLayers.getLineTexBucket(numLayer);
|
||||
|
||||
if (ll.line == null) {
|
||||
ll.line = line;
|
||||
@ -287,11 +287,11 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
|
||||
public void renderArea(AreaStyle area, int level) {
|
||||
int numLayer = mCurLayer + level;
|
||||
if (USE_MESH_POLY) {
|
||||
MeshLayer l = mLayers.getMeshLayer(numLayer);
|
||||
MeshBucket l = mLayers.getMeshBucket(numLayer);
|
||||
l.area = area;
|
||||
l.addMesh(mElement);
|
||||
} else {
|
||||
PolygonLayer l = mLayers.getPolygonLayer(numLayer);
|
||||
PolygonBucket l = mLayers.getPolygonBucket(numLayer);
|
||||
l.area = area;
|
||||
l.addPolygon(mElement.points, mElement.index);
|
||||
}
|
||||
|
@ -19,38 +19,38 @@ package org.oscim.layers.tile.vector.labeling;
|
||||
import org.oscim.backend.canvas.Color;
|
||||
import org.oscim.core.MapPosition;
|
||||
import org.oscim.renderer.GLViewport;
|
||||
import org.oscim.renderer.elements.ElementLayers;
|
||||
import org.oscim.renderer.elements.LineLayer;
|
||||
import org.oscim.renderer.elements.TextItem;
|
||||
import org.oscim.renderer.bucket.LineBucket;
|
||||
import org.oscim.renderer.bucket.RenderBuckets;
|
||||
import org.oscim.renderer.bucket.TextItem;
|
||||
import org.oscim.theme.styles.LineStyle;
|
||||
|
||||
class Debug {
|
||||
|
||||
private final static float[] mDebugPoints = new float[8];
|
||||
// TODO Auto-generated method stub
|
||||
static ElementLayers dbg;
|
||||
static RenderBuckets dbg;
|
||||
|
||||
static void addDebugBox(Label l, TextItem ti, int overlaps, boolean prev,
|
||||
float scale) {
|
||||
|
||||
LineLayer ll;
|
||||
LineBucket ll;
|
||||
if (prev) {
|
||||
if (overlaps == 1)
|
||||
ll = dbg.getLineLayer(4);
|
||||
ll = dbg.getLineBucket(4);
|
||||
else
|
||||
ll = dbg.getLineLayer(5);
|
||||
ll = dbg.getLineBucket(5);
|
||||
|
||||
} else {
|
||||
if (ti.width > ti.length * scale) {
|
||||
ll = dbg.getLineLayer(1);
|
||||
ll = dbg.getLineBucket(1);
|
||||
overlaps = 3;
|
||||
}
|
||||
else if (overlaps == 1)
|
||||
ll = dbg.getLineLayer(0);
|
||||
ll = dbg.getLineBucket(0);
|
||||
else if (overlaps == 2)
|
||||
ll = dbg.getLineLayer(3);
|
||||
ll = dbg.getLineBucket(3);
|
||||
else
|
||||
ll = dbg.getLineLayer(2);
|
||||
ll = dbg.getLineBucket(2);
|
||||
}
|
||||
float[] points = mDebugPoints;
|
||||
float width = (ti.x2 - ti.x1) / 2f;
|
||||
@ -67,19 +67,19 @@ class Debug {
|
||||
}
|
||||
}
|
||||
|
||||
static void addDebugLayers(ElementLayers dbg) {
|
||||
static void addDebugLayers(RenderBuckets dbg) {
|
||||
int alpha = 0xaaffffff;
|
||||
|
||||
dbg.clear();
|
||||
dbg.addLineLayer(0, new LineStyle((Color.BLUE & alpha), 2));
|
||||
dbg.addLineLayer(1, new LineStyle((Color.RED & alpha), 2));
|
||||
dbg.addLineLayer(3, new LineStyle((Color.YELLOW & alpha), 2));
|
||||
dbg.addLineLayer(2, new LineStyle((Color.GREEN & alpha), 2));
|
||||
dbg.addLineLayer(4, new LineStyle((Color.CYAN & alpha), 2));
|
||||
dbg.addLineLayer(5, new LineStyle((Color.MAGENTA & alpha), 2));
|
||||
dbg.addLineBucket(0, new LineStyle((Color.BLUE & alpha), 2));
|
||||
dbg.addLineBucket(1, new LineStyle((Color.RED & alpha), 2));
|
||||
dbg.addLineBucket(3, new LineStyle((Color.YELLOW & alpha), 2));
|
||||
dbg.addLineBucket(2, new LineStyle((Color.GREEN & alpha), 2));
|
||||
dbg.addLineBucket(4, new LineStyle((Color.CYAN & alpha), 2));
|
||||
dbg.addLineBucket(5, new LineStyle((Color.MAGENTA & alpha), 2));
|
||||
}
|
||||
|
||||
public static void draw(MapPosition pos, GLViewport m, ElementLayers layers) {
|
||||
public static void draw(MapPosition pos, GLViewport m, RenderBuckets layers) {
|
||||
// if (layers.baseLayers != null) {
|
||||
// //setMatrix(pos, m, true);
|
||||
//
|
||||
|
@ -16,7 +16,7 @@
|
||||
*/
|
||||
package org.oscim.layers.tile.vector.labeling;
|
||||
|
||||
import org.oscim.renderer.elements.TextItem;
|
||||
import org.oscim.renderer.bucket.TextItem;
|
||||
import org.oscim.utils.geom.OBB2D;
|
||||
|
||||
final class Label extends TextItem {
|
||||
|
@ -9,9 +9,9 @@ import org.oscim.layers.tile.MapTile;
|
||||
import org.oscim.layers.tile.TileRenderer;
|
||||
import org.oscim.layers.tile.TileSet;
|
||||
import org.oscim.map.Map;
|
||||
import org.oscim.renderer.elements.SymbolItem;
|
||||
import org.oscim.renderer.elements.SymbolLayer;
|
||||
import org.oscim.renderer.elements.TextItem;
|
||||
import org.oscim.renderer.bucket.SymbolBucket;
|
||||
import org.oscim.renderer.bucket.SymbolItem;
|
||||
import org.oscim.renderer.bucket.TextItem;
|
||||
import org.oscim.utils.FastMath;
|
||||
import org.oscim.utils.geom.OBB2D;
|
||||
|
||||
@ -322,7 +322,7 @@ public class LabelPlacement {
|
||||
int maxx = Tile.SIZE << (zoom - 1);
|
||||
|
||||
// FIXME ???
|
||||
SymbolLayer sl = work.symbolLayer;
|
||||
SymbolBucket sl = work.symbolLayer;
|
||||
sl.clearItems();
|
||||
|
||||
double tileX = (pos.x * (Tile.SIZE << zoom));
|
||||
|
@ -1,6 +1,6 @@
|
||||
package org.oscim.layers.tile.vector.labeling;
|
||||
|
||||
import org.oscim.renderer.elements.TextItem;
|
||||
import org.oscim.renderer.bucket.TextItem;
|
||||
import org.oscim.utils.pool.Pool;
|
||||
|
||||
final class LabelPool extends Pool<TextItem> {
|
||||
|
@ -1,23 +1,23 @@
|
||||
package org.oscim.layers.tile.vector.labeling;
|
||||
|
||||
import org.oscim.core.MapPosition;
|
||||
import org.oscim.renderer.elements.SymbolLayer;
|
||||
import org.oscim.renderer.elements.TextLayer;
|
||||
import org.oscim.renderer.elements.TextureLayer;
|
||||
import org.oscim.renderer.bucket.SymbolBucket;
|
||||
import org.oscim.renderer.bucket.TextBucket;
|
||||
import org.oscim.renderer.bucket.TextureBucket;
|
||||
|
||||
final class LabelTask {
|
||||
|
||||
final TextureLayer layers;
|
||||
final TextLayer textLayer;
|
||||
final SymbolLayer symbolLayer;
|
||||
final TextureBucket layers;
|
||||
final TextBucket textLayer;
|
||||
final SymbolBucket symbolLayer;
|
||||
|
||||
final MapPosition pos;
|
||||
|
||||
LabelTask() {
|
||||
pos = new MapPosition();
|
||||
|
||||
symbolLayer = new SymbolLayer();
|
||||
textLayer = new TextLayer();
|
||||
symbolLayer = new SymbolBucket();
|
||||
textLayer = new TextBucket();
|
||||
|
||||
layers = symbolLayer;
|
||||
symbolLayer.next = textLayer;
|
||||
|
@ -1,8 +1,8 @@
|
||||
package org.oscim.layers.tile.vector.labeling;
|
||||
|
||||
import org.oscim.layers.tile.MapTile.TileData;
|
||||
import org.oscim.renderer.elements.SymbolItem;
|
||||
import org.oscim.renderer.elements.TextItem;
|
||||
import org.oscim.renderer.bucket.SymbolItem;
|
||||
import org.oscim.renderer.bucket.TextItem;
|
||||
|
||||
public class LabelTileData extends TileData {
|
||||
public final List<SymbolItem> symbols = new List<SymbolItem>();
|
||||
|
@ -9,9 +9,9 @@ import org.oscim.core.MapElement;
|
||||
import org.oscim.core.PointF;
|
||||
import org.oscim.layers.tile.MapTile;
|
||||
import org.oscim.layers.tile.vector.VectorTileLayer.TileLoaderThemeHook;
|
||||
import org.oscim.renderer.elements.ElementLayers;
|
||||
import org.oscim.renderer.elements.SymbolItem;
|
||||
import org.oscim.renderer.elements.TextItem;
|
||||
import org.oscim.renderer.bucket.RenderBuckets;
|
||||
import org.oscim.renderer.bucket.SymbolItem;
|
||||
import org.oscim.renderer.bucket.TextItem;
|
||||
import org.oscim.theme.styles.RenderStyle;
|
||||
import org.oscim.theme.styles.SymbolStyle;
|
||||
import org.oscim.theme.styles.TextStyle;
|
||||
@ -31,7 +31,7 @@ public class LabelTileLoaderHook implements TileLoaderThemeHook {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean render(MapTile tile, ElementLayers layers, MapElement element,
|
||||
public boolean render(MapTile tile, RenderBuckets buckets, MapElement element,
|
||||
RenderStyle style, int level) {
|
||||
|
||||
if (style instanceof TextStyle) {
|
||||
|
@ -31,15 +31,15 @@ package org.oscim.layers.tile.vector.labeling;
|
||||
//
|
||||
|
||||
import org.oscim.layers.tile.vector.labeling.LabelLayer.Worker;
|
||||
import org.oscim.renderer.ElementRenderer;
|
||||
import org.oscim.renderer.BucketRenderer;
|
||||
import org.oscim.renderer.GLState;
|
||||
import org.oscim.renderer.GLViewport;
|
||||
import org.oscim.renderer.elements.RenderElement;
|
||||
import org.oscim.renderer.elements.TextureLayer;
|
||||
import org.oscim.renderer.bucket.RenderBucket;
|
||||
import org.oscim.renderer.bucket.TextureBucket;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
class TextRenderer extends ElementRenderer {
|
||||
class TextRenderer extends BucketRenderer {
|
||||
static final Logger log = LoggerFactory.getLogger(TextRenderer.class);
|
||||
static final boolean dbg = false;
|
||||
|
||||
@ -63,11 +63,11 @@ class TextRenderer extends ElementRenderer {
|
||||
}
|
||||
return;
|
||||
}
|
||||
layers.clear();
|
||||
buckets.clear();
|
||||
}
|
||||
|
||||
// set new TextLayer to be uploaded and rendered
|
||||
layers.setTextureLayers(t.layers);
|
||||
buckets.setTextureBuckets(t.layers);
|
||||
mMapPosition = t.pos;
|
||||
compile();
|
||||
}
|
||||
@ -77,14 +77,14 @@ class TextRenderer extends ElementRenderer {
|
||||
GLState.test(false, false);
|
||||
//Debug.draw(pos, layers);
|
||||
|
||||
layers.vbo.bind();
|
||||
buckets.vbo.bind();
|
||||
|
||||
float scale = (float) (v.pos.scale / mMapPosition.scale);
|
||||
|
||||
setMatrix(v, false);
|
||||
|
||||
for (RenderElement l = layers.getTextureLayers(); l != null;)
|
||||
l = TextureLayer.Renderer.draw(layers, l, v, scale);
|
||||
for (RenderBucket l = buckets.getTextureBuckets(); l != null;)
|
||||
l = TextureBucket.Renderer.draw(buckets, l, v, scale);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -18,7 +18,7 @@
|
||||
package org.oscim.layers.tile.vector.labeling;
|
||||
|
||||
import org.oscim.core.Tile;
|
||||
import org.oscim.renderer.elements.TextItem;
|
||||
import org.oscim.renderer.bucket.TextItem;
|
||||
import org.oscim.theme.styles.TextStyle;
|
||||
import org.oscim.utils.geom.GeometryUtils;
|
||||
import org.oscim.utils.geom.LineClipper;
|
||||
|
@ -9,9 +9,9 @@ import org.oscim.layers.Layer;
|
||||
import org.oscim.map.Map;
|
||||
import org.oscim.map.Map.UpdateListener;
|
||||
import org.oscim.map.Viewport;
|
||||
import org.oscim.renderer.ElementRenderer;
|
||||
import org.oscim.renderer.BucketRenderer;
|
||||
import org.oscim.renderer.GLViewport;
|
||||
import org.oscim.renderer.elements.ElementLayers;
|
||||
import org.oscim.renderer.bucket.RenderBuckets;
|
||||
import org.oscim.utils.async.SimpleWorker;
|
||||
import org.oscim.utils.geom.TileClipper;
|
||||
import org.slf4j.Logger;
|
||||
@ -64,7 +64,7 @@ public abstract class AbstractVectorLayer<T> extends Layer implements UpdateList
|
||||
abstract protected void processFeatures(Task t, BoundingBox b);
|
||||
|
||||
protected static class Task {
|
||||
public final ElementLayers layers = new ElementLayers();
|
||||
public final RenderBuckets buckets = new RenderBuckets();
|
||||
public final MapPosition position = new MapPosition();
|
||||
}
|
||||
|
||||
@ -77,8 +77,8 @@ public abstract class AbstractVectorLayer<T> extends Layer implements UpdateList
|
||||
/** automatically in sync with worker thread */
|
||||
@Override
|
||||
public void cleanup(Task t) {
|
||||
if (t.layers != null)
|
||||
t.layers.clear();
|
||||
if (t.buckets != null)
|
||||
t.buckets.clear();
|
||||
}
|
||||
|
||||
/** running on worker thread */
|
||||
@ -103,7 +103,7 @@ public abstract class AbstractVectorLayer<T> extends Layer implements UpdateList
|
||||
|
||||
}
|
||||
|
||||
public class Renderer extends ElementRenderer {
|
||||
public class Renderer extends BucketRenderer {
|
||||
MapPosition mTmpPos = new MapPosition();
|
||||
|
||||
@Override
|
||||
@ -117,7 +117,7 @@ public abstract class AbstractVectorLayer<T> extends Layer implements UpdateList
|
||||
mMapPosition.copy(t.position);
|
||||
mMapPosition.setScale(mMapPosition.scale / UNSCALE_COORD);
|
||||
|
||||
layers.setFrom(t.layers);
|
||||
buckets.setFrom(t.buckets);
|
||||
|
||||
compile();
|
||||
//log.debug("is ready " + isReady() + " " + layers.getSize());
|
||||
|
@ -17,14 +17,14 @@
|
||||
package org.oscim.renderer;
|
||||
|
||||
import org.oscim.backend.canvas.Bitmap;
|
||||
import org.oscim.renderer.elements.BitmapLayer;
|
||||
import org.oscim.renderer.bucket.BitmapBucket;
|
||||
|
||||
/**
|
||||
* RenderLayer to draw a custom Bitmap.
|
||||
* NOTE: Only modify the Bitmap within a synchronized block!
|
||||
* synchronized(bitmap){} Then call updateBitmap().
|
||||
*/
|
||||
public class BitmapRenderer extends ElementRenderer {
|
||||
public class BitmapRenderer extends BucketRenderer {
|
||||
|
||||
private Bitmap mBitmap;
|
||||
private int mWidth;
|
||||
@ -56,11 +56,11 @@ public class BitmapRenderer extends ElementRenderer {
|
||||
@Override
|
||||
protected synchronized void update(GLViewport v) {
|
||||
if (!initialized) {
|
||||
layers.clear();
|
||||
buckets.clear();
|
||||
|
||||
BitmapLayer l = new BitmapLayer(true);
|
||||
BitmapBucket l = new BitmapBucket(true);
|
||||
l.setBitmap(mBitmap, mWidth, mHeight);
|
||||
layers.setTextureLayers(l);
|
||||
buckets.setTextureBuckets(l);
|
||||
|
||||
mUpdateBitmap = true;
|
||||
}
|
||||
@ -84,6 +84,6 @@ public class BitmapRenderer extends ElementRenderer {
|
||||
@Override
|
||||
protected synchronized void render(GLViewport v) {
|
||||
v.useScreenCoordinates(false, 8);
|
||||
BitmapLayer.Renderer.draw(layers.getTextureLayers(), v, 1, 1);
|
||||
BitmapBucket.Renderer.draw(buckets.getTextureBuckets(), v, 1, 1);
|
||||
}
|
||||
}
|
||||
|
100
vtm/src/org/oscim/renderer/ElementRenderer.java → vtm/src/org/oscim/renderer/BucketRenderer.java
100
vtm/src/org/oscim/renderer/ElementRenderer.java → vtm/src/org/oscim/renderer/BucketRenderer.java
@ -16,35 +16,35 @@
|
||||
*/
|
||||
package org.oscim.renderer;
|
||||
|
||||
import static org.oscim.renderer.elements.RenderElement.BITMAP;
|
||||
import static org.oscim.renderer.elements.RenderElement.LINE;
|
||||
import static org.oscim.renderer.elements.RenderElement.MESH;
|
||||
import static org.oscim.renderer.elements.RenderElement.POLYGON;
|
||||
import static org.oscim.renderer.elements.RenderElement.SYMBOL;
|
||||
import static org.oscim.renderer.elements.RenderElement.TEXLINE;
|
||||
import static org.oscim.renderer.bucket.RenderBucket.BITMAP;
|
||||
import static org.oscim.renderer.bucket.RenderBucket.LINE;
|
||||
import static org.oscim.renderer.bucket.RenderBucket.MESH;
|
||||
import static org.oscim.renderer.bucket.RenderBucket.POLYGON;
|
||||
import static org.oscim.renderer.bucket.RenderBucket.SYMBOL;
|
||||
import static org.oscim.renderer.bucket.RenderBucket.TEXLINE;
|
||||
|
||||
import org.oscim.core.MapPosition;
|
||||
import org.oscim.core.Tile;
|
||||
import org.oscim.renderer.elements.BitmapLayer;
|
||||
import org.oscim.renderer.elements.ElementLayers;
|
||||
import org.oscim.renderer.elements.HairLineLayer;
|
||||
import org.oscim.renderer.elements.LineLayer;
|
||||
import org.oscim.renderer.elements.LineTexLayer;
|
||||
import org.oscim.renderer.elements.MeshLayer;
|
||||
import org.oscim.renderer.elements.PolygonLayer;
|
||||
import org.oscim.renderer.elements.RenderElement;
|
||||
import org.oscim.renderer.elements.TextureLayer;
|
||||
import org.oscim.renderer.bucket.BitmapBucket;
|
||||
import org.oscim.renderer.bucket.HairLineBucket;
|
||||
import org.oscim.renderer.bucket.LineBucket;
|
||||
import org.oscim.renderer.bucket.LineTexBucket;
|
||||
import org.oscim.renderer.bucket.MeshBucket;
|
||||
import org.oscim.renderer.bucket.PolygonBucket;
|
||||
import org.oscim.renderer.bucket.RenderBucket;
|
||||
import org.oscim.renderer.bucket.RenderBuckets;
|
||||
import org.oscim.renderer.bucket.TextureBucket;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* Base class to use the renderer.elements for drawing.
|
||||
*
|
||||
* All methods that modify 'layers' MUST be synchronized!
|
||||
* All methods that modify 'buckets' MUST be synchronized!
|
||||
*/
|
||||
public abstract class ElementRenderer extends LayerRenderer {
|
||||
public abstract class BucketRenderer extends LayerRenderer {
|
||||
|
||||
public static final Logger log = LoggerFactory.getLogger(ElementRenderer.class);
|
||||
public static final Logger log = LoggerFactory.getLogger(BucketRenderer.class);
|
||||
|
||||
/**
|
||||
* Use mMapPosition.copy(position) to keep the position for which
|
||||
@ -56,11 +56,11 @@ public abstract class ElementRenderer extends LayerRenderer {
|
||||
/** Wrap around dateline */
|
||||
protected boolean mFlipOnDateLine = true;
|
||||
|
||||
/** Layer data for rendering */
|
||||
public final ElementLayers layers;
|
||||
/** Buckets for rendering */
|
||||
public final RenderBuckets buckets;
|
||||
|
||||
public ElementRenderer() {
|
||||
layers = new ElementLayers();
|
||||
public BucketRenderer() {
|
||||
buckets = new RenderBuckets();
|
||||
mMapPosition = new MapPosition();
|
||||
}
|
||||
|
||||
@ -71,70 +71,70 @@ public abstract class ElementRenderer extends LayerRenderer {
|
||||
protected synchronized void render(GLViewport v) {
|
||||
MapPosition layerPos = mMapPosition;
|
||||
|
||||
layers.bind();
|
||||
buckets.bind();
|
||||
|
||||
GLState.test(false, false);
|
||||
GLState.blend(true);
|
||||
|
||||
float div = (float) (v.pos.scale / layerPos.scale);
|
||||
|
||||
RenderElement l = layers.getBaseLayers();
|
||||
RenderBucket b = buckets.getBaseBuckets();
|
||||
|
||||
if (l != null)
|
||||
if (b != null)
|
||||
setMatrix(v, true);
|
||||
|
||||
while (l != null) {
|
||||
if (l.type == POLYGON) {
|
||||
l = PolygonLayer.Renderer.draw(l, v, 1, true);
|
||||
while (b != null) {
|
||||
if (b.type == POLYGON) {
|
||||
b = PolygonBucket.Renderer.draw(b, v, 1, true);
|
||||
continue;
|
||||
}
|
||||
if (l.type == LINE) {
|
||||
l = LineLayer.Renderer.draw(l, v, div, layers);
|
||||
if (b.type == LINE) {
|
||||
b = LineBucket.Renderer.draw(b, v, div, buckets);
|
||||
continue;
|
||||
}
|
||||
if (l.type == TEXLINE) {
|
||||
l = LineTexLayer.Renderer.draw(l, v, div, layers);
|
||||
if (b.type == TEXLINE) {
|
||||
b = LineTexBucket.Renderer.draw(b, v, div, buckets);
|
||||
// rebind
|
||||
layers.ibo.bind();
|
||||
buckets.ibo.bind();
|
||||
continue;
|
||||
}
|
||||
if (l.type == MESH) {
|
||||
l = MeshLayer.Renderer.draw(l, v);
|
||||
if (b.type == MESH) {
|
||||
b = MeshBucket.Renderer.draw(b, v);
|
||||
continue;
|
||||
}
|
||||
if (l.type == RenderElement.HAIRLINE) {
|
||||
l = HairLineLayer.Renderer.draw(l, v);
|
||||
if (b.type == RenderBucket.HAIRLINE) {
|
||||
b = HairLineBucket.Renderer.draw(b, v);
|
||||
continue;
|
||||
}
|
||||
|
||||
log.error("invalid layer {}", l.type);
|
||||
log.error("invalid bucket {}", b.type);
|
||||
break;
|
||||
}
|
||||
|
||||
l = layers.getTextureLayers();
|
||||
if (l != null)
|
||||
b = buckets.getTextureBuckets();
|
||||
if (b != null)
|
||||
setMatrix(v, false);
|
||||
while (l != null) {
|
||||
if (l.type == BITMAP) {
|
||||
l = BitmapLayer.Renderer.draw(l, v, 1, 1);
|
||||
while (b != null) {
|
||||
if (b.type == BITMAP) {
|
||||
b = BitmapBucket.Renderer.draw(b, v, 1, 1);
|
||||
continue;
|
||||
}
|
||||
if (l.type == SYMBOL) {
|
||||
l = TextureLayer.Renderer.draw(layers, l, v, div);
|
||||
if (b.type == SYMBOL) {
|
||||
b = TextureBucket.Renderer.draw(buckets, b, v, div);
|
||||
continue;
|
||||
}
|
||||
log.error("invalid layer {}", l.type);
|
||||
log.error("invalid bucket {}", b.type);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Compile all layers into one BufferObject. Sets renderer to be ready
|
||||
* when successful. When no data is available (layer.countVboSize() == 0)
|
||||
* then BufferObject will be released and layers will not be rendered.
|
||||
* Compile all buckets into one BufferObject. Sets renderer to be ready
|
||||
* when successful. When no data is available (buckets.countVboSize() == 0)
|
||||
* then BufferObject will be released and buckets will not be rendered.
|
||||
*/
|
||||
protected synchronized void compile() {
|
||||
boolean ok = layers.compile(true);
|
||||
boolean ok = buckets.compile(true);
|
||||
setReady(ok);
|
||||
}
|
||||
|
@ -18,8 +18,8 @@ package org.oscim.renderer;
|
||||
|
||||
import org.oscim.backend.GL20;
|
||||
import org.oscim.core.Tile;
|
||||
import org.oscim.renderer.elements.ExtrusionLayer;
|
||||
import org.oscim.renderer.elements.ExtrusionLayers;
|
||||
import org.oscim.renderer.bucket.ExtrusionBucket;
|
||||
import org.oscim.renderer.bucket.ExtrusionBuckets;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@ -30,7 +30,7 @@ public abstract class ExtrusionRenderer extends LayerRenderer {
|
||||
private final int mMode;
|
||||
private Shader mShader;
|
||||
|
||||
protected ExtrusionLayers[] mExtrusionLayerSet;
|
||||
protected ExtrusionBuckets[] mExtrusionLayerSet;
|
||||
protected int mExtrusionLayerCnt;
|
||||
protected float mAlpha = 1;
|
||||
|
||||
@ -65,9 +65,9 @@ public abstract class ExtrusionRenderer extends LayerRenderer {
|
||||
return true;
|
||||
}
|
||||
|
||||
private void renderCombined(int vertexPointer, ExtrusionLayers els) {
|
||||
private void renderCombined(int vertexPointer, ExtrusionBuckets els) {
|
||||
|
||||
for (ExtrusionLayer el = els.layers; el != null; el = el.next()) {
|
||||
for (ExtrusionBucket el = els.layers; el != null; el = el.next()) {
|
||||
|
||||
GL.glVertexAttribPointer(vertexPointer, 3,
|
||||
GL20.GL_SHORT, false, 8, 0);
|
||||
@ -105,7 +105,7 @@ public abstract class ExtrusionRenderer extends LayerRenderer {
|
||||
GL.glDepthFunc(GL20.GL_LESS);
|
||||
GL.glUniform1f(s.uAlpha, mAlpha);
|
||||
|
||||
ExtrusionLayers[] els = mExtrusionLayerSet;
|
||||
ExtrusionBuckets[] els = mExtrusionLayerSet;
|
||||
|
||||
if (mTranslucent) {
|
||||
/* only draw to depth buffer */
|
||||
@ -150,7 +150,7 @@ public abstract class ExtrusionRenderer extends LayerRenderer {
|
||||
v.mvp.setAsUniform(s.uMVP);
|
||||
}
|
||||
|
||||
ExtrusionLayer el = els[i].getLayers();
|
||||
ExtrusionBucket el = els[i].getLayers();
|
||||
for (; el != null; el = el.next()) {
|
||||
|
||||
if (el.colors != currentColor) {
|
||||
@ -243,7 +243,7 @@ public abstract class ExtrusionRenderer extends LayerRenderer {
|
||||
GL.glBindBuffer(GL20.GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||
}
|
||||
|
||||
private static void setMatrix(GLViewport v, ExtrusionLayers l, boolean offset) {
|
||||
private static void setMatrix(GLViewport v, ExtrusionBuckets l, boolean offset) {
|
||||
|
||||
int z = l.zoomLevel;
|
||||
double curScale = Tile.SIZE * v.pos.scale;
|
||||
|
@ -20,17 +20,17 @@ import org.oscim.backend.canvas.Color;
|
||||
import org.oscim.backend.canvas.Paint.Cap;
|
||||
import org.oscim.core.GeometryBuffer;
|
||||
import org.oscim.core.Tile;
|
||||
import org.oscim.renderer.elements.LineLayer;
|
||||
import org.oscim.renderer.elements.TextItem;
|
||||
import org.oscim.renderer.elements.TextLayer;
|
||||
import org.oscim.renderer.bucket.LineBucket;
|
||||
import org.oscim.renderer.bucket.TextBucket;
|
||||
import org.oscim.renderer.bucket.TextItem;
|
||||
import org.oscim.theme.styles.LineStyle;
|
||||
import org.oscim.theme.styles.TextStyle;
|
||||
import org.oscim.theme.styles.TextStyle.TextBuilder;
|
||||
|
||||
public class GridRenderer extends ElementRenderer {
|
||||
private final TextLayer mTextLayer;
|
||||
public class GridRenderer extends BucketRenderer {
|
||||
private final TextBucket mTextBucket;
|
||||
private final TextStyle mText;
|
||||
private final LineLayer mLineLayer;
|
||||
private final LineBucket mLineBucket;
|
||||
private final GeometryBuffer mLines;
|
||||
private final StringBuilder mStringBuffer;
|
||||
|
||||
@ -67,14 +67,13 @@ public class GridRenderer extends ElementRenderer {
|
||||
|
||||
mText = textStyle;
|
||||
|
||||
if (mText != null) {
|
||||
mTextLayer = layers.addTextLayer(new TextLayer());
|
||||
} else {
|
||||
mTextLayer = null;
|
||||
}
|
||||
if (mText != null)
|
||||
mTextBucket = buckets.addTextBucket(new TextBucket());
|
||||
else
|
||||
mTextBucket = null;
|
||||
|
||||
mLineLayer = layers.addLineLayer(0, lineStyle);
|
||||
mLineLayer.addLine(mLines);
|
||||
mLineBucket = buckets.addLineBucket(0, lineStyle);
|
||||
mLineBucket.addLine(mLines);
|
||||
|
||||
mStringBuffer = new StringBuilder(32);
|
||||
}
|
||||
@ -82,7 +81,7 @@ public class GridRenderer extends ElementRenderer {
|
||||
private void addLabels(int x, int y, int z) {
|
||||
int s = Tile.SIZE;
|
||||
|
||||
TextLayer tl = mTextLayer;
|
||||
TextBucket tl = mTextBucket;
|
||||
tl.clear();
|
||||
|
||||
StringBuilder sb = mStringBuffer;
|
||||
@ -133,11 +132,11 @@ public class GridRenderer extends ElementRenderer {
|
||||
|
||||
if (mText != null) {
|
||||
addLabels(x, y, v.pos.zoomLevel);
|
||||
layers.setBaseLayers(mLineLayer);
|
||||
mLineLayer.addLine(mLines);
|
||||
buckets.setBaseBuckets(mLineBucket);
|
||||
mLineBucket.addLine(mLines);
|
||||
compile();
|
||||
|
||||
} else if (layers.vbo == null) {
|
||||
} else if (buckets.vbo == null) {
|
||||
compile();
|
||||
}
|
||||
}
|
||||
|
@ -24,9 +24,9 @@ import org.oscim.backend.GL20;
|
||||
import org.oscim.backend.GLAdapter;
|
||||
import org.oscim.backend.canvas.Color;
|
||||
import org.oscim.map.Map;
|
||||
import org.oscim.renderer.elements.ElementLayers;
|
||||
import org.oscim.renderer.elements.TextureItem;
|
||||
import org.oscim.renderer.elements.TextureLayer;
|
||||
import org.oscim.renderer.bucket.RenderBuckets;
|
||||
import org.oscim.renderer.bucket.TextureBucket;
|
||||
import org.oscim.renderer.bucket.TextureItem;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@ -165,7 +165,7 @@ public class MapRenderer {
|
||||
int[] vboIds = GLUtils.glGenBuffers(2);
|
||||
|
||||
mQuadIndicesID = vboIds[0];
|
||||
int maxIndices = maxQuads * TextureLayer.INDICES_PER_SPRITE;
|
||||
int maxIndices = maxQuads * TextureBucket.INDICES_PER_SPRITE;
|
||||
short[] indices = new short[maxIndices];
|
||||
for (int i = 0, j = 0; i < maxIndices; i += 6, j += 4) {
|
||||
indices[i + 0] = (short) (j + 0);
|
||||
@ -225,7 +225,7 @@ public class MapRenderer {
|
||||
BufferObject.init(GL, 200);
|
||||
|
||||
// classes that require GL context for initialization
|
||||
ElementLayers.initRenderer(GL);
|
||||
RenderBuckets.initRenderer(GL);
|
||||
LayerRenderer.init(GL);
|
||||
|
||||
mNewSurface = true;
|
||||
|
@ -64,7 +64,7 @@ package org.oscim.renderer.atlas;
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.oscim.backend.canvas.Bitmap;
|
||||
import org.oscim.renderer.elements.TextureItem;
|
||||
import org.oscim.renderer.bucket.TextureItem;
|
||||
import org.oscim.utils.pool.Inlist;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
@ -17,7 +17,7 @@
|
||||
package org.oscim.renderer.atlas;
|
||||
|
||||
import org.oscim.renderer.atlas.TextureAtlas.Rect;
|
||||
import org.oscim.renderer.elements.TextureItem;
|
||||
import org.oscim.renderer.bucket.TextureItem;
|
||||
|
||||
public class TextureRegion {
|
||||
|
||||
|
@ -14,7 +14,7 @@
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.renderer.elements;
|
||||
package org.oscim.renderer.bucket;
|
||||
|
||||
import java.nio.ShortBuffer;
|
||||
|
||||
@ -24,12 +24,12 @@ import org.oscim.renderer.GLShader;
|
||||
import org.oscim.renderer.GLState;
|
||||
import org.oscim.renderer.GLViewport;
|
||||
import org.oscim.renderer.MapRenderer;
|
||||
import org.oscim.renderer.elements.TextureItem.TexturePool;
|
||||
import org.oscim.renderer.bucket.TextureItem.TexturePool;
|
||||
|
||||
/**
|
||||
* Renderer for a single bitmap, width and height must be power of 2.
|
||||
*/
|
||||
public class BitmapLayer extends TextureLayer {
|
||||
public class BitmapBucket extends TextureBucket {
|
||||
// TODO share layers.vbo() between BitmapTileLayers
|
||||
|
||||
// static final Logger log = LoggerFactory.getLogger(BitmapLayer.class);
|
||||
@ -42,8 +42,8 @@ public class BitmapLayer extends TextureLayer {
|
||||
* @param reuseBitmap false if the Bitmap should be disposed
|
||||
* after loading to texture.
|
||||
*/
|
||||
public BitmapLayer(boolean reuseBitmap) {
|
||||
super(RenderElement.BITMAP);
|
||||
public BitmapBucket(boolean reuseBitmap) {
|
||||
super(RenderBucket.BITMAP);
|
||||
|
||||
mReuseBitmap = reuseBitmap;
|
||||
mVertices = new short[24];
|
||||
@ -75,7 +75,7 @@ public class BitmapLayer extends TextureLayer {
|
||||
}
|
||||
|
||||
TextureItem t = textures;
|
||||
t.indices = TextureLayer.INDICES_PER_SPRITE;
|
||||
t.indices = TextureBucket.INDICES_PER_SPRITE;
|
||||
}
|
||||
|
||||
private void setVertices(ShortBuffer vboData) {
|
||||
@ -192,14 +192,14 @@ public class BitmapLayer extends TextureLayer {
|
||||
shader = new Shader("texture_alpha");
|
||||
}
|
||||
|
||||
public static RenderElement draw(RenderElement renderElement, GLViewport v,
|
||||
public static RenderBucket draw(RenderBucket renderElement, GLViewport v,
|
||||
float scale, float alpha) {
|
||||
|
||||
GLState.blend(true);
|
||||
Shader s = shader;
|
||||
s.useProgram();
|
||||
|
||||
TextureLayer tl = (TextureLayer) renderElement;
|
||||
TextureBucket tl = (TextureBucket) renderElement;
|
||||
|
||||
GL.glUniform1f(s.uAlpha, alpha);
|
||||
v.mvp.setAsUniform(s.uMVP);
|
@ -14,7 +14,7 @@
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.renderer.elements;
|
||||
package org.oscim.renderer.bucket;
|
||||
|
||||
import java.nio.ShortBuffer;
|
||||
|
||||
@ -33,8 +33,8 @@ import org.oscim.utils.pool.Pool;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class ExtrusionLayer extends RenderElement {
|
||||
static final Logger log = LoggerFactory.getLogger(ExtrusionLayer.class);
|
||||
public class ExtrusionBucket extends RenderBucket {
|
||||
static final Logger log = LoggerFactory.getLogger(ExtrusionBucket.class);
|
||||
|
||||
private static final float S = MapRenderer.COORD_SCALE;
|
||||
|
||||
@ -68,8 +68,8 @@ public class ExtrusionLayer extends RenderElement {
|
||||
/**
|
||||
* ExtrusionLayer for polygon geometries.
|
||||
*/
|
||||
public ExtrusionLayer(int level, float groundResolution, float[] colors) {
|
||||
super(RenderElement.EXTRUSION);
|
||||
public ExtrusionBucket(int level, float groundResolution, float[] colors) {
|
||||
super(RenderBucket.EXTRUSION);
|
||||
this.level = level;
|
||||
this.colors = colors;
|
||||
this.color = 0;
|
||||
@ -87,8 +87,8 @@ public class ExtrusionLayer extends RenderElement {
|
||||
/**
|
||||
* ExtrusionLayer for triangle geometries.
|
||||
*/
|
||||
public ExtrusionLayer(int level, float groundResolution, int color) {
|
||||
super(RenderElement.EXTRUSION);
|
||||
public ExtrusionBucket(int level, float groundResolution, int color) {
|
||||
super(RenderBucket.EXTRUSION);
|
||||
this.level = level;
|
||||
this.color = color;
|
||||
|
||||
@ -620,7 +620,7 @@ public class ExtrusionLayer extends RenderElement {
|
||||
}
|
||||
}
|
||||
|
||||
public ExtrusionLayer next() {
|
||||
return (ExtrusionLayer) next;
|
||||
public ExtrusionBucket next() {
|
||||
return (ExtrusionBucket) next;
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package org.oscim.renderer.elements;
|
||||
package org.oscim.renderer.bucket;
|
||||
|
||||
import java.nio.ShortBuffer;
|
||||
|
||||
@ -10,10 +10,10 @@ import org.oscim.renderer.MapRenderer;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class ExtrusionLayers extends TileData {
|
||||
static final Logger log = LoggerFactory.getLogger(ExtrusionLayers.class);
|
||||
public class ExtrusionBuckets extends TileData {
|
||||
static final Logger log = LoggerFactory.getLogger(ExtrusionBuckets.class);
|
||||
|
||||
public ExtrusionLayer layers;
|
||||
public ExtrusionBucket layers;
|
||||
|
||||
public boolean compiled;
|
||||
|
||||
@ -25,7 +25,7 @@ public class ExtrusionLayers extends TileData {
|
||||
public BufferObject ibo;
|
||||
public BufferObject vbo;
|
||||
|
||||
public ExtrusionLayers(MapTile tile) {
|
||||
public ExtrusionBuckets(MapTile tile) {
|
||||
zoomLevel = tile.zoomLevel;
|
||||
x = tile.x;
|
||||
y = tile.y;
|
||||
@ -34,14 +34,14 @@ public class ExtrusionLayers extends TileData {
|
||||
/**
|
||||
* Set new ExtrusionLayers and clear previous.
|
||||
*/
|
||||
public void setLayers(ExtrusionLayer el) {
|
||||
for (RenderElement l = layers; l != null; l = l.next)
|
||||
public void setLayers(ExtrusionBucket el) {
|
||||
for (RenderBucket l = layers; l != null; l = l.next)
|
||||
l.clear();
|
||||
|
||||
layers = el;
|
||||
}
|
||||
|
||||
public ExtrusionLayer getLayers() {
|
||||
public ExtrusionBucket getLayers() {
|
||||
return layers;
|
||||
}
|
||||
|
||||
@ -57,7 +57,7 @@ public class ExtrusionLayers extends TileData {
|
||||
}
|
||||
|
||||
public void prepare() {
|
||||
for (RenderElement l = layers; l != null; l = l.next)
|
||||
for (RenderBucket l = layers; l != null; l = l.next)
|
||||
l.prepare();
|
||||
}
|
||||
|
||||
@ -69,7 +69,7 @@ public class ExtrusionLayers extends TileData {
|
||||
int sumIndices = 0;
|
||||
int sumVertices = 0;
|
||||
|
||||
for (ExtrusionLayer l = layers; l != null; l = l.next()) {
|
||||
for (ExtrusionBucket l = layers; l != null; l = l.next()) {
|
||||
sumIndices += l.numIndices;
|
||||
sumVertices += l.numVertices;
|
||||
}
|
||||
@ -79,7 +79,7 @@ public class ExtrusionLayers extends TileData {
|
||||
ShortBuffer vboData = MapRenderer.getShortBuffer(sumVertices * 4);
|
||||
ShortBuffer iboData = MapRenderer.getShortBuffer(sumIndices);
|
||||
|
||||
for (ExtrusionLayer l = layers; l != null; l = l.next()) {
|
||||
for (ExtrusionBucket l = layers; l != null; l = l.next()) {
|
||||
l.compile(vboData, iboData);
|
||||
}
|
||||
int size = sumIndices * 2;
|
@ -1,4 +1,4 @@
|
||||
package org.oscim.renderer.elements;
|
||||
package org.oscim.renderer.bucket;
|
||||
|
||||
import static org.oscim.backend.GL20.GL_LINES;
|
||||
import static org.oscim.backend.GL20.GL_SHORT;
|
||||
@ -14,13 +14,13 @@ import org.oscim.theme.styles.LineStyle;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class HairLineLayer extends RenderElement {
|
||||
static final Logger log = LoggerFactory.getLogger(HairLineLayer.class);
|
||||
public class HairLineBucket extends RenderBucket {
|
||||
static final Logger log = LoggerFactory.getLogger(HairLineBucket.class);
|
||||
|
||||
public LineStyle line;
|
||||
|
||||
public HairLineLayer(int level) {
|
||||
super(RenderElement.HAIRLINE);
|
||||
public HairLineBucket(int level) {
|
||||
super(RenderBucket.HAIRLINE);
|
||||
this.level = level;
|
||||
}
|
||||
|
||||
@ -112,7 +112,7 @@ public class HairLineLayer extends RenderElement {
|
||||
}
|
||||
}
|
||||
|
||||
public static RenderElement draw(RenderElement l, GLViewport v) {
|
||||
public static RenderBucket draw(RenderBucket l, GLViewport v) {
|
||||
GLState.blend(true);
|
||||
|
||||
Shader s = shader;
|
||||
@ -120,7 +120,7 @@ public class HairLineLayer extends RenderElement {
|
||||
s.set(v);
|
||||
|
||||
for (; l != null && l.type == HAIRLINE; l = l.next) {
|
||||
HairLineLayer ll = (HairLineLayer) l;
|
||||
HairLineBucket ll = (HairLineBucket) l;
|
||||
|
||||
GLUtils.setColor(s.uColor, ll.line.color, 1);
|
||||
|
@ -14,7 +14,7 @@
|
||||
* You should have received a copy of the GNU Lesser General License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.renderer.elements;
|
||||
package org.oscim.renderer.bucket;
|
||||
|
||||
import org.oscim.backend.GL20;
|
||||
import org.oscim.backend.GLAdapter;
|
||||
@ -36,8 +36,8 @@ import org.slf4j.LoggerFactory;
|
||||
* resolution for coordinates is 0.25 as points will be converted
|
||||
* to fixed point values.
|
||||
*/
|
||||
public final class LineLayer extends RenderElement {
|
||||
static final Logger log = LoggerFactory.getLogger(LineLayer.class);
|
||||
public final class LineBucket extends RenderBucket {
|
||||
static final Logger log = LoggerFactory.getLogger(LineBucket.class);
|
||||
|
||||
private static final float COORD_SCALE = MapRenderer.COORD_SCALE;
|
||||
/** scale factor mapping extrusion vector to short values */
|
||||
@ -59,7 +59,7 @@ public final class LineLayer extends RenderElement {
|
||||
private static final int DIR_MASK = 0xFFFFFFFC;
|
||||
|
||||
/* lines referenced by this outline layer */
|
||||
public LineLayer outlines;
|
||||
public LineBucket outlines;
|
||||
public LineStyle line;
|
||||
public float scale = 1;
|
||||
|
||||
@ -70,13 +70,13 @@ public final class LineLayer extends RenderElement {
|
||||
|
||||
private int tmin = Integer.MIN_VALUE, tmax = Integer.MAX_VALUE;
|
||||
|
||||
LineLayer(int layer) {
|
||||
super(RenderElement.LINE);
|
||||
public LineBucket(int layer) {
|
||||
super(RenderBucket.LINE);
|
||||
this.level = layer;
|
||||
}
|
||||
|
||||
public void addOutline(LineLayer link) {
|
||||
for (LineLayer l = outlines; l != null; l = l.outlines)
|
||||
public void addOutline(LineBucket link) {
|
||||
for (LineBucket l = outlines; l != null; l = l.outlines)
|
||||
if (link == l)
|
||||
return;
|
||||
|
||||
@ -526,7 +526,7 @@ public final class LineLayer extends RenderElement {
|
||||
|
||||
/* factor to normalize extrusion vector and scale to coord scale */
|
||||
private final static float COORD_SCALE_BY_DIR_SCALE =
|
||||
MapRenderer.COORD_SCALE / LineLayer.DIR_SCALE;
|
||||
MapRenderer.COORD_SCALE / LineBucket.DIR_SCALE;
|
||||
|
||||
private final static int CAP_THIN = 0;
|
||||
private final static int CAP_BUTT = 1;
|
||||
@ -565,8 +565,8 @@ public final class LineLayer extends RenderElement {
|
||||
return true;
|
||||
}
|
||||
|
||||
public static RenderElement draw(RenderElement curLayer, GLViewport v,
|
||||
float scale, ElementLayers layers) {
|
||||
public static RenderBucket draw(RenderBucket curLayer, GLViewport v,
|
||||
float scale, RenderBuckets buckets) {
|
||||
|
||||
if (curLayer == null)
|
||||
return null;
|
||||
@ -578,7 +578,6 @@ public final class LineLayer extends RenderElement {
|
||||
Shader s = shaders[mode];
|
||||
s.useProgram();
|
||||
|
||||
//GLState.useProgram(lineProgram[mode]);
|
||||
GLState.blend(true);
|
||||
|
||||
/* Somehow we loose the texture after an indefinite
|
||||
@ -595,7 +594,7 @@ public final class LineLayer extends RenderElement {
|
||||
int uLineHeight = s.uHeight;
|
||||
|
||||
GL.glVertexAttribPointer(s.aPos, 4, GL20.GL_SHORT,
|
||||
false, 0, layers.offset[LINE]);
|
||||
false, 0, buckets.offset[LINE]);
|
||||
|
||||
v.mvp.setAsUniform(s.uMVP);
|
||||
|
||||
@ -620,9 +619,9 @@ public final class LineLayer extends RenderElement {
|
||||
float heightOffset = 0;
|
||||
GL.glUniform1f(uLineHeight, heightOffset);
|
||||
|
||||
RenderElement l = curLayer;
|
||||
for (; l != null && l.type == RenderElement.LINE; l = l.next) {
|
||||
LineLayer ll = (LineLayer) l;
|
||||
RenderBucket l = curLayer;
|
||||
for (; l != null && l.type == RenderBucket.LINE; l = l.next) {
|
||||
LineBucket ll = (LineBucket) l;
|
||||
LineStyle line = ll.line.current();
|
||||
|
||||
if (ll.heightOffset != heightOffset) {
|
||||
@ -693,7 +692,7 @@ public final class LineLayer extends RenderElement {
|
||||
|
||||
/* draw LineLayers references by this outline */
|
||||
|
||||
for (LineLayer ref = ll.outlines; ref != null; ref = ref.outlines) {
|
||||
for (LineBucket ref = ll.outlines; ref != null; ref = ref.outlines) {
|
||||
LineStyle core = ref.line.current();
|
||||
|
||||
// core width
|
@ -14,7 +14,7 @@
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.renderer.elements;
|
||||
package org.oscim.renderer.bucket;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
@ -76,9 +76,9 @@ import org.slf4j.LoggerFactory;
|
||||
* - in our case there is always the polygon fill array at start
|
||||
* - see addLine hack otherwise.
|
||||
*/
|
||||
public final class LineTexLayer extends RenderElement {
|
||||
public final class LineTexBucket extends RenderBucket {
|
||||
|
||||
static final Logger log = LoggerFactory.getLogger(LineTexLayer.class);
|
||||
static final Logger log = LoggerFactory.getLogger(LineTexBucket.class);
|
||||
|
||||
private static final float COORD_SCALE = MapRenderer.COORD_SCALE;
|
||||
/* scale factor mapping extrusion vector to short values */
|
||||
@ -94,7 +94,7 @@ public final class LineTexLayer extends RenderElement {
|
||||
|
||||
protected boolean mRandomizeOffset = true;
|
||||
|
||||
LineTexLayer(int layer) {
|
||||
LineTexBucket(int layer) {
|
||||
super(TEXLINE);
|
||||
|
||||
this.level = layer;
|
||||
@ -261,7 +261,7 @@ public final class LineTexLayer extends RenderElement {
|
||||
|
||||
/* factor to normalize extrusion vector and scale to coord scale */
|
||||
private final static float COORD_SCALE_BY_DIR_SCALE =
|
||||
MapRenderer.COORD_SCALE / LineLayer.DIR_SCALE;
|
||||
MapRenderer.COORD_SCALE / LineBucket.DIR_SCALE;
|
||||
|
||||
private static int mVertexFlipID;
|
||||
|
||||
@ -299,8 +299,8 @@ public final class LineTexLayer extends RenderElement {
|
||||
private final static int STRIDE = 12;
|
||||
private final static int LEN_OFFSET = 8;
|
||||
|
||||
public static RenderElement draw(RenderElement curLayer, GLViewport v,
|
||||
float div, ElementLayers layers) {
|
||||
public static RenderBucket draw(RenderBucket curLayer, GLViewport v,
|
||||
float div, RenderBuckets layers) {
|
||||
|
||||
//if (shader == 0)
|
||||
// return curLayer.next;
|
||||
@ -341,9 +341,9 @@ public final class LineTexLayer extends RenderElement {
|
||||
|
||||
//GL.glBindTexture(GL20.GL_TEXTURE_2D, mTexID[0]);
|
||||
|
||||
RenderElement l = curLayer;
|
||||
RenderBucket l = curLayer;
|
||||
for (; l != null && l.type == TEXLINE; l = l.next) {
|
||||
LineTexLayer ll = (LineTexLayer) l;
|
||||
LineTexBucket ll = (LineTexBucket) l;
|
||||
LineStyle line = ll.line.current();
|
||||
|
||||
GLUtils.setColor(shader.uColor, line.stippleColor, 1);
|
@ -14,7 +14,7 @@
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.renderer.elements;
|
||||
package org.oscim.renderer.bucket;
|
||||
|
||||
import static org.oscim.backend.GL20.GL_LINES;
|
||||
import static org.oscim.backend.GL20.GL_SHORT;
|
||||
@ -29,15 +29,15 @@ import org.oscim.renderer.GLState;
|
||||
import org.oscim.renderer.GLUtils;
|
||||
import org.oscim.renderer.GLViewport;
|
||||
import org.oscim.renderer.MapRenderer;
|
||||
import org.oscim.renderer.elements.VertexData.Chunk;
|
||||
import org.oscim.renderer.bucket.VertexData.Chunk;
|
||||
import org.oscim.theme.styles.AreaStyle;
|
||||
import org.oscim.utils.ColorUtil;
|
||||
import org.oscim.utils.TessJNI;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class MeshLayer extends RenderElement {
|
||||
static final Logger log = LoggerFactory.getLogger(MeshLayer.class);
|
||||
public class MeshBucket extends RenderBucket {
|
||||
static final Logger log = LoggerFactory.getLogger(MeshBucket.class);
|
||||
static final boolean dbgRender = false;
|
||||
|
||||
public AreaStyle area;
|
||||
@ -45,8 +45,8 @@ public class MeshLayer extends RenderElement {
|
||||
|
||||
TessJNI tess = new TessJNI(8);
|
||||
|
||||
public MeshLayer(int level) {
|
||||
super(RenderElement.MESH);
|
||||
public MeshBucket(int level) {
|
||||
super(RenderBucket.MESH);
|
||||
this.level = level;
|
||||
|
||||
}
|
||||
@ -127,7 +127,7 @@ public class MeshLayer extends RenderElement {
|
||||
}
|
||||
}
|
||||
|
||||
public static RenderElement draw(RenderElement l, GLViewport v) {
|
||||
public static RenderBucket draw(RenderBucket l, GLViewport v) {
|
||||
GLState.blend(true);
|
||||
|
||||
Shader s = shader;
|
||||
@ -141,7 +141,7 @@ public class MeshLayer extends RenderElement {
|
||||
GL.glUniform1f(s.uHeight, heightOffset);
|
||||
|
||||
for (; l != null && l.type == MESH; l = l.next) {
|
||||
MeshLayer ml = (MeshLayer) l;
|
||||
MeshBucket ml = (MeshBucket) l;
|
||||
|
||||
//if (ml.indicesVbo == null)
|
||||
// continue;
|
@ -14,7 +14,7 @@
|
||||
* You should have received a copy of the GNU Lesser General License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.renderer.elements;
|
||||
package org.oscim.renderer.bucket;
|
||||
|
||||
import static org.oscim.backend.GL20.GL_ALWAYS;
|
||||
import static org.oscim.backend.GL20.GL_EQUAL;
|
||||
@ -48,9 +48,9 @@ import org.slf4j.LoggerFactory;
|
||||
/**
|
||||
* Special Renderer for drawing tile polygons using the stencil buffer method
|
||||
*/
|
||||
public final class PolygonLayer extends RenderElement {
|
||||
public final class PolygonBucket extends RenderBucket {
|
||||
|
||||
static final Logger log = LoggerFactory.getLogger(PolygonLayer.class);
|
||||
static final Logger log = LoggerFactory.getLogger(PolygonBucket.class);
|
||||
|
||||
public final static int CLIP_STENCIL = 1;
|
||||
public final static int CLIP_DEPTH = 2;
|
||||
@ -62,8 +62,8 @@ public final class PolygonLayer extends RenderElement {
|
||||
|
||||
public AreaStyle area;
|
||||
|
||||
PolygonLayer(int layer) {
|
||||
super(RenderElement.POLYGON);
|
||||
PolygonBucket(int layer) {
|
||||
super(RenderBucket.POLYGON);
|
||||
level = layer;
|
||||
}
|
||||
|
||||
@ -183,7 +183,7 @@ public final class PolygonLayer extends RenderElement {
|
||||
|
||||
private static final float FADE_START = 1.3f;
|
||||
|
||||
private static PolygonLayer[] mAreaLayer;
|
||||
private static PolygonBucket[] mAreaLayer;
|
||||
|
||||
private static Shader polyShader;
|
||||
private static Shader texShader;
|
||||
@ -192,7 +192,7 @@ public final class PolygonLayer extends RenderElement {
|
||||
polyShader = new Shader("base_shader");
|
||||
texShader = new Shader("polygon_layer_tex");
|
||||
|
||||
mAreaLayer = new PolygonLayer[STENCIL_BITS];
|
||||
mAreaLayer = new PolygonBucket[STENCIL_BITS];
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -208,7 +208,7 @@ public final class PolygonLayer extends RenderElement {
|
||||
Shader s;
|
||||
|
||||
for (int i = start; i < end; i++) {
|
||||
PolygonLayer l = mAreaLayer[i];
|
||||
PolygonBucket l = mAreaLayer[i];
|
||||
AreaStyle a = l.area.current();
|
||||
|
||||
boolean useTexture = enableTexture && a.texture != null;
|
||||
@ -271,17 +271,17 @@ public final class PolygonLayer extends RenderElement {
|
||||
|
||||
GLState.blend(true);
|
||||
|
||||
HairLineLayer.Renderer.shader.set(v);
|
||||
HairLineBucket.Renderer.shader.set(v);
|
||||
|
||||
GLUtils.setColor(HairLineLayer.Renderer.shader.uColor,
|
||||
GLUtils.setColor(HairLineBucket.Renderer.shader.uColor,
|
||||
l.area.strokeColor, 1);
|
||||
|
||||
GL.glVertexAttribPointer(HairLineLayer.Renderer.shader.aPos,
|
||||
GL.glVertexAttribPointer(HairLineBucket.Renderer.shader.aPos,
|
||||
2, GL_SHORT, false, 0,
|
||||
// 4 bytes per vertex
|
||||
l.vertexOffset << 2);
|
||||
|
||||
GL.glUniform1f(HairLineLayer.Renderer.shader.uWidth,
|
||||
GL.glUniform1f(HairLineBucket.Renderer.shader.uWidth,
|
||||
a.strokeWidth);
|
||||
|
||||
GL.glDrawElements(GL_LINES,
|
||||
@ -304,8 +304,10 @@ public final class PolygonLayer extends RenderElement {
|
||||
private static Shader setShader(Shader shader, GLMatrix mvp, boolean first) {
|
||||
if (shader.useProgram() || first) {
|
||||
GLState.enableVertexArrays(shader.aPos, -1);
|
||||
|
||||
GL.glVertexAttribPointer(shader.aPos, 2,
|
||||
GL_SHORT, false, 0, 0);
|
||||
|
||||
mvp.setAsUniform(shader.uMVP);
|
||||
}
|
||||
return shader;
|
||||
@ -336,7 +338,7 @@ public final class PolygonLayer extends RenderElement {
|
||||
* @return
|
||||
* next layer
|
||||
*/
|
||||
public static RenderElement draw(RenderElement renderElement, GLViewport v,
|
||||
public static RenderBucket draw(RenderBucket renderElement, GLViewport v,
|
||||
float div, boolean first) {
|
||||
|
||||
GLState.test(false, true);
|
||||
@ -359,9 +361,9 @@ public final class PolygonLayer extends RenderElement {
|
||||
|
||||
byte stencilMask = 0;
|
||||
|
||||
RenderElement l = renderElement;
|
||||
RenderBucket l = renderElement;
|
||||
for (; l != null && l.type == POLYGON; l = l.next) {
|
||||
PolygonLayer pl = (PolygonLayer) l;
|
||||
PolygonBucket pl = (PolygonBucket) l;
|
||||
AreaStyle area = pl.area.current();
|
||||
|
||||
/* fade out polygon layers (set in RenderTheme) */
|
||||
@ -503,7 +505,6 @@ public final class PolygonLayer extends RenderElement {
|
||||
}
|
||||
|
||||
static void clearStencilRegion() {
|
||||
//log.debug("clear stencil");
|
||||
|
||||
mCount = 0;
|
||||
mClear = false;
|
||||
@ -516,7 +517,6 @@ public final class PolygonLayer extends RenderElement {
|
||||
|
||||
/* use clip bit from stencil buffer to clear stencil
|
||||
* 'layer-bits' (0x7f) */
|
||||
//GL.glStencilFunc(GL_EQUAL, CLIP_BIT, CLIP_BIT);
|
||||
GL.glStencilFunc(GL_EQUAL, CLIP_BIT, CLIP_BIT);
|
||||
|
||||
/* set clip bit (0x80) for draw region */
|
||||
@ -532,7 +532,7 @@ public final class PolygonLayer extends RenderElement {
|
||||
* and 'alpha' to fake a fade effect.
|
||||
*/
|
||||
public static void drawOver(GLMatrix mvp, int color, float alpha) {
|
||||
// TODO true could be avoided when same shader and vbo
|
||||
/* TODO true could be avoided when same shader and vbo */
|
||||
setShader(polyShader, mvp, true);
|
||||
|
||||
if (color == 0) {
|
@ -14,14 +14,14 @@
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.renderer.elements;
|
||||
package org.oscim.renderer.bucket;
|
||||
|
||||
import java.nio.ShortBuffer;
|
||||
|
||||
import org.oscim.backend.GL20;
|
||||
import org.oscim.utils.pool.Inlist;
|
||||
|
||||
public abstract class RenderElement extends Inlist<RenderElement> {
|
||||
public abstract class RenderBucket extends Inlist<RenderBucket> {
|
||||
protected static GL20 GL;
|
||||
|
||||
public static final int LINE = 0;
|
||||
@ -46,7 +46,7 @@ public abstract class RenderElement extends Inlist<RenderElement> {
|
||||
protected final VertexData vertexItems = new VertexData();
|
||||
protected final VertexData indiceItems = new VertexData();
|
||||
|
||||
protected RenderElement(int type) {
|
||||
protected RenderBucket(int type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
@ -14,13 +14,13 @@
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.renderer.elements;
|
||||
package org.oscim.renderer.bucket;
|
||||
|
||||
import static org.oscim.renderer.elements.RenderElement.HAIRLINE;
|
||||
import static org.oscim.renderer.elements.RenderElement.LINE;
|
||||
import static org.oscim.renderer.elements.RenderElement.MESH;
|
||||
import static org.oscim.renderer.elements.RenderElement.POLYGON;
|
||||
import static org.oscim.renderer.elements.RenderElement.TEXLINE;
|
||||
import static org.oscim.renderer.bucket.RenderBucket.HAIRLINE;
|
||||
import static org.oscim.renderer.bucket.RenderBucket.LINE;
|
||||
import static org.oscim.renderer.bucket.RenderBucket.MESH;
|
||||
import static org.oscim.renderer.bucket.RenderBucket.POLYGON;
|
||||
import static org.oscim.renderer.bucket.RenderBucket.TEXLINE;
|
||||
|
||||
import java.nio.ShortBuffer;
|
||||
|
||||
@ -39,9 +39,9 @@ import org.slf4j.LoggerFactory;
|
||||
* MapTile. It can be used for other purposes as well but some optimizations
|
||||
* (and limitations) probably wont make sense in different contexts.
|
||||
*/
|
||||
public class ElementLayers extends TileData {
|
||||
public class RenderBuckets extends TileData {
|
||||
|
||||
static final Logger log = LoggerFactory.getLogger(ElementLayers.class);
|
||||
static final Logger log = LoggerFactory.getLogger(RenderBuckets.class);
|
||||
|
||||
public final static int[] VERTEX_SHORT_CNT = {
|
||||
4, // LINE_VERTEX
|
||||
@ -55,11 +55,11 @@ public class ElementLayers extends TileData {
|
||||
private final static int TEXTURE_VERTEX_SHORTS = 6;
|
||||
private final static int SHORT_BYTES = 2;
|
||||
|
||||
/** mixed Polygon- and LineLayer */
|
||||
private RenderElement baseLayers;
|
||||
/** mixed Polygon- and LineBuckets */
|
||||
private RenderBucket baseBuckets;
|
||||
|
||||
/** Text- and SymbolLayer */
|
||||
private RenderElement textureLayers;
|
||||
/** Text- and SymbolBuckets */
|
||||
private RenderBucket textureBuckets;
|
||||
|
||||
/**
|
||||
* VBO holds all vertex data to draw lines and polygons after compilation.
|
||||
@ -76,18 +76,18 @@ public class ElementLayers extends TileData {
|
||||
* To not need to switch VertexAttribPointer positions all the time:
|
||||
* 1. polygons are packed in VBO at offset 0
|
||||
* 2. lines afterwards at lineOffset
|
||||
* 3. other layers keep their byte offset in offset
|
||||
* 3. other buckets keep their byte offset in offset
|
||||
*/
|
||||
public int[] offset = { 0, 0 };
|
||||
|
||||
private RenderElement mCurLayer;
|
||||
private RenderBucket mCurBucket;
|
||||
|
||||
/**
|
||||
* add the LineLayer for a level with a given Line style. Levels are
|
||||
* add the LineBucket for a level with a given Line style. Levels are
|
||||
* ordered from bottom (0) to top
|
||||
*/
|
||||
public LineLayer addLineLayer(int level, LineStyle style) {
|
||||
LineLayer l = (LineLayer) getLayer(level, LINE);
|
||||
public LineBucket addLineBucket(int level, LineStyle style) {
|
||||
LineBucket l = (LineBucket) getBucket(level, LINE);
|
||||
if (l == null)
|
||||
return null;
|
||||
// FIXME l.scale = style.width;
|
||||
@ -96,24 +96,24 @@ public class ElementLayers extends TileData {
|
||||
return l;
|
||||
}
|
||||
|
||||
public PolygonLayer addPolygonLayer(int level, AreaStyle style) {
|
||||
PolygonLayer l = (PolygonLayer) getLayer(level, POLYGON);
|
||||
public PolygonBucket addPolygonBucket(int level, AreaStyle style) {
|
||||
PolygonBucket l = (PolygonBucket) getBucket(level, POLYGON);
|
||||
if (l == null)
|
||||
return null;
|
||||
l.area = style;
|
||||
return l;
|
||||
}
|
||||
|
||||
public MeshLayer addMeshLayer(int level, AreaStyle style) {
|
||||
MeshLayer l = (MeshLayer) getLayer(level, MESH);
|
||||
public MeshBucket addMeshBucket(int level, AreaStyle style) {
|
||||
MeshBucket l = (MeshBucket) getBucket(level, MESH);
|
||||
if (l == null)
|
||||
return null;
|
||||
l.area = style;
|
||||
return l;
|
||||
}
|
||||
|
||||
public HairLineLayer addHairLineLayer(int level, LineStyle style) {
|
||||
HairLineLayer ll = getHairLineLayer(level);
|
||||
public HairLineBucket addHairLineBucket(int level, LineStyle style) {
|
||||
HairLineBucket ll = getHairLineBucket(level);
|
||||
if (ll == null)
|
||||
return null;
|
||||
ll.line = style;
|
||||
@ -122,162 +122,162 @@ public class ElementLayers extends TileData {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get or add the LineLayer for a level. Levels are ordered from
|
||||
* Get or add the LineBucket for a level. Levels are ordered from
|
||||
* bottom (0) to top
|
||||
*/
|
||||
public LineLayer getLineLayer(int level) {
|
||||
return (LineLayer) getLayer(level, LINE);
|
||||
public LineBucket getLineBucket(int level) {
|
||||
return (LineBucket) getBucket(level, LINE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get or add the MeshLayer for a level. Levels are ordered from
|
||||
* Get or add the MeshBucket for a level. Levels are ordered from
|
||||
* bottom (0) to top
|
||||
*/
|
||||
public MeshLayer getMeshLayer(int level) {
|
||||
return (MeshLayer) getLayer(level, MESH);
|
||||
public MeshBucket getMeshBucket(int level) {
|
||||
return (MeshBucket) getBucket(level, MESH);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get or add the PolygonLayer for a level. Levels are ordered from
|
||||
* Get or add the PolygonBucket for a level. Levels are ordered from
|
||||
* bottom (0) to top
|
||||
*/
|
||||
public PolygonLayer getPolygonLayer(int level) {
|
||||
return (PolygonLayer) getLayer(level, POLYGON);
|
||||
public PolygonBucket getPolygonBucket(int level) {
|
||||
return (PolygonBucket) getBucket(level, POLYGON);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get or add the TexLineLayer for a level. Levels are ordered from
|
||||
* Get or add the TexLineBucket for a level. Levels are ordered from
|
||||
* bottom (0) to top
|
||||
*/
|
||||
public LineTexLayer getLineTexLayer(int level) {
|
||||
return (LineTexLayer) getLayer(level, TEXLINE);
|
||||
public LineTexBucket getLineTexBucket(int level) {
|
||||
return (LineTexBucket) getBucket(level, TEXLINE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get or add the TexLineLayer for a level. Levels are ordered from
|
||||
* Get or add the TexLineBucket for a level. Levels are ordered from
|
||||
* bottom (0) to top
|
||||
*/
|
||||
public HairLineLayer getHairLineLayer(int level) {
|
||||
return (HairLineLayer) getLayer(level, HAIRLINE);
|
||||
public HairLineBucket getHairLineBucket(int level) {
|
||||
return (HairLineBucket) getBucket(level, HAIRLINE);
|
||||
}
|
||||
|
||||
public TextLayer addTextLayer(TextLayer textLayer) {
|
||||
textLayer.next = textureLayers;
|
||||
textureLayers = textLayer;
|
||||
return textLayer;
|
||||
public TextBucket addTextBucket(TextBucket textBucket) {
|
||||
textBucket.next = textureBuckets;
|
||||
textureBuckets = textBucket;
|
||||
return textBucket;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set new Base-Layers and clear previous.
|
||||
* Set new Base-Buckets and clear previous.
|
||||
*/
|
||||
public void setBaseLayers(RenderElement layers) {
|
||||
for (RenderElement l = baseLayers; l != null; l = l.next)
|
||||
public void setBaseBuckets(RenderBucket buckets) {
|
||||
for (RenderBucket l = baseBuckets; l != null; l = l.next)
|
||||
l.clear();
|
||||
|
||||
baseLayers = layers;
|
||||
baseBuckets = buckets;
|
||||
}
|
||||
|
||||
public RenderElement getBaseLayers() {
|
||||
return baseLayers;
|
||||
public RenderBucket getBaseBuckets() {
|
||||
return baseBuckets;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set new TextureLayers and clear previous.
|
||||
* Set new TextureBuckets and clear previous.
|
||||
*/
|
||||
public void setTextureLayers(TextureLayer tl) {
|
||||
for (RenderElement l = textureLayers; l != null; l = l.next)
|
||||
public void setTextureBuckets(TextureBucket tl) {
|
||||
for (RenderBucket l = textureBuckets; l != null; l = l.next)
|
||||
l.clear();
|
||||
|
||||
textureLayers = tl;
|
||||
textureBuckets = tl;
|
||||
}
|
||||
|
||||
public RenderElement getTextureLayers() {
|
||||
return textureLayers;
|
||||
public RenderBucket getTextureBuckets() {
|
||||
return textureBuckets;
|
||||
}
|
||||
|
||||
private RenderElement getLayer(int level, int type) {
|
||||
RenderElement layer = null;
|
||||
private RenderBucket getBucket(int level, int type) {
|
||||
RenderBucket bucket = null;
|
||||
|
||||
if (mCurLayer != null && mCurLayer.level == level) {
|
||||
layer = mCurLayer;
|
||||
if (layer.type != type) {
|
||||
log.error("BUG wrong layer {} {} on layer {}",
|
||||
Integer.valueOf(layer.type),
|
||||
if (mCurBucket != null && mCurBucket.level == level) {
|
||||
bucket = mCurBucket;
|
||||
if (bucket.type != type) {
|
||||
log.error("BUG wrong bucket {} {} on level {}",
|
||||
Integer.valueOf(bucket.type),
|
||||
Integer.valueOf(type),
|
||||
Integer.valueOf(level));
|
||||
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
return layer;
|
||||
return bucket;
|
||||
}
|
||||
|
||||
RenderElement l = baseLayers;
|
||||
if (l == null || l.level > level) {
|
||||
/* insert new layer at start */
|
||||
l = null;
|
||||
RenderBucket b = baseBuckets;
|
||||
if (b == null || b.level > level) {
|
||||
/* insert new bucket at start */
|
||||
b = null;
|
||||
} else {
|
||||
while (true) {
|
||||
/* found layer */
|
||||
if (l.level == level) {
|
||||
layer = l;
|
||||
/* found bucket */
|
||||
if (b.level == level) {
|
||||
bucket = b;
|
||||
break;
|
||||
}
|
||||
/* insert layer between current and next layer */
|
||||
if (l.next == null || l.next.level > level)
|
||||
/* insert bucket between current and next bucket */
|
||||
if (b.next == null || b.next.level > level)
|
||||
break;
|
||||
|
||||
l = l.next;
|
||||
b = b.next;
|
||||
}
|
||||
}
|
||||
|
||||
if (layer == null) {
|
||||
if (bucket == null) {
|
||||
/* add a new RenderElement */
|
||||
if (type == LINE)
|
||||
layer = new LineLayer(level);
|
||||
bucket = new LineBucket(level);
|
||||
else if (type == POLYGON)
|
||||
layer = new PolygonLayer(level);
|
||||
bucket = new PolygonBucket(level);
|
||||
else if (type == TEXLINE)
|
||||
layer = new LineTexLayer(level);
|
||||
bucket = new LineTexBucket(level);
|
||||
else if (type == MESH)
|
||||
layer = new MeshLayer(level);
|
||||
bucket = new MeshBucket(level);
|
||||
else if (type == HAIRLINE)
|
||||
layer = new HairLineLayer(level);
|
||||
bucket = new HairLineBucket(level);
|
||||
|
||||
if (layer == null)
|
||||
if (bucket == null)
|
||||
throw new IllegalArgumentException();
|
||||
|
||||
if (l == null) {
|
||||
if (b == null) {
|
||||
/** insert at start */
|
||||
layer.next = baseLayers;
|
||||
baseLayers = layer;
|
||||
bucket.next = baseBuckets;
|
||||
baseBuckets = bucket;
|
||||
} else {
|
||||
layer.next = l.next;
|
||||
l.next = layer;
|
||||
bucket.next = b.next;
|
||||
b.next = bucket;
|
||||
}
|
||||
}
|
||||
|
||||
/* check if found layer matches requested type */
|
||||
if (layer.type != type) {
|
||||
log.error("BUG wrong layer {} {} on layer {}",
|
||||
Integer.valueOf(layer.type),
|
||||
/* check if found buckets matches requested type */
|
||||
if (bucket.type != type) {
|
||||
log.error("BUG wrong bucket {} {} on level {}",
|
||||
Integer.valueOf(bucket.type),
|
||||
Integer.valueOf(type),
|
||||
Integer.valueOf(level));
|
||||
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
|
||||
mCurLayer = layer;
|
||||
mCurBucket = bucket;
|
||||
|
||||
return layer;
|
||||
return bucket;
|
||||
}
|
||||
|
||||
private int countVboSize() {
|
||||
int vboShorts = 0;
|
||||
|
||||
for (RenderElement l = baseLayers; l != null; l = l.next)
|
||||
for (RenderBucket l = baseBuckets; l != null; l = l.next)
|
||||
vboShorts += l.numVertices * VERTEX_SHORT_CNT[l.type];
|
||||
|
||||
for (RenderElement l = textureLayers; l != null; l = l.next)
|
||||
for (RenderBucket l = textureBuckets; l != null; l = l.next)
|
||||
vboShorts += l.numVertices * TEXTURE_VERTEX_SHORTS;
|
||||
|
||||
return vboShorts;
|
||||
@ -286,31 +286,31 @@ public class ElementLayers extends TileData {
|
||||
private int countIboSize() {
|
||||
int numIndices = 0;
|
||||
|
||||
for (RenderElement l = baseLayers; l != null; l = l.next)
|
||||
for (RenderBucket l = baseBuckets; l != null; l = l.next)
|
||||
numIndices += l.numIndices;
|
||||
|
||||
for (RenderElement l = textureLayers; l != null; l = l.next)
|
||||
for (RenderBucket l = textureBuckets; l != null; l = l.next)
|
||||
numIndices += l.numIndices;
|
||||
|
||||
return numIndices;
|
||||
}
|
||||
|
||||
public void setFrom(ElementLayers layers) {
|
||||
setBaseLayers(layers.baseLayers);
|
||||
setTextureLayers((TextureLayer) layers.textureLayers);
|
||||
public void setFrom(RenderBuckets buckets) {
|
||||
setBaseBuckets(buckets.baseBuckets);
|
||||
setTextureBuckets((TextureBucket) buckets.textureBuckets);
|
||||
|
||||
mCurLayer = null;
|
||||
layers.baseLayers = null;
|
||||
layers.textureLayers = null;
|
||||
layers.mCurLayer = null;
|
||||
mCurBucket = null;
|
||||
buckets.baseBuckets = null;
|
||||
buckets.textureBuckets = null;
|
||||
buckets.mCurBucket = null;
|
||||
}
|
||||
|
||||
/** cleanup only when layers are not used by tile or layer anymore! */
|
||||
/** cleanup only when buckets are not used by tile or bucket anymore! */
|
||||
public void clear() {
|
||||
/* NB: set null calls clear() on each layer! */
|
||||
setBaseLayers(null);
|
||||
setTextureLayers(null);
|
||||
mCurLayer = null;
|
||||
/* NB: set null calls clear() on each bucket! */
|
||||
setBaseBuckets(null);
|
||||
setTextureBuckets(null);
|
||||
mCurBucket = null;
|
||||
|
||||
vbo = BufferObject.release(vbo);
|
||||
ibo = BufferObject.release(ibo);
|
||||
@ -322,10 +322,10 @@ public class ElementLayers extends TileData {
|
||||
}
|
||||
|
||||
public void prepare() {
|
||||
for (RenderElement l = baseLayers; l != null; l = l.next)
|
||||
for (RenderBucket l = baseBuckets; l != null; l = l.next)
|
||||
l.prepare();
|
||||
|
||||
for (RenderElement l = textureLayers; l != null; l = l.next)
|
||||
for (RenderBucket l = textureBuckets; l != null; l = l.next)
|
||||
l.prepare();
|
||||
}
|
||||
|
||||
@ -367,7 +367,7 @@ public class ElementLayers extends TileData {
|
||||
//>>compile(vboData, iboData, addFill);
|
||||
int pos = addFill ? 4 : 0;
|
||||
|
||||
for (RenderElement l = baseLayers; l != null; l = l.next) {
|
||||
for (RenderBucket l = baseBuckets; l != null; l = l.next) {
|
||||
if (l.type == POLYGON) {
|
||||
l.compile(vboData, iboData);
|
||||
|
||||
@ -379,7 +379,7 @@ public class ElementLayers extends TileData {
|
||||
|
||||
offset[LINE] = vboData.position() * SHORT_BYTES;
|
||||
pos = 0;
|
||||
for (RenderElement l = baseLayers; l != null; l = l.next) {
|
||||
for (RenderBucket l = baseBuckets; l != null; l = l.next) {
|
||||
if (l.type == LINE) {
|
||||
l.compile(vboData, iboData);
|
||||
|
||||
@ -390,13 +390,13 @@ public class ElementLayers extends TileData {
|
||||
|
||||
//offset[TEXLINE] = size * SHORT_BYTES;
|
||||
|
||||
for (RenderElement l = baseLayers; l != null; l = l.next) {
|
||||
for (RenderBucket l = baseBuckets; l != null; l = l.next) {
|
||||
if (l.type == TEXLINE || l.type == MESH || l.type == HAIRLINE) {
|
||||
l.compile(vboData, iboData);
|
||||
}
|
||||
}
|
||||
|
||||
for (RenderElement l = textureLayers; l != null; l = l.next) {
|
||||
for (RenderBucket l = textureBuckets; l != null; l = l.next) {
|
||||
l.compile(vboData, iboData);
|
||||
}
|
||||
//<<
|
||||
@ -441,15 +441,15 @@ public class ElementLayers extends TileData {
|
||||
}
|
||||
|
||||
public static void initRenderer(GL20 gl) {
|
||||
RenderElement.GL = gl;
|
||||
RenderBucket.GL = gl;
|
||||
|
||||
LineLayer.Renderer.init();
|
||||
LineTexLayer.Renderer.init();
|
||||
PolygonLayer.Renderer.init();
|
||||
TextureLayer.Renderer.init();
|
||||
BitmapLayer.Renderer.init();
|
||||
MeshLayer.Renderer.init();
|
||||
HairLineLayer.Renderer.init();
|
||||
LineBucket.Renderer.init();
|
||||
LineTexBucket.Renderer.init();
|
||||
PolygonBucket.Renderer.init();
|
||||
TextureBucket.Renderer.init();
|
||||
BitmapBucket.Renderer.init();
|
||||
MeshBucket.Renderer.init();
|
||||
HairLineBucket.Renderer.init();
|
||||
|
||||
TextureItem.init(gl);
|
||||
}
|
@ -14,7 +14,7 @@
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.renderer.elements;
|
||||
package org.oscim.renderer.bucket;
|
||||
|
||||
import java.nio.ShortBuffer;
|
||||
|
||||
@ -25,8 +25,8 @@ import org.oscim.utils.pool.Inlist;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public final class SymbolLayer extends TextureLayer {
|
||||
static final Logger log = LoggerFactory.getLogger(SymbolLayer.class);
|
||||
public final class SymbolBucket extends TextureBucket {
|
||||
static final Logger log = LoggerFactory.getLogger(SymbolBucket.class);
|
||||
|
||||
private final static float SCALE = 8.0f;
|
||||
private final static int VERTICES_PER_SPRITE = 4;
|
||||
@ -35,8 +35,8 @@ public final class SymbolLayer extends TextureLayer {
|
||||
private TextureItem prevTextures;
|
||||
private List<SymbolItem> mSymbols = new List<SymbolItem>();
|
||||
|
||||
public SymbolLayer() {
|
||||
super(RenderElement.SYMBOL);
|
||||
public SymbolBucket() {
|
||||
super(RenderBucket.SYMBOL);
|
||||
fixed = true;
|
||||
}
|
||||
|
||||
@ -160,7 +160,7 @@ public final class SymbolLayer extends TextureLayer {
|
||||
vertexItems.add(tx, ty, x2, y2, u2, v1);
|
||||
|
||||
/* six elements used to draw the four vertices */
|
||||
t.indices += TextureLayer.INDICES_PER_SPRITE;
|
||||
t.indices += TextureBucket.INDICES_PER_SPRITE;
|
||||
}
|
||||
numIndices += t.indices;
|
||||
}
|
@ -14,7 +14,7 @@
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.renderer.elements;
|
||||
package org.oscim.renderer.bucket;
|
||||
|
||||
import org.oscim.backend.canvas.Bitmap;
|
||||
import org.oscim.core.PointF;
|
@ -14,14 +14,14 @@
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.renderer.elements;
|
||||
package org.oscim.renderer.bucket;
|
||||
|
||||
import static org.oscim.renderer.MapRenderer.COORD_SCALE;
|
||||
|
||||
import org.oscim.backend.CanvasAdapter;
|
||||
import org.oscim.backend.canvas.Canvas;
|
||||
|
||||
public class TextLayer extends TextureLayer {
|
||||
public class TextBucket extends TextureBucket {
|
||||
//static final Logger log = LoggerFactory.getLogger(TextureLayer.class);
|
||||
|
||||
protected final static int LBIT_MASK = 0xfffffffe;
|
||||
@ -40,8 +40,8 @@ public class TextLayer extends TextureLayer {
|
||||
this.labels = labels;
|
||||
}
|
||||
|
||||
public TextLayer() {
|
||||
super(RenderElement.SYMBOL);
|
||||
public TextBucket() {
|
||||
super(RenderBucket.SYMBOL);
|
||||
mCanvas = CanvasAdapter.newCanvas();
|
||||
fixed = true;
|
||||
}
|
||||
@ -141,7 +141,7 @@ public class TextLayer extends TextureLayer {
|
||||
addItem(it, width, height, x, y);
|
||||
|
||||
/* six indices to draw the four vertices */
|
||||
numIndices += TextureLayer.INDICES_PER_SPRITE;
|
||||
numIndices += TextureBucket.INDICES_PER_SPRITE;
|
||||
numVertices += 4;
|
||||
|
||||
if (it.next == null
|
2
vtm/src/org/oscim/renderer/elements/TextItem.java → vtm/src/org/oscim/renderer/bucket/TextItem.java
2
vtm/src/org/oscim/renderer/elements/TextItem.java → vtm/src/org/oscim/renderer/bucket/TextItem.java
@ -14,7 +14,7 @@
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.renderer.elements;
|
||||
package org.oscim.renderer.bucket;
|
||||
|
||||
import org.oscim.theme.styles.TextStyle;
|
||||
import org.oscim.utils.pool.Inlist;
|
@ -14,7 +14,7 @@
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.renderer.elements;
|
||||
package org.oscim.renderer.bucket;
|
||||
|
||||
import static org.oscim.renderer.MapRenderer.COORD_SCALE;
|
||||
|
||||
@ -25,13 +25,13 @@ import org.oscim.renderer.GLShader;
|
||||
import org.oscim.renderer.GLState;
|
||||
import org.oscim.renderer.GLViewport;
|
||||
import org.oscim.renderer.MapRenderer;
|
||||
import org.oscim.renderer.elements.TextureItem.TexturePool;
|
||||
import org.oscim.renderer.bucket.TextureItem.TexturePool;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public abstract class TextureLayer extends RenderElement {
|
||||
public abstract class TextureBucket extends RenderBucket {
|
||||
|
||||
static final Logger log = LoggerFactory.getLogger(TextureLayer.class);
|
||||
static final Logger log = LoggerFactory.getLogger(TextureBucket.class);
|
||||
|
||||
public final static int INDICES_PER_SPRITE = 6;
|
||||
final static int VERTICES_PER_SPRITE = 4;
|
||||
@ -46,7 +46,7 @@ public abstract class TextureLayer extends RenderElement {
|
||||
TEXTURE_WIDTH,
|
||||
TEXTURE_HEIGHT);
|
||||
|
||||
protected TextureLayer(int type) {
|
||||
protected TextureBucket(int type) {
|
||||
super(type);
|
||||
}
|
||||
|
||||
@ -111,7 +111,7 @@ public abstract class TextureLayer extends RenderElement {
|
||||
pool.init(0);
|
||||
}
|
||||
|
||||
public static RenderElement draw(ElementLayers layers, RenderElement l,
|
||||
public static RenderBucket draw(RenderBuckets layers, RenderBucket l,
|
||||
GLViewport v, float scale) {
|
||||
|
||||
GLState.test(false, false);
|
||||
@ -119,7 +119,7 @@ public abstract class TextureLayer extends RenderElement {
|
||||
|
||||
shader.useProgram();
|
||||
|
||||
TextureLayer tl = (TextureLayer) l;
|
||||
TextureBucket tl = (TextureBucket) l;
|
||||
GL.glUniform1f(shader.uScale, tl.fixed ? 1 / scale : 1);
|
||||
|
||||
v.proj.setAsUniform(shader.uProj);
|
@ -14,7 +14,7 @@
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.renderer.elements;
|
||||
package org.oscim.renderer.bucket;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
@ -14,11 +14,11 @@
|
||||
* You should have received a copy of the GNU Lesser General Public License along with
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.oscim.renderer.elements;
|
||||
package org.oscim.renderer.bucket;
|
||||
|
||||
import java.nio.ShortBuffer;
|
||||
|
||||
import org.oscim.renderer.elements.VertexData.Chunk;
|
||||
import org.oscim.renderer.bucket.VertexData.Chunk;
|
||||
import org.oscim.utils.pool.Inlist;
|
||||
import org.oscim.utils.pool.SyncPool;
|
||||
import org.slf4j.Logger;
|
||||
@ -102,6 +102,9 @@ public class VertexData extends Inlist.List<Chunk> {
|
||||
vertices = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return sum of elements added
|
||||
*/
|
||||
public int compile(ShortBuffer sbuf) {
|
||||
if (cur == null)
|
||||
return 0;
|
||||
@ -114,7 +117,6 @@ public class VertexData extends Inlist.List<Chunk> {
|
||||
sbuf.put(it.vertices, 0, it.used);
|
||||
}
|
||||
dispose();
|
||||
//log.debug("compiled {}", size);
|
||||
return size;
|
||||
}
|
||||
|
@ -37,7 +37,7 @@ import org.oscim.backend.canvas.Paint.FontStyle;
|
||||
import org.oscim.renderer.atlas.TextureAtlas;
|
||||
import org.oscim.renderer.atlas.TextureAtlas.Rect;
|
||||
import org.oscim.renderer.atlas.TextureRegion;
|
||||
import org.oscim.renderer.elements.TextureItem;
|
||||
import org.oscim.renderer.bucket.TextureItem;
|
||||
import org.oscim.theme.IRenderTheme.ThemeException;
|
||||
import org.oscim.theme.rule.Rule;
|
||||
import org.oscim.theme.rule.Rule.Closed;
|
||||
|
@ -19,7 +19,7 @@ package org.oscim.theme.styles;
|
||||
import static org.oscim.backend.canvas.Color.parseColor;
|
||||
|
||||
import org.oscim.backend.canvas.Color;
|
||||
import org.oscim.renderer.elements.TextureItem;
|
||||
import org.oscim.renderer.bucket.TextureItem;
|
||||
import org.oscim.theme.IRenderTheme.Callback;
|
||||
|
||||
/*TODO
|
||||
|
@ -18,7 +18,7 @@ package org.oscim.utils;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import org.oscim.renderer.elements.VertexData;
|
||||
import org.oscim.renderer.bucket.VertexData;
|
||||
import org.oscim.utils.math.MathUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
Loading…
x
Reference in New Issue
Block a user