From f2a140e4145eeba166f9a2c56fec781184f69833 Mon Sep 17 00:00:00 2001 From: Hannes Janetzek Date: Wed, 22 Jan 2014 22:54:07 +0100 Subject: [PATCH] add option to use MeshLayer for tile polygon rendering --- .../layers/tile/vector/VectorTileLoader.java | 20 +++++++++++-------- .../layers/tile/vector/VectorTileLoader.java | 19 +++++++++++++----- vtm/src/org/oscim/tiling/TileRenderer.java | 15 ++++++++++---- 3 files changed, 37 insertions(+), 17 deletions(-) diff --git a/vtm-gdx-html/src/org/oscim/gdx/emu/org/oscim/layers/tile/vector/VectorTileLoader.java b/vtm-gdx-html/src/org/oscim/gdx/emu/org/oscim/layers/tile/vector/VectorTileLoader.java index 5fddf68f..a72a2aee 100644 --- a/vtm-gdx-html/src/org/oscim/gdx/emu/org/oscim/layers/tile/vector/VectorTileLoader.java +++ b/vtm-gdx-html/src/org/oscim/gdx/emu/org/oscim/layers/tile/vector/VectorTileLoader.java @@ -27,6 +27,7 @@ import org.oscim.renderer.elements.ElementLayers; import org.oscim.renderer.elements.ExtrusionLayer; 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.SymbolItem; 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 public void renderArea(Area area, int level) { int numLayer = mCurLayer + level; - - PolygonLayer layer = mTile.layers.getPolygonLayer(numLayer); - - if (layer == null) - return; - - layer.area = area; - layer.addPolygon(mElement.points, mElement.index); + if (USE_MESH_POLY) { + MeshLayer l = mTile.layers.getMeshLayer(numLayer); + l.area = area; + l.addMesh(mElement); + } else { + PolygonLayer l = mTile.layers.getPolygonLayer(numLayer); + l.area = area; + l.addPolygon(mElement.points, mElement.index); + } } @Override diff --git a/vtm/src/org/oscim/layers/tile/vector/VectorTileLoader.java b/vtm/src/org/oscim/layers/tile/vector/VectorTileLoader.java index 287ad552..082a67cf 100644 --- a/vtm/src/org/oscim/layers/tile/vector/VectorTileLoader.java +++ b/vtm/src/org/oscim/layers/tile/vector/VectorTileLoader.java @@ -31,6 +31,7 @@ import org.oscim.renderer.elements.ElementLayers; import org.oscim.renderer.elements.ExtrusionLayer; 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.SymbolItem; import org.oscim.renderer.elements.TextItem; @@ -324,14 +325,22 @@ 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 public void renderArea(Area area, int level) { int numLayer = mCurLayer + level; - - PolygonLayer l = mTile.layers.getPolygonLayer(numLayer); - - l.area = area; - l.addPolygon(mElement.points, mElement.index); + if (USE_MESH_POLY) { + MeshLayer l = mTile.layers.getMeshLayer(numLayer); + l.area = area; + l.addMesh(mElement); + } else { + PolygonLayer l = mTile.layers.getPolygonLayer(numLayer); + l.area = area; + l.addPolygon(mElement.points, mElement.index); + } } @Override diff --git a/vtm/src/org/oscim/tiling/TileRenderer.java b/vtm/src/org/oscim/tiling/TileRenderer.java index 9367199e..6672c2fd 100644 --- a/vtm/src/org/oscim/tiling/TileRenderer.java +++ b/vtm/src/org/oscim/tiling/TileRenderer.java @@ -32,6 +32,7 @@ import org.oscim.renderer.MapRenderer.Matrices; import org.oscim.renderer.elements.BitmapLayer; 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.utils.FastMath; @@ -480,22 +481,28 @@ public class TileRenderer extends LayerRenderer { case RenderElement.LINE: if (!clipped) { - // draw stencil buffer clip region - PolygonLayer.Renderer.draw(pos, null, m, true, div, true); clipped = true; + PolygonLayer.Renderer.draw(pos, null, m, true, div, true); } l = LineLayer.Renderer.draw(t.layers, l, pos, m, scale); break; case RenderElement.TEXLINE: if (!clipped) { - // draw stencil buffer clip region - PolygonLayer.Renderer.draw(pos, null, m, true, div, true); clipped = true; + PolygonLayer.Renderer.draw(pos, null, m, true, div, true); } l = LineTexLayer.Renderer.draw(t.layers, l, pos, m, div); 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: // just in case l = l.next;