fixup: layer -> bucket variable names

This commit is contained in:
Hannes Janetzek 2014-09-19 19:46:50 +02:00
parent b057c56466
commit b031f98fff
16 changed files with 116 additions and 135 deletions

View File

@ -266,7 +266,7 @@ public class MapTile extends Tile {
* Get the default ElementLayers which are added * Get the default ElementLayers which are added
* by {@link VectorTileLoader} * by {@link VectorTileLoader}
*/ */
public RenderBuckets getLayers() { public RenderBuckets getBuckets() {
if (!(data instanceof RenderBuckets)) if (!(data instanceof RenderBuckets))
return null; return null;

View File

@ -175,14 +175,14 @@ public abstract class TileRenderer extends LayerRenderer {
private static int uploadTileData(MapTile tile) { private static int uploadTileData(MapTile tile) {
tile.state = READY; tile.state = READY;
RenderBuckets layers = tile.getLayers(); RenderBuckets buckets = tile.getBuckets();
/* tile might only contain label layers */ /* tile might only contain label layers */
if (layers == null) if (buckets == null)
return 0; return 0;
if (!layers.compile(true)) { if (!buckets.compile(true)) {
layers.clear(); buckets.clear();
return 0; return 0;
} }

View File

@ -152,8 +152,8 @@ public class VectorTileRenderer extends TileRenderer {
/* use holder proxy when it is set */ /* use holder proxy when it is set */
RenderBuckets buckets = (tile.holder == null) RenderBuckets buckets = (tile.holder == null)
? tile.getLayers() ? tile.getBuckets()
: tile.holder.getLayers(); : tile.holder.getBuckets();
if (buckets == null || buckets.vbo == null) if (buckets == null || buckets.vbo == null)
return; return;

View File

@ -193,7 +193,7 @@ public class BuildingRenderer extends ExtrusionRenderer {
} }
private static ExtrusionBuckets getLayer(MapTile t) { private static ExtrusionBuckets getLayer(MapTile t) {
RenderBuckets layers = t.getLayers(); RenderBuckets layers = t.getBuckets();
if (layers != null && !t.state(READY | NEW_DATA)) if (layers != null && !t.state(READY | NEW_DATA))
return null; return null;

View File

@ -58,12 +58,12 @@ public class TestTileLayer extends TileLayer {
@Override @Override
public boolean loadTile(MapTile tile) { public boolean loadTile(MapTile tile) {
log.debug("load tile " + tile); log.debug("load tile " + tile);
RenderBuckets layers = new RenderBuckets(); RenderBuckets buckets = new RenderBuckets();
tile.data = layers; tile.data = buckets;
LineBucket ll = layers.getLineBucket(0); LineBucket lb = buckets.getLineBucket(0);
ll.line = mLineStyle; lb.line = mLineStyle;
ll.scale = 2; lb.scale = 2;
int m = 20; int m = 20;
int s = Tile.SIZE - m * 2; int s = Tile.SIZE - m * 2;
@ -77,7 +77,7 @@ public class TestTileLayer extends TileLayer {
g.addPoint(s, m); g.addPoint(s, m);
g.addPoint(m, m); g.addPoint(m, m);
ll.addLine(g); lb.addLine(g);
return true; return true;
} }

View File

@ -197,7 +197,8 @@ public class VectorTileLayer extends TileLayer {
} }
public void callHooksComplete(MapTile tile, boolean success) { public void callHooksComplete(MapTile tile, boolean success) {
/* cannot use simple iterater as this function is called concurently */ /* NB: cannot use internal iterater as this function
* is called concurently by TileLoaders */
LList<TileLoaderThemeHook> th = mLoaderThemeHooks.head(); LList<TileLoaderThemeHook> th = mLoaderThemeHooks.head();
while (th != null) { while (th != null) {

View File

@ -62,16 +62,16 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
/** currently processed MapElement */ /** currently processed MapElement */
protected MapElement mElement; protected MapElement mElement;
/** current line layer (will be used for outline layers) */ /** current line bucket (will be used for outline bucket) */
protected LineBucket mCurLineLayer; protected LineBucket mCurLineBucket;
/** Current layer for adding elements */ /** Current bucket for adding elements */
protected int mCurLayer; protected int mCurBucket;
/** Line-scale-factor depending on zoom and latitude */ /** Line-scale-factor depending on zoom and latitude */
protected float mLineScale = 1.0f; protected float mLineScale = 1.0f;
protected RenderBuckets mLayers; protected RenderBuckets mBuckets;
private final VectorTileLayer mTileLayer; private final VectorTileLayer mTileLayer;
@ -109,8 +109,8 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
/* scale line width relative to latitude + PI * thumb */ /* scale line width relative to latitude + PI * thumb */
mLineScale *= 0.4f + 0.6f * ((float) Math.sin(Math.abs(lat) * (Math.PI / 180))); mLineScale *= 0.4f + 0.6f * ((float) Math.sin(Math.abs(lat) * (Math.PI / 180)));
mLayers = new RenderBuckets(); mBuckets = new RenderBuckets();
tile.data = mLayers; tile.data = mBuckets;
try { try {
/* query data source, which calls process() callback */ /* query data source, which calls process() callback */
@ -130,8 +130,8 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
public void completed(QueryResult result) { public void completed(QueryResult result) {
mTileLayer.callHooksComplete(mTile, result == QueryResult.SUCCESS); mTileLayer.callHooksComplete(mTile, result == QueryResult.SUCCESS);
/* finish layers - tessellate and cleanup on worker-thread */ /* finish buckets- tessellate and cleanup on worker-thread */
mLayers.prepare(); mBuckets.prepare();
super.completed(result); super.completed(result);
@ -177,7 +177,7 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
if (isCanceled() || mTile.state(CANCEL)) if (isCanceled() || mTile.state(CANCEL))
return; return;
if (mTileLayer.callProcessHooks(mTile, mLayers, element)) if (mTileLayer.callProcessHooks(mTile, mBuckets, element))
return; return;
TagSet tags = filterTags(element.tags); TagSet tags = filterTags(element.tags);
@ -190,31 +190,16 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
if (element.type == GeometryType.POINT) { if (element.type == GeometryType.POINT) {
renderNode(renderTheme.matchElement(element.type, tags, mTile.zoomLevel)); renderNode(renderTheme.matchElement(element.type, tags, mTile.zoomLevel));
} else { } else {
mCurLayer = getValidLayer(element.layer) * renderTheme.getLevels(); mCurBucket = getValidLayer(element.layer) * renderTheme.getLevels();
renderWay(renderTheme.matchElement(element.type, tags, mTile.zoomLevel)); renderWay(renderTheme.matchElement(element.type, tags, mTile.zoomLevel));
} }
clearState(); clearState();
} }
// private final static LineStyle DEBUG_LINE =
// new LineStyle(Integer.MAX_VALUE / 12, Color.MAGENTA, 1.2f);
//
// private final static TextStyle DEBUG_TEXT = new TextBuilder()
// .setFontSize(12)
// .setColor(Color.RED)
// .setCaption(true)
// .setTextKey(Tag.KEY_NAME)
// .build();
protected void renderWay(RenderStyle[] style) { protected void renderWay(RenderStyle[] style) {
if (style == null) { if (style == null)
// DEBUG_LINE.renderWay(this);
// String t = mElement.tags.toString();
// mElement.tags.clear();
// mElement.tags.add(new Tag(Tag.KEY_NAME, t));
// DEBUG_TEXT.renderWay(this);
return; return;
}
for (int i = 0, n = style.length; i < n; i++) for (int i = 0, n = style.length; i < n; i++)
style[i].renderWay(this); style[i].renderWay(this);
} }
@ -228,54 +213,54 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
} }
protected void clearState() { protected void clearState() {
mCurLineLayer = null; mCurLineBucket = null;
mElement = null; mElement = null;
} }
/*** RenderThemeCallback ***/ /*** RenderThemeCallback ***/
@Override @Override
public void renderWay(LineStyle line, int level) { public void renderWay(LineStyle line, int level) {
int numLayer = mCurLayer + level; int nLevel = mCurBucket + level;
if (line.stipple == 0) { if (line.stipple == 0) {
if (line.outline && mCurLineLayer == null) { if (line.outline && mCurLineBucket == null) {
log.debug("missing line for outline! " + mElement.tags log.debug("missing line for outline! " + mElement.tags
+ " lvl:" + level + " layer:" + mElement.layer); + " lvl:" + level + " layer:" + mElement.layer);
return; return;
} }
LineBucket ll = mLayers.getLineBucket(numLayer); LineBucket lb = mBuckets.getLineBucket(nLevel);
if (ll.line == null) { if (lb.line == null) {
ll.line = line; lb.line = line;
ll.scale = line.fixed ? 1 : mLineScale; lb.scale = line.fixed ? 1 : mLineScale;
ll.setExtents(-4, Tile.SIZE + 4); lb.setExtents(-4, Tile.SIZE + 4);
} }
if (line.outline) { if (line.outline) {
ll.addOutline(mCurLineLayer); lb.addOutline(mCurLineBucket);
return; return;
} }
ll.addLine(mElement); lb.addLine(mElement);
/* keep reference for outline layer(s) */ /* keep reference for outline layer(s) */
mCurLineLayer = ll; mCurLineBucket = lb;
} else { } else {
LineTexBucket ll = mLayers.getLineTexBucket(numLayer); LineTexBucket lb = mBuckets.getLineTexBucket(nLevel);
if (ll.line == null) { if (lb.line == null) {
ll.line = line; lb.line = line;
float w = line.width; float w = line.width;
if (!line.fixed) if (!line.fixed)
w *= mLineScale; w *= mLineScale;
ll.width = w; lb.width = w;
} }
ll.addLine(mElement); lb.addLine(mElement);
} }
} }
@ -285,26 +270,27 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
@Override @Override
public void renderArea(AreaStyle area, int level) { public void renderArea(AreaStyle area, int level) {
int numLayer = mCurLayer + level; int nLevel = mCurBucket + level;
if (USE_MESH_POLY) { if (USE_MESH_POLY) {
MeshBucket l = mLayers.getMeshBucket(numLayer); MeshBucket mb = mBuckets.getMeshBucket(nLevel);
l.area = area; mb.area = area;
l.addMesh(mElement); mb.addMesh(mElement);
} else { } else {
PolygonBucket l = mLayers.getPolygonBucket(numLayer); PolygonBucket pb = mBuckets.getPolygonBucket(nLevel);
l.area = area; pb.area = area;
l.addPolygon(mElement.points, mElement.index); pb.addPolygon(mElement.points, mElement.index);
} }
} }
@Override @Override
public void renderSymbol(SymbolStyle symbol) { public void renderSymbol(SymbolStyle symbol) {
mTileLayer.callThemeHooks(mTile, mLayers, mElement, symbol, 0); mTileLayer.callThemeHooks(mTile, mBuckets, mElement, symbol, 0);
} }
@Override @Override
public void renderExtrusion(ExtrusionStyle extrusion, int level) { public void renderExtrusion(ExtrusionStyle extrusion, int level) {
mTileLayer.callThemeHooks(mTile, mLayers, mElement, extrusion, level); mTileLayer.callThemeHooks(mTile, mBuckets, mElement, extrusion, level);
} }
@Override @Override
@ -313,6 +299,6 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
@Override @Override
public void renderText(TextStyle text) { public void renderText(TextStyle text) {
mTileLayer.callThemeHooks(mTile, mLayers, mElement, text, 0); mTileLayer.callThemeHooks(mTile, mBuckets, mElement, text, 0);
} }
} }

View File

@ -84,7 +84,7 @@ class TextRenderer extends BucketRenderer {
setMatrix(v, false); setMatrix(v, false);
for (RenderBucket l = buckets.get(); l != null;) for (RenderBucket l = buckets.get(); l != null;)
l = TextureBucket.Renderer.draw(buckets, l, v, scale); l = TextureBucket.Renderer.draw(l, v, scale);
} }
} }

View File

@ -114,7 +114,7 @@ public abstract class BucketRenderer extends LayerRenderer {
project = false; project = false;
setMatrix(v, project); setMatrix(v, project);
} }
b = TextureBucket.Renderer.draw(buckets, b, v, div); b = TextureBucket.Renderer.draw(b, v, div);
break; break;
default: default:
log.error("invalid bucket {}", b.type); log.error("invalid bucket {}", b.type);

View File

@ -117,7 +117,7 @@ public class GridRenderer extends BucketRenderer {
int x = (int) (v.pos.x * z); int x = (int) (v.pos.x * z);
int y = (int) (v.pos.y * z); int y = (int) (v.pos.y * z);
/* update layers when map moved by at least one tile */ /* update buckets when map moved by at least one tile */
if (x == mCurX && y == mCurY && z == mCurZ) if (x == mCurX && y == mCurY && z == mCurZ)
return; return;

View File

@ -192,30 +192,30 @@ public class BitmapBucket extends TextureBucket {
shader = new Shader("texture_alpha"); shader = new Shader("texture_alpha");
} }
public static RenderBucket draw(RenderBucket renderElement, GLViewport v, public static RenderBucket draw(RenderBucket b, GLViewport v,
float scale, float alpha) { float scale, float alpha) {
GLState.blend(true); GLState.blend(true);
Shader s = shader; Shader s = shader;
s.useProgram(); s.useProgram();
TextureBucket tl = (TextureBucket) renderElement; TextureBucket tb = (TextureBucket) b;
GL.glUniform1f(s.uAlpha, alpha); GL.glUniform1f(s.uAlpha, alpha);
v.mvp.setAsUniform(s.uMVP); v.mvp.setAsUniform(s.uMVP);
MapRenderer.bindQuadIndicesVBO(true); MapRenderer.bindQuadIndicesVBO(true);
for (TextureItem t = tl.textures; t != null; t = t.next) { for (TextureItem t = tb.textures; t != null; t = t.next) {
t.bind(); t.bind();
int maxIndices = MapRenderer.maxQuads * INDICES_PER_SPRITE; int maxIndices = MapRenderer.maxQuads * INDICES_PER_SPRITE;
// draw up to maxVertices in each iteration // draw up to maxVertices in each iteration */
for (int i = 0; i < t.indices; i += maxIndices) { for (int i = 0; i < t.indices; i += maxIndices) {
// to.offset * (24(shorts) * 2(short-bytes) / 6(indices) == 8) // to.offset * (24(shorts) * 2(short-bytes) / 6(indices) == 8)
int off = (t.offset + i) * 8 + tl.vertexOffset; int off = (t.offset + i) * 8 + tb.vertexOffset;
GL.glVertexAttribPointer(s.aPos, 2, GL.glVertexAttribPointer(s.aPos, 2,
GL20.GL_SHORT, false, 12, off); GL20.GL_SHORT, false, 12, off);
@ -234,7 +234,7 @@ public class BitmapBucket extends TextureBucket {
MapRenderer.bindQuadIndicesVBO(false); MapRenderer.bindQuadIndicesVBO(false);
return renderElement.next; return b.next;
} }
} }
} }

View File

@ -565,12 +565,9 @@ public final class LineBucket extends RenderBucket {
return true; return true;
} }
public static RenderBucket draw(RenderBucket curLayer, GLViewport v, public static RenderBucket draw(RenderBucket b, GLViewport v,
float scale, RenderBuckets buckets) { float scale, RenderBuckets buckets) {
if (curLayer == null)
return null;
/* simple line shader does not take forward shortening into /* simple line shader does not take forward shortening into
* account. only used when tilt is 0. */ * account. only used when tilt is 0. */
int mode = v.pos.tilt < 1 ? 1 : 0; int mode = v.pos.tilt < 1 ? 1 : 0;
@ -619,13 +616,12 @@ public final class LineBucket extends RenderBucket {
float heightOffset = 0; float heightOffset = 0;
GL.glUniform1f(uLineHeight, heightOffset); GL.glUniform1f(uLineHeight, heightOffset);
RenderBucket l = curLayer; for (; b != null && b.type == RenderBucket.LINE; b = b.next) {
for (; l != null && l.type == RenderBucket.LINE; l = l.next) { LineBucket lb = (LineBucket) b;
LineBucket ll = (LineBucket) l; LineStyle line = lb.line.current();
LineStyle line = ll.line.current();
if (ll.heightOffset != heightOffset) { if (lb.heightOffset != heightOffset) {
heightOffset = ll.heightOffset; heightOffset = lb.heightOffset;
GL.glUniform1f(uLineHeight, heightOffset / GL.glUniform1f(uLineHeight, heightOffset /
MercatorProjection.groundResolution(v.pos)); MercatorProjection.groundResolution(v.pos));
@ -652,7 +648,7 @@ public final class LineBucket extends RenderBucket {
if (line.fixed) { if (line.fixed) {
width = Math.max(line.width, 1) / scale; width = Math.max(line.width, 1) / scale;
} else { } else {
width = ll.scale * line.width / variableScale; width = lb.scale * line.width / variableScale;
} }
GL.glUniform1f(uLineWidth, GL.glUniform1f(uLineWidth,
@ -668,13 +664,13 @@ public final class LineBucket extends RenderBucket {
} }
/* Cap mode */ /* Cap mode */
if (ll.scale < 1.5 /* || ll.line.fixed */) { if (lb.scale < 1.5 /* || ll.line.fixed */) {
if (capMode != CAP_THIN) { if (capMode != CAP_THIN) {
capMode = CAP_THIN; capMode = CAP_THIN;
GL.glUniform1f(uLineMode, capMode); GL.glUniform1f(uLineMode, capMode);
} }
} else if (ll.roundCap) { } else if (lb.roundCap) {
if (capMode != CAP_ROUND) { if (capMode != CAP_ROUND) {
capMode = CAP_ROUND; capMode = CAP_ROUND;
GL.glUniform1f(uLineMode, capMode); GL.glUniform1f(uLineMode, capMode);
@ -685,14 +681,14 @@ public final class LineBucket extends RenderBucket {
} }
GL.glDrawArrays(GL20.GL_TRIANGLE_STRIP, GL.glDrawArrays(GL20.GL_TRIANGLE_STRIP,
l.vertexOffset, l.numVertices); b.vertexOffset, b.numVertices);
continue; continue;
} }
/* draw LineLayers references by this outline */ /* draw LineLayers references by this outline */
for (LineBucket ref = ll.outlines; ref != null; ref = ref.outlines) { for (LineBucket ref = lb.outlines; ref != null; ref = ref.outlines) {
LineStyle core = ref.line.current(); LineStyle core = ref.line.current();
// core width // core width
@ -705,7 +701,7 @@ public final class LineBucket extends RenderBucket {
if (line.fixed) { if (line.fixed) {
width += line.width / scale; width += line.width / scale;
} else { } else {
width += ll.scale * line.width / variableScale; width += lb.scale * line.width / variableScale;
} }
GL.glUniform1f(uLineWidth, GL.glUniform1f(uLineWidth,
@ -736,7 +732,7 @@ public final class LineBucket extends RenderBucket {
} }
} }
return l; return b;
} }
} }
} }

View File

@ -94,10 +94,10 @@ public final class LineTexBucket extends RenderBucket {
protected boolean mRandomizeOffset = true; protected boolean mRandomizeOffset = true;
LineTexBucket(int layer) { LineTexBucket(int level) {
super(TEXLINE); super(TEXLINE);
this.level = layer; this.level = level;
this.evenSegment = true; this.evenSegment = true;
} }
@ -300,8 +300,8 @@ public final class LineTexBucket extends RenderBucket {
private final static int STRIDE = 12; private final static int STRIDE = 12;
private final static int LEN_OFFSET = 8; private final static int LEN_OFFSET = 8;
public static RenderBucket draw(RenderBucket curLayer, GLViewport v, public static RenderBucket draw(RenderBucket b, GLViewport v,
float div, RenderBuckets layers) { float div, RenderBuckets buckets) {
//if (shader == 0) //if (shader == 0)
// return curLayer.next; // return curLayer.next;
@ -334,7 +334,7 @@ public final class LineTexBucket extends RenderBucket {
GL.glVertexAttribPointer(shader.aFlip, 1, GL.glVertexAttribPointer(shader.aFlip, 1,
GL20.GL_BYTE, false, 0, 0); GL20.GL_BYTE, false, 0, 0);
layers.vbo.bind(); buckets.vbo.bind();
float scale = (float) v.pos.getZoomScale(); float scale = (float) v.pos.getZoomScale();
@ -342,10 +342,9 @@ public final class LineTexBucket extends RenderBucket {
//GL.glBindTexture(GL20.GL_TEXTURE_2D, mTexID[0]); //GL.glBindTexture(GL20.GL_TEXTURE_2D, mTexID[0]);
RenderBucket l = curLayer; for (; b != null && b.type == TEXLINE; b = b.next) {
for (; l != null && l.type == TEXLINE; l = l.next) { LineTexBucket lb = (LineTexBucket) b;
LineTexBucket ll = (LineTexBucket) l; LineStyle line = lb.line.current();
LineStyle line = ll.line.current();
GLUtils.setColor(shader.uColor, line.stippleColor, 1); GLUtils.setColor(shader.uColor, line.stippleColor, 1);
GLUtils.setColor(shader.uBgColor, line.color, 1); GLUtils.setColor(shader.uBgColor, line.color, 1);
@ -361,21 +360,21 @@ public final class LineTexBucket extends RenderBucket {
//GL.glUniform1f(hScale, scale); //GL.glUniform1f(hScale, scale);
/* keep line width fixed */ /* keep line width fixed */
GL.glUniform1f(shader.uWidth, ll.width / s * COORD_SCALE_BY_DIR_SCALE); GL.glUniform1f(shader.uWidth, lb.width / s * COORD_SCALE_BY_DIR_SCALE);
/* add offset vertex */ /* add offset vertex */
int vOffset = -STRIDE; int vOffset = -STRIDE;
// TODO interleave 1. and 2. pass to improve vertex cache usage? // TODO interleave 1. and 2. pass to improve vertex cache usage?
/* first pass */ /* first pass */
int allIndices = (ll.evenQuads * 6); int allIndices = (lb.evenQuads * 6);
for (int i = 0; i < allIndices; i += maxIndices) { for (int i = 0; i < allIndices; i += maxIndices) {
int numIndices = allIndices - i; int numIndices = allIndices - i;
if (numIndices > maxIndices) if (numIndices > maxIndices)
numIndices = maxIndices; numIndices = maxIndices;
/* i / 6 * (24 shorts per block * 2 short bytes) */ /* i / 6 * (24 shorts per block * 2 short bytes) */
int add = (l.vertexOffset + i * 8) + vOffset; int add = (b.vertexOffset + i * 8) + vOffset;
GL.glVertexAttribPointer(aPos0, 4, GL20.GL_SHORT, false, STRIDE, GL.glVertexAttribPointer(aPos0, 4, GL20.GL_SHORT, false, STRIDE,
add + STRIDE); add + STRIDE);
@ -394,13 +393,13 @@ public final class LineTexBucket extends RenderBucket {
} }
/* second pass */ /* second pass */
allIndices = (ll.oddQuads * 6); allIndices = (lb.oddQuads * 6);
for (int i = 0; i < allIndices; i += maxIndices) { for (int i = 0; i < allIndices; i += maxIndices) {
int numIndices = allIndices - i; int numIndices = allIndices - i;
if (numIndices > maxIndices) if (numIndices > maxIndices)
numIndices = maxIndices; numIndices = maxIndices;
/* i / 6 * (24 shorts per block * 2 short bytes) */ /* i / 6 * (24 shorts per block * 2 short bytes) */
int add = (l.vertexOffset + i * 8) + vOffset; int add = (b.vertexOffset + i * 8) + vOffset;
GL.glVertexAttribPointer(aPos0, 4, GL20.GL_SHORT, false, STRIDE, GL.glVertexAttribPointer(aPos0, 4, GL20.GL_SHORT, false, STRIDE,
add + 2 * STRIDE); add + 2 * STRIDE);
@ -428,7 +427,7 @@ public final class LineTexBucket extends RenderBucket {
//GL.glBindTexture(GL20.GL_TEXTURE_2D, 0); //GL.glBindTexture(GL20.GL_TEXTURE_2D, 0);
return l; return b;
} }
} }
} }

View File

@ -317,15 +317,15 @@ public final class PolygonBucket extends RenderBucket {
static LineClipper mScreenClip = new LineClipper(-1, -1, 1, 1); static LineClipper mScreenClip = new LineClipper(-1, -1, 1, 1);
/** /**
* draw polygon layers (until layer.next is not polygon layer) * draw polygon buckets (until bucket.next is not polygon bucket)
* using stencil buffer method * using stencil buffer method
* *
* @param renderElement * @param buckets
* layer to draw (referencing vertices in current vbo) * layer to draw (referencing vertices in current vbo)
* @param v * @param v
* GLViewport * GLViewport
* @param pos * @param pos
* used to fade layers according to 'fade' in * used to fade buckets according to 'fade' in
* layer.area style * layer.area style
* @param div * @param div
* scale relative to 'base scale' of the tile * scale relative to 'base scale' of the tile
@ -338,7 +338,7 @@ public final class PolygonBucket extends RenderBucket {
* @return * @return
* next layer * next layer
*/ */
public static RenderBucket draw(RenderBucket renderElement, GLViewport v, public static RenderBucket draw(RenderBucket buckets, GLViewport v,
float div, boolean first) { float div, boolean first) {
GLState.test(false, true); GLState.test(false, true);
@ -361,12 +361,12 @@ public final class PolygonBucket extends RenderBucket {
byte stencilMask = 0; byte stencilMask = 0;
RenderBucket l = renderElement; RenderBucket b = buckets;
for (; l != null && l.type == POLYGON; l = l.next) { for (; b != null && b.type == POLYGON; b = b.next) {
PolygonBucket pl = (PolygonBucket) l; PolygonBucket pb = (PolygonBucket) b;
AreaStyle area = pl.area.current(); AreaStyle area = pb.area.current();
/* fade out polygon layers (set in RenderTheme) */ /* fade out polygon bucket (set in RenderTheme) */
if (area.fadeScale > 0 && area.fadeScale > zoom) if (area.fadeScale > 0 && area.fadeScale > zoom)
continue; continue;
@ -392,7 +392,7 @@ public final class PolygonBucket extends RenderBucket {
start = cur = 0; start = cur = 0;
} }
mAreaLayer[cur] = pl; mAreaLayer[cur] = pb;
/* set stencil mask to draw to */ /* set stencil mask to draw to */
int stencil = 1 << cur++; int stencil = 1 << cur++;
@ -406,9 +406,9 @@ public final class PolygonBucket extends RenderBucket {
GL.glStencilMask(stencilMask); GL.glStencilMask(stencilMask);
} }
GL.glDrawArrays(GL_TRIANGLE_FAN, l.vertexOffset, l.numVertices); GL.glDrawArrays(GL_TRIANGLE_FAN, b.vertexOffset, b.numVertices);
/* draw up to 7 layers into stencil buffer */ /* draw up to 7 buckets into stencil buffer */
if (cur == STENCIL_BITS - 1) { if (cur == STENCIL_BITS - 1) {
//log.debug("fill1 {} {}", start, cur); //log.debug("fill1 {} {}", start, cur);
fillPolygons(v, start, cur, zoom, scale, div); fillPolygons(v, start, cur, zoom, scale, div);
@ -417,7 +417,7 @@ public final class PolygonBucket extends RenderBucket {
mClear = true; mClear = true;
start = cur = 0; start = cur = 0;
if (l.next != null && l.next.type == POLYGON) { if (b.next != null && b.next.type == POLYGON) {
setShader(polyShader, v.mvp, false); setShader(polyShader, v.mvp, false);
stencilMask = 0; stencilMask = 0;
} }
@ -432,14 +432,14 @@ public final class PolygonBucket extends RenderBucket {
if (!drawn) { if (!drawn) {
/* fillPolygons would re-enable color-mask /* fillPolygons would re-enable color-mask
* but it's possible that all polygon layers * but it's possible that all polygon buckets
* were skipped */ * were skipped */
GL.glColorMask(true, true, true, true); GL.glColorMask(true, true, true, true);
GL.glStencilMask(0x00); GL.glStencilMask(0x00);
} }
mCount = cur; mCount = cur;
return l; return b;
} }
public static void clip(GLMatrix mvp, int clipMode) { public static void clip(GLMatrix mvp, int clipMode) {
@ -473,7 +473,7 @@ public final class PolygonBucket extends RenderBucket {
GL.glStencilMask(0xFF); GL.glStencilMask(0xFF);
/* Draw clip-region into depth and stencil buffer. /* Draw clip-region into depth and stencil buffer.
* This is used for tile line and polygon layers. * This is used for tile line and polygon buckets.
* *
* Together with depth test (GL_LESS) this ensures to * Together with depth test (GL_LESS) this ensures to
* only draw where no other tile has drawn yet. */ * only draw where no other tile has drawn yet. */

View File

@ -72,8 +72,8 @@ public abstract class RenderBucket extends Inlist<RenderBucket> {
// } // }
/** /**
* For line- and polygon-layers this is the offset * For line- and polygon-buckets this is the offset
* of VERTICES in its layers.vbo. * of VERTICES in its bucket.vbo.
* For all other types it is the byte offset in vbo. * For all other types it is the byte offset in vbo.
* FIXME - always use byte offset? * FIXME - always use byte offset?
*/ */

View File

@ -107,23 +107,22 @@ public abstract class TextureBucket extends RenderBucket {
pool.init(0); pool.init(0);
} }
public static RenderBucket draw(RenderBuckets layers, RenderBucket l, public static RenderBucket draw(RenderBucket b, GLViewport v, float scale) {
GLViewport v, float scale) {
GLState.test(false, false); GLState.test(false, false);
GLState.blend(true); GLState.blend(true);
shader.useProgram(); shader.useProgram();
TextureBucket tl = (TextureBucket) l; TextureBucket tb = (TextureBucket) b;
GL.glUniform1f(shader.uScale, tl.fixed ? 1 / scale : 1); GL.glUniform1f(shader.uScale, tb.fixed ? 1 / scale : 1);
v.proj.setAsUniform(shader.uProj); v.proj.setAsUniform(shader.uProj);
v.mvp.setAsUniform(shader.uMV); v.mvp.setAsUniform(shader.uMV);
MapRenderer.bindQuadIndicesVBO(true); MapRenderer.bindQuadIndicesVBO(true);
for (TextureItem t = tl.textures; t != null; t = t.next) { for (TextureItem t = tb.textures; t != null; t = t.next) {
GL.glUniform2f(shader.uTexSize, GL.glUniform2f(shader.uTexSize,
1f / (t.width * COORD_SCALE), 1f / (t.width * COORD_SCALE),
1f / (t.height * COORD_SCALE)); 1f / (t.height * COORD_SCALE));
@ -134,7 +133,7 @@ public abstract class TextureBucket extends RenderBucket {
for (int i = 0; i < t.indices; i += maxIndices) { for (int i = 0; i < t.indices; i += maxIndices) {
/* to.offset * (24(shorts) * 2(short-bytes) /* to.offset * (24(shorts) * 2(short-bytes)
* / 6(indices) == 8) */ * / 6(indices) == 8) */
int off = (t.offset + i) * 8 + tl.vertexOffset; int off = (t.offset + i) * 8 + tb.vertexOffset;
GL.glVertexAttribPointer(shader.aPos, 4, GL.glVertexAttribPointer(shader.aPos, 4,
GL20.GL_SHORT, GL20.GL_SHORT,
@ -156,7 +155,7 @@ public abstract class TextureBucket extends RenderBucket {
MapRenderer.bindQuadIndicesVBO(false); MapRenderer.bindQuadIndicesVBO(false);
return l.next; return b.next;
} }
} }