add option to use MeshLayer for tile polygon rendering
This commit is contained in:
parent
dc37296750
commit
f2a140e414
@ -27,6 +27,7 @@ import org.oscim.renderer.elements.ElementLayers;
|
|||||||
import org.oscim.renderer.elements.ExtrusionLayer;
|
import org.oscim.renderer.elements.ExtrusionLayer;
|
||||||
import org.oscim.renderer.elements.LineLayer;
|
import org.oscim.renderer.elements.LineLayer;
|
||||||
import org.oscim.renderer.elements.LineTexLayer;
|
import org.oscim.renderer.elements.LineTexLayer;
|
||||||
|
import org.oscim.renderer.elements.MeshLayer;
|
||||||
import org.oscim.renderer.elements.PolygonLayer;
|
import org.oscim.renderer.elements.PolygonLayer;
|
||||||
import org.oscim.renderer.elements.SymbolItem;
|
import org.oscim.renderer.elements.SymbolItem;
|
||||||
import org.oscim.renderer.elements.TextItem;
|
import org.oscim.renderer.elements.TextItem;
|
||||||
@ -319,17 +320,20 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final static boolean USE_MESH_POLY = false;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void renderArea(Area area, int level) {
|
public void renderArea(Area area, int level) {
|
||||||
int numLayer = mCurLayer + level;
|
int numLayer = mCurLayer + level;
|
||||||
|
if (USE_MESH_POLY) {
|
||||||
PolygonLayer layer = mTile.layers.getPolygonLayer(numLayer);
|
MeshLayer l = mTile.layers.getMeshLayer(numLayer);
|
||||||
|
l.area = area;
|
||||||
if (layer == null)
|
l.addMesh(mElement);
|
||||||
return;
|
} else {
|
||||||
|
PolygonLayer l = mTile.layers.getPolygonLayer(numLayer);
|
||||||
layer.area = area;
|
l.area = area;
|
||||||
layer.addPolygon(mElement.points, mElement.index);
|
l.addPolygon(mElement.points, mElement.index);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -31,6 +31,7 @@ import org.oscim.renderer.elements.ElementLayers;
|
|||||||
import org.oscim.renderer.elements.ExtrusionLayer;
|
import org.oscim.renderer.elements.ExtrusionLayer;
|
||||||
import org.oscim.renderer.elements.LineLayer;
|
import org.oscim.renderer.elements.LineLayer;
|
||||||
import org.oscim.renderer.elements.LineTexLayer;
|
import org.oscim.renderer.elements.LineTexLayer;
|
||||||
|
import org.oscim.renderer.elements.MeshLayer;
|
||||||
import org.oscim.renderer.elements.PolygonLayer;
|
import org.oscim.renderer.elements.PolygonLayer;
|
||||||
import org.oscim.renderer.elements.SymbolItem;
|
import org.oscim.renderer.elements.SymbolItem;
|
||||||
import org.oscim.renderer.elements.TextItem;
|
import org.oscim.renderer.elements.TextItem;
|
||||||
@ -324,15 +325,23 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// slower to load (requires tesselation) and uses
|
||||||
|
// more memory but should be faster to render
|
||||||
|
private final static boolean USE_MESH_POLY = false;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void renderArea(Area area, int level) {
|
public void renderArea(Area area, int level) {
|
||||||
int numLayer = mCurLayer + level;
|
int numLayer = mCurLayer + level;
|
||||||
|
if (USE_MESH_POLY) {
|
||||||
|
MeshLayer l = mTile.layers.getMeshLayer(numLayer);
|
||||||
|
l.area = area;
|
||||||
|
l.addMesh(mElement);
|
||||||
|
} else {
|
||||||
PolygonLayer l = mTile.layers.getPolygonLayer(numLayer);
|
PolygonLayer l = mTile.layers.getPolygonLayer(numLayer);
|
||||||
|
|
||||||
l.area = area;
|
l.area = area;
|
||||||
l.addPolygon(mElement.points, mElement.index);
|
l.addPolygon(mElement.points, mElement.index);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void renderAreaText(Text text) {
|
public void renderAreaText(Text text) {
|
||||||
|
|||||||
@ -32,6 +32,7 @@ import org.oscim.renderer.MapRenderer.Matrices;
|
|||||||
import org.oscim.renderer.elements.BitmapLayer;
|
import org.oscim.renderer.elements.BitmapLayer;
|
||||||
import org.oscim.renderer.elements.LineLayer;
|
import org.oscim.renderer.elements.LineLayer;
|
||||||
import org.oscim.renderer.elements.LineTexLayer;
|
import org.oscim.renderer.elements.LineTexLayer;
|
||||||
|
import org.oscim.renderer.elements.MeshLayer;
|
||||||
import org.oscim.renderer.elements.PolygonLayer;
|
import org.oscim.renderer.elements.PolygonLayer;
|
||||||
import org.oscim.renderer.elements.RenderElement;
|
import org.oscim.renderer.elements.RenderElement;
|
||||||
import org.oscim.utils.FastMath;
|
import org.oscim.utils.FastMath;
|
||||||
@ -480,22 +481,28 @@ public class TileRenderer extends LayerRenderer {
|
|||||||
|
|
||||||
case RenderElement.LINE:
|
case RenderElement.LINE:
|
||||||
if (!clipped) {
|
if (!clipped) {
|
||||||
// draw stencil buffer clip region
|
|
||||||
PolygonLayer.Renderer.draw(pos, null, m, true, div, true);
|
|
||||||
clipped = true;
|
clipped = true;
|
||||||
|
PolygonLayer.Renderer.draw(pos, null, m, true, div, true);
|
||||||
}
|
}
|
||||||
l = LineLayer.Renderer.draw(t.layers, l, pos, m, scale);
|
l = LineLayer.Renderer.draw(t.layers, l, pos, m, scale);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RenderElement.TEXLINE:
|
case RenderElement.TEXLINE:
|
||||||
if (!clipped) {
|
if (!clipped) {
|
||||||
// draw stencil buffer clip region
|
|
||||||
PolygonLayer.Renderer.draw(pos, null, m, true, div, true);
|
|
||||||
clipped = true;
|
clipped = true;
|
||||||
|
PolygonLayer.Renderer.draw(pos, null, m, true, div, true);
|
||||||
}
|
}
|
||||||
l = LineTexLayer.Renderer.draw(t.layers, l, pos, m, div);
|
l = LineTexLayer.Renderer.draw(t.layers, l, pos, m, div);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case RenderElement.MESH:
|
||||||
|
if (!clipped) {
|
||||||
|
clipped = true;
|
||||||
|
PolygonLayer.Renderer.draw(pos, null, m, true, div, true);
|
||||||
|
}
|
||||||
|
l = MeshLayer.Renderer.draw(pos, l, m);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// just in case
|
// just in case
|
||||||
l = l.next;
|
l = l.next;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user