From 39c0fcafead5a99ffd3d88a523f25f31b4fa6e63 Mon Sep 17 00:00:00 2001 From: Hannes Janetzek Date: Wed, 25 Sep 2013 02:31:27 +0200 Subject: [PATCH] share GL reference in RenderElement --- vtm/src/org/oscim/renderer/elements/BitmapLayer.java | 9 ++++----- .../org/oscim/renderer/elements/ElementLayers.java | 12 +++++++----- .../org/oscim/renderer/elements/ExtrusionLayer.java | 2 +- vtm/src/org/oscim/renderer/elements/LineLayer.java | 7 ++----- .../org/oscim/renderer/elements/LineTexLayer.java | 8 +++----- .../org/oscim/renderer/elements/PolygonLayer.java | 10 +++++----- .../org/oscim/renderer/elements/RenderElement.java | 9 ++++++++- vtm/src/org/oscim/renderer/elements/TextLayer.java | 2 +- .../org/oscim/renderer/elements/TextureLayer.java | 10 ++++++---- 9 files changed, 37 insertions(+), 32 deletions(-) diff --git a/vtm/src/org/oscim/renderer/elements/BitmapLayer.java b/vtm/src/org/oscim/renderer/elements/BitmapLayer.java index 00d9d144..c654d717 100644 --- a/vtm/src/org/oscim/renderer/elements/BitmapLayer.java +++ b/vtm/src/org/oscim/renderer/elements/BitmapLayer.java @@ -27,6 +27,7 @@ import org.oscim.renderer.MapRenderer.Matrices; * Renderer for a single bitmap, width and height must be power of 2. */ public class BitmapLayer extends TextureLayer { + // private final static String TAG = BitmapLayer.class.getName(); private Bitmap mBitmap; private final boolean mReuseBitmap; @@ -37,7 +38,8 @@ public class BitmapLayer extends TextureLayer { * it is compiled to texture. */ public BitmapLayer(boolean reuseBitmap) { - type = RenderElement.BITMAP; + super(RenderElement.BITMAP); + mReuseBitmap = reuseBitmap; mVertices = new short[24]; @@ -151,7 +153,6 @@ public class BitmapLayer extends TextureLayer { public static final class Renderer { //private final static String TAG = BitmapRenderer.class.getName(); - private static GL20 GL; public final static boolean debug = true; @@ -169,9 +170,7 @@ public class BitmapLayer extends TextureLayer { final static int VERTICES_PER_SPRITE = 4; final static int SHORTS_PER_VERTICE = 6; - static void init(GL20 gl) { - GL = gl; - + static void init() { mTextureProgram = GLUtils.createProgram(textVertexShader, textFragmentShader); diff --git a/vtm/src/org/oscim/renderer/elements/ElementLayers.java b/vtm/src/org/oscim/renderer/elements/ElementLayers.java index 005f2c16..71982976 100644 --- a/vtm/src/org/oscim/renderer/elements/ElementLayers.java +++ b/vtm/src/org/oscim/renderer/elements/ElementLayers.java @@ -25,11 +25,13 @@ public class ElementLayers { private final static String TAG = ElementLayers.class.getName(); public static void initRenderer(GL20 gl) { - LineLayer.Renderer.init(gl); - LineTexLayer.Renderer.init(gl); - PolygonLayer.Renderer.init(gl); - TextureLayer.Renderer.init(gl); - BitmapLayer.Renderer.init(gl); + RenderElement.GL = gl; + + LineLayer.Renderer.init(); + LineTexLayer.Renderer.init(); + PolygonLayer.Renderer.init(); + TextureLayer.Renderer.init(); + BitmapLayer.Renderer.init(); TextureItem.init(gl, 0); } diff --git a/vtm/src/org/oscim/renderer/elements/ExtrusionLayer.java b/vtm/src/org/oscim/renderer/elements/ExtrusionLayer.java index cae71bcc..e6a5a01b 100644 --- a/vtm/src/org/oscim/renderer/elements/ExtrusionLayer.java +++ b/vtm/src/org/oscim/renderer/elements/ExtrusionLayer.java @@ -60,7 +60,7 @@ public class ExtrusionLayer extends RenderElement { private final float mGroundResolution; public ExtrusionLayer(int level, float groundResolution) { - this.type = RenderElement.EXTRUSION; + super(RenderElement.EXTRUSION); this.level = level; mGroundResolution = groundResolution; diff --git a/vtm/src/org/oscim/renderer/elements/LineLayer.java b/vtm/src/org/oscim/renderer/elements/LineLayer.java index b50fdf02..61f20dce 100644 --- a/vtm/src/org/oscim/renderer/elements/LineLayer.java +++ b/vtm/src/org/oscim/renderer/elements/LineLayer.java @@ -50,8 +50,8 @@ public final class LineLayer extends RenderElement { public boolean roundCap; LineLayer(int layer) { + super(RenderElement.LINE); this.level = layer; - this.type = RenderElement.LINE; } public void addOutline(LineLayer link) { @@ -580,8 +580,6 @@ public final class LineLayer extends RenderElement { public static final class Renderer { - private static GL20 GL; - private static final int LINE_VERTICES_DATA_POS_OFFSET = 0; // factor to normalize extrusion vector and scale to coord scale @@ -598,8 +596,7 @@ public final class LineLayer extends RenderElement { private static int[] hLineMode = new int[2]; public static int mTexID; - static boolean init(GL20 gl) { - GL = gl; + static boolean init() { lineProgram[0] = GLUtils.createProgram(lineVertexShader, lineFragmentShader); diff --git a/vtm/src/org/oscim/renderer/elements/LineTexLayer.java b/vtm/src/org/oscim/renderer/elements/LineTexLayer.java index cf3453a0..bebd2e30 100644 --- a/vtm/src/org/oscim/renderer/elements/LineTexLayer.java +++ b/vtm/src/org/oscim/renderer/elements/LineTexLayer.java @@ -93,8 +93,9 @@ public final class LineTexLayer extends RenderElement { private boolean evenSegment; LineTexLayer(int layer) { + super(RenderElement.TEXLINE); + this.level = layer; - this.type = RenderElement.TEXLINE; this.evenSegment = true; } @@ -250,8 +251,6 @@ public final class LineTexLayer extends RenderElement { public final static class Renderer { - private static GL20 GL; - // factor to normalize extrusion vector and scale to coord scale private final static float COORD_SCALE_BY_DIR_SCALE = MapRenderer.COORD_SCALE @@ -273,8 +272,7 @@ public final class LineTexLayer extends RenderElement { private static int mVertexFlipID; - public static void init(GL20 gl) { - GL = gl; + public static void init() { shader = GLUtils.createProgram(vertexShader, fragmentShader); if (shader == 0) { diff --git a/vtm/src/org/oscim/renderer/elements/PolygonLayer.java b/vtm/src/org/oscim/renderer/elements/PolygonLayer.java index 63b95d44..56d2dffa 100644 --- a/vtm/src/org/oscim/renderer/elements/PolygonLayer.java +++ b/vtm/src/org/oscim/renderer/elements/PolygonLayer.java @@ -46,8 +46,9 @@ public final class PolygonLayer extends RenderElement { public Area area; PolygonLayer(int layer) { - this.level = layer; - this.type = RenderElement.POLYGON; + super(RenderElement.POLYGON); + + level = layer; curItem = VertexItem.pool.get(); vertexItems = curItem; } @@ -123,7 +124,7 @@ public final class PolygonLayer extends RenderElement { public static final class Renderer { - private static GL20 GL; + //private static GL20 GL; private static final int POLYGON_VERTICES_DATA_POS_OFFSET = 0; private static final int STENCIL_BITS = 8; @@ -144,8 +145,7 @@ public final class PolygonLayer extends RenderElement { private static int[] hPolygonColor = new int[numShaders]; private static int[] hPolygonScale = new int[numShaders]; - static boolean init(GL20 gl) { - GL = gl; + static boolean init() { for (int i = 0; i < numShaders; i++) { diff --git a/vtm/src/org/oscim/renderer/elements/RenderElement.java b/vtm/src/org/oscim/renderer/elements/RenderElement.java index 3c720ee6..bb81b326 100644 --- a/vtm/src/org/oscim/renderer/elements/RenderElement.java +++ b/vtm/src/org/oscim/renderer/elements/RenderElement.java @@ -16,9 +16,12 @@ package org.oscim.renderer.elements; import java.nio.ShortBuffer; +import org.oscim.backend.GL20; import org.oscim.utils.pool.Inlist; public abstract class RenderElement extends Inlist { + protected static GL20 GL; + public final static byte LINE = 0; public final static byte POLYGON = 1; public final static byte TEXLINE = 2; @@ -26,7 +29,11 @@ public abstract class RenderElement extends Inlist { public final static byte BITMAP = 4; public final static byte EXTRUSION = 5; - public byte type = -1; + protected RenderElement(byte type) { + this.type = type; + } + + public final byte type; // drawing order from bottom to top int level; diff --git a/vtm/src/org/oscim/renderer/elements/TextLayer.java b/vtm/src/org/oscim/renderer/elements/TextLayer.java index 2f25b11a..05fa348e 100644 --- a/vtm/src/org/oscim/renderer/elements/TextLayer.java +++ b/vtm/src/org/oscim/renderer/elements/TextLayer.java @@ -38,7 +38,7 @@ public final class TextLayer extends TextureLayer { } public TextLayer() { - type = RenderElement.SYMBOL; + super(RenderElement.SYMBOL); //mCanvas = Graphics.res.getCanvas(); mCanvas = CanvasAdapter.g.getCanvas(); fixed = true; diff --git a/vtm/src/org/oscim/renderer/elements/TextureLayer.java b/vtm/src/org/oscim/renderer/elements/TextureLayer.java index 4df1e16e..1442ee0a 100644 --- a/vtm/src/org/oscim/renderer/elements/TextureLayer.java +++ b/vtm/src/org/oscim/renderer/elements/TextureLayer.java @@ -25,6 +25,11 @@ import org.oscim.renderer.MapRenderer; import org.oscim.renderer.MapRenderer.Matrices; public abstract class TextureLayer extends RenderElement { + + protected TextureLayer(byte type) { + super(type); + } + // holds textures and offset in vbo public TextureItem textures; @@ -87,8 +92,6 @@ public abstract class TextureLayer extends RenderElement { public static final class Renderer { //private final static String TAG = TextureRenderer.class.getName(); - private static GL20 GL; - public final static boolean debug = false; private static int mTextureProgram; @@ -104,8 +107,7 @@ public abstract class TextureLayer extends RenderElement { final static int VERTICES_PER_SPRITE = 4; final static int SHORTS_PER_VERTICE = 6; - static void init(GL20 gl) { - GL = gl; + static void init() { mTextureProgram = GLUtils.createProgram(textVertexShader, textFragmentShader);