Map renderer COORD_SCALE configurable and global use (#344)
This commit is contained in:
@@ -33,6 +33,7 @@ import org.oscim.utils.FastMath;
|
|||||||
import java.nio.FloatBuffer;
|
import java.nio.FloatBuffer;
|
||||||
|
|
||||||
import static org.oscim.backend.GLAdapter.gl;
|
import static org.oscim.backend.GLAdapter.gl;
|
||||||
|
import static org.oscim.renderer.MapRenderer.COORD_SCALE;
|
||||||
|
|
||||||
public class HexagonRenderTest extends GdxMap {
|
public class HexagonRenderTest extends GdxMap {
|
||||||
|
|
||||||
@@ -66,7 +67,7 @@ public class HexagonRenderTest extends GdxMap {
|
|||||||
private BufferObject mVBO;
|
private BufferObject mVBO;
|
||||||
|
|
||||||
int mZoom = -1;
|
int mZoom = -1;
|
||||||
float mCellScale = 60 * MapRenderer.COORD_SCALE;
|
float mCellScale = 60 * COORD_SCALE;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(GLViewport v) {
|
public void update(GLViewport v) {
|
||||||
|
|||||||
@@ -6,13 +6,14 @@ attribute vec2 tex_coord;
|
|||||||
uniform mat4 u_mv;
|
uniform mat4 u_mv;
|
||||||
uniform mat4 u_proj;
|
uniform mat4 u_proj;
|
||||||
uniform float u_scale;
|
uniform float u_scale;
|
||||||
|
uniform float u_coord_scale;
|
||||||
uniform vec2 u_div;
|
uniform vec2 u_div;
|
||||||
varying vec2 tex_c;
|
varying vec2 tex_c;
|
||||||
const float coord_scale = 1.0/8.0;
|
|
||||||
void
|
void
|
||||||
main(){
|
main(){
|
||||||
vec4 pos;
|
vec4 pos;
|
||||||
vec2 dir = vertex.zw;
|
vec2 dir = vertex.zw;
|
||||||
|
float coord_scale = 1.0 / u_coord_scale;
|
||||||
if (abs(mod(vertex.x, 2.0)) == 0.0) {
|
if (abs(mod(vertex.x, 2.0)) == 0.0) {
|
||||||
pos = u_proj * (u_mv * vec4(vertex.xy + dir * u_scale, 0.0, 1.0));
|
pos = u_proj * (u_mv * vec4(vertex.xy + dir * u_scale, 0.0, 1.0));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,8 @@ package org.oscim.renderer;
|
|||||||
import org.oscim.backend.canvas.Bitmap;
|
import org.oscim.backend.canvas.Bitmap;
|
||||||
import org.oscim.renderer.bucket.BitmapBucket;
|
import org.oscim.renderer.bucket.BitmapBucket;
|
||||||
|
|
||||||
|
import static org.oscim.renderer.MapRenderer.COORD_SCALE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* RenderLayer to draw a custom Bitmap.
|
* RenderLayer to draw a custom Bitmap.
|
||||||
* NOTE: Only modify the Bitmap within a synchronized block!
|
* NOTE: Only modify the Bitmap within a synchronized block!
|
||||||
@@ -91,7 +93,7 @@ public class BitmapRenderer extends BucketRenderer {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized void render(GLViewport v) {
|
public synchronized void render(GLViewport v) {
|
||||||
v.useScreenCoordinates(mWidth, mHeight, position, xOffset, yOffset, 8);
|
v.useScreenCoordinates(mWidth, mHeight, position, xOffset, yOffset, COORD_SCALE);
|
||||||
BitmapBucket.Renderer.draw(buckets.get(), v, 1, 1);
|
BitmapBucket.Renderer.draw(buckets.get(), v, 1, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ import org.oscim.utils.FastMath;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import static org.oscim.renderer.MapRenderer.COORD_SCALE;
|
||||||
import static org.oscim.renderer.bucket.RenderBucket.BITMAP;
|
import static org.oscim.renderer.bucket.RenderBucket.BITMAP;
|
||||||
import static org.oscim.renderer.bucket.RenderBucket.CIRCLE;
|
import static org.oscim.renderer.bucket.RenderBucket.CIRCLE;
|
||||||
import static org.oscim.renderer.bucket.RenderBucket.HAIRLINE;
|
import static org.oscim.renderer.bucket.RenderBucket.HAIRLINE;
|
||||||
@@ -173,7 +174,7 @@ public class BucketRenderer extends LayerRenderer {
|
|||||||
* @param project if true apply view- and projection, or just view otherwise.
|
* @param project if true apply view- and projection, or just view otherwise.
|
||||||
*/
|
*/
|
||||||
protected void setMatrix(GLViewport v, boolean project) {
|
protected void setMatrix(GLViewport v, boolean project) {
|
||||||
setMatrix(v, project, MapRenderer.COORD_SCALE);
|
setMatrix(v, project, COORD_SCALE);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void setMatrix(GLViewport v, boolean project, float coordScale) {
|
protected void setMatrix(GLViewport v, boolean project, float coordScale) {
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import org.slf4j.Logger;
|
|||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import static org.oscim.backend.GLAdapter.gl;
|
import static org.oscim.backend.GLAdapter.gl;
|
||||||
|
import static org.oscim.renderer.MapRenderer.COORD_SCALE;
|
||||||
|
|
||||||
public abstract class ExtrusionRenderer extends LayerRenderer {
|
public abstract class ExtrusionRenderer extends LayerRenderer {
|
||||||
static final Logger log = LoggerFactory.getLogger(ExtrusionRenderer.class);
|
static final Logger log = LoggerFactory.getLogger(ExtrusionRenderer.class);
|
||||||
@@ -254,7 +255,7 @@ public abstract class ExtrusionRenderer extends LayerRenderer {
|
|||||||
float x = (float) ((l.x - v.pos.x) * curScale);
|
float x = (float) ((l.x - v.pos.x) * curScale);
|
||||||
float y = (float) ((l.y - v.pos.y) * curScale);
|
float y = (float) ((l.y - v.pos.y) * curScale);
|
||||||
|
|
||||||
v.mvp.setTransScale(x, y, scale / MapRenderer.COORD_SCALE);
|
v.mvp.setTransScale(x, y, scale / COORD_SCALE);
|
||||||
v.mvp.setValue(10, scale / 10);
|
v.mvp.setValue(10, scale / 10);
|
||||||
v.mvp.multiplyLhs(v.viewproj);
|
v.mvp.multiplyLhs(v.viewproj);
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ public class MapRenderer {
|
|||||||
/**
|
/**
|
||||||
* scale factor used for short vertices
|
* scale factor used for short vertices
|
||||||
*/
|
*/
|
||||||
public static final float COORD_SCALE = 8.0f;
|
public static float COORD_SCALE = 8.0f;
|
||||||
|
|
||||||
private final Map mMap;
|
private final Map mMap;
|
||||||
private final GLViewport mViewport;
|
private final GLViewport mViewport;
|
||||||
|
|||||||
@@ -21,12 +21,12 @@ import org.oscim.backend.canvas.Bitmap;
|
|||||||
import org.oscim.renderer.GLShader;
|
import org.oscim.renderer.GLShader;
|
||||||
import org.oscim.renderer.GLState;
|
import org.oscim.renderer.GLState;
|
||||||
import org.oscim.renderer.GLViewport;
|
import org.oscim.renderer.GLViewport;
|
||||||
import org.oscim.renderer.MapRenderer;
|
|
||||||
import org.oscim.renderer.bucket.TextureItem.TexturePool;
|
import org.oscim.renderer.bucket.TextureItem.TexturePool;
|
||||||
|
|
||||||
import java.nio.ShortBuffer;
|
import java.nio.ShortBuffer;
|
||||||
|
|
||||||
import static org.oscim.backend.GLAdapter.gl;
|
import static org.oscim.backend.GLAdapter.gl;
|
||||||
|
import static org.oscim.renderer.MapRenderer.COORD_SCALE;
|
||||||
import static org.oscim.renderer.MapRenderer.MAX_INDICES;
|
import static org.oscim.renderer.MapRenderer.MAX_INDICES;
|
||||||
import static org.oscim.renderer.MapRenderer.bindQuadIndicesVBO;
|
import static org.oscim.renderer.MapRenderer.bindQuadIndicesVBO;
|
||||||
|
|
||||||
@@ -84,8 +84,8 @@ public class BitmapBucket extends TextureBucket {
|
|||||||
|
|
||||||
private void setVertices(ShortBuffer vboData) {
|
private void setVertices(ShortBuffer vboData) {
|
||||||
short[] buf = mVertices;
|
short[] buf = mVertices;
|
||||||
short w = (short) (mWidth * MapRenderer.COORD_SCALE);
|
short w = (short) (mWidth * COORD_SCALE);
|
||||||
short h = (short) (mHeight * MapRenderer.COORD_SCALE);
|
short h = (short) (mHeight * COORD_SCALE);
|
||||||
|
|
||||||
short texMin = 0;
|
short texMin = 0;
|
||||||
short texMax = 1;
|
short texMax = 1;
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import org.oscim.core.GeometryBuffer;
|
|||||||
import org.oscim.core.GeometryBuffer.GeometryType;
|
import org.oscim.core.GeometryBuffer.GeometryType;
|
||||||
import org.oscim.core.MapElement;
|
import org.oscim.core.MapElement;
|
||||||
import org.oscim.core.Tile;
|
import org.oscim.core.Tile;
|
||||||
import org.oscim.renderer.MapRenderer;
|
|
||||||
import org.oscim.utils.FastMath;
|
import org.oscim.utils.FastMath;
|
||||||
import org.oscim.utils.KeyMap;
|
import org.oscim.utils.KeyMap;
|
||||||
import org.oscim.utils.KeyMap.HashItem;
|
import org.oscim.utils.KeyMap.HashItem;
|
||||||
@@ -33,11 +32,11 @@ import org.slf4j.LoggerFactory;
|
|||||||
|
|
||||||
import java.nio.ShortBuffer;
|
import java.nio.ShortBuffer;
|
||||||
|
|
||||||
|
import static org.oscim.renderer.MapRenderer.COORD_SCALE;
|
||||||
|
|
||||||
public class ExtrusionBucket extends RenderBucket {
|
public class ExtrusionBucket extends RenderBucket {
|
||||||
static final Logger log = LoggerFactory.getLogger(ExtrusionBucket.class);
|
static final Logger log = LoggerFactory.getLogger(ExtrusionBucket.class);
|
||||||
|
|
||||||
private static final float S = MapRenderer.COORD_SCALE;
|
|
||||||
|
|
||||||
private VertexData mIndices[];
|
private VertexData mIndices[];
|
||||||
private LineClipper mClipper;
|
private LineClipper mClipper;
|
||||||
|
|
||||||
@@ -164,7 +163,7 @@ public class ExtrusionBucket extends RenderBucket {
|
|||||||
synchronized (vertexPool) {
|
synchronized (vertexPool) {
|
||||||
|
|
||||||
Vertex key = vertexPool.get();
|
Vertex key = vertexPool.get();
|
||||||
double scale = S * Tile.SIZE / 4096;
|
double scale = COORD_SCALE * Tile.SIZE / 4096;
|
||||||
|
|
||||||
for (int k = 0, n = index.length; k < n; ) {
|
for (int k = 0, n = index.length; k < n; ) {
|
||||||
if (index[k] < 0)
|
if (index[k] < 0)
|
||||||
@@ -330,9 +329,9 @@ public class ExtrusionBucket extends RenderBucket {
|
|||||||
// v = 0;
|
// v = 0;
|
||||||
// }
|
// }
|
||||||
// /* set coordinate */
|
// /* set coordinate */
|
||||||
// vertices[v++] = (short) (points[j++] * S);
|
// vertices[v++] = (short) (points[j++] * COORD_SCALE);
|
||||||
// vertices[v++] = (short) (points[j++] * S);
|
// vertices[v++] = (short) (points[j++] * COORD_SCALE);
|
||||||
// vertices[v++] = (short) (points[j++] * S);
|
// vertices[v++] = (short) (points[j++] * COORD_SCALE);
|
||||||
// v++;
|
// v++;
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
@@ -491,8 +490,8 @@ public class ExtrusionBucket extends RenderBucket {
|
|||||||
} else { // if (addFace)
|
} else { // if (addFace)
|
||||||
short c = (short) (color1 | fcolor << 8);
|
short c = (short) (color1 | fcolor << 8);
|
||||||
/* add bottom and top vertex for each point */
|
/* add bottom and top vertex for each point */
|
||||||
vertexItems.add((short) (cx * S), (short) (cy * S), mh, c);
|
vertexItems.add((short) (cx * COORD_SCALE), (short) (cy * COORD_SCALE), mh, c);
|
||||||
vertexItems.add((short) (cx * S), (short) (cy * S), h, c);
|
vertexItems.add((short) (cx * COORD_SCALE), (short) (cy * COORD_SCALE), h, c);
|
||||||
|
|
||||||
//v += 8;
|
//v += 8;
|
||||||
break;
|
break;
|
||||||
@@ -512,8 +511,8 @@ public class ExtrusionBucket extends RenderBucket {
|
|||||||
c = (short) (color2 | color1 << 8);
|
c = (short) (color2 | color1 << 8);
|
||||||
|
|
||||||
/* add bottom and top vertex for each point */
|
/* add bottom and top vertex for each point */
|
||||||
vertexItems.add((short) (cx * S), (short) (cy * S), mh, c);
|
vertexItems.add((short) (cx * COORD_SCALE), (short) (cy * COORD_SCALE), mh, c);
|
||||||
vertexItems.add((short) (cx * S), (short) (cy * S), h, c);
|
vertexItems.add((short) (cx * COORD_SCALE), (short) (cy * COORD_SCALE), h, c);
|
||||||
|
|
||||||
color1 = color2;
|
color1 = color2;
|
||||||
|
|
||||||
|
|||||||
@@ -26,12 +26,12 @@ import org.oscim.renderer.GLShader;
|
|||||||
import org.oscim.renderer.GLState;
|
import org.oscim.renderer.GLState;
|
||||||
import org.oscim.renderer.GLUtils;
|
import org.oscim.renderer.GLUtils;
|
||||||
import org.oscim.renderer.GLViewport;
|
import org.oscim.renderer.GLViewport;
|
||||||
import org.oscim.renderer.MapRenderer;
|
|
||||||
import org.oscim.theme.styles.LineStyle;
|
import org.oscim.theme.styles.LineStyle;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import static org.oscim.backend.GLAdapter.gl;
|
import static org.oscim.backend.GLAdapter.gl;
|
||||||
|
import static org.oscim.renderer.MapRenderer.COORD_SCALE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Note:
|
* Note:
|
||||||
@@ -42,7 +42,6 @@ import static org.oscim.backend.GLAdapter.gl;
|
|||||||
public class LineBucket extends RenderBucket {
|
public class LineBucket extends RenderBucket {
|
||||||
static final Logger log = LoggerFactory.getLogger(LineBucket.class);
|
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
|
* scale factor mapping extrusion vector to short values
|
||||||
*/
|
*/
|
||||||
@@ -537,7 +536,7 @@ public class LineBucket extends RenderBucket {
|
|||||||
|
|
||||||
/* factor to normalize extrusion vector and scale to coord scale */
|
/* factor to normalize extrusion vector and scale to coord scale */
|
||||||
private final static float COORD_SCALE_BY_DIR_SCALE =
|
private final static float COORD_SCALE_BY_DIR_SCALE =
|
||||||
MapRenderer.COORD_SCALE / LineBucket.DIR_SCALE;
|
COORD_SCALE / LineBucket.DIR_SCALE;
|
||||||
|
|
||||||
private final static int CAP_THIN = 0;
|
private final static int CAP_THIN = 0;
|
||||||
private final static int CAP_BUTT = 1;
|
private final static int CAP_BUTT = 1;
|
||||||
|
|||||||
@@ -247,7 +247,7 @@ public final class LineTexBucket extends LineBucket {
|
|||||||
|
|
||||||
/* factor to normalize extrusion vector and scale to coord scale */
|
/* factor to normalize extrusion vector and scale to coord scale */
|
||||||
private final static float COORD_SCALE_BY_DIR_SCALE =
|
private final static float COORD_SCALE_BY_DIR_SCALE =
|
||||||
MapRenderer.COORD_SCALE / LineBucket.DIR_SCALE;
|
COORD_SCALE / LineBucket.DIR_SCALE;
|
||||||
|
|
||||||
private static int mVertexFlipID;
|
private static int mVertexFlipID;
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ import org.oscim.renderer.GLShader;
|
|||||||
import org.oscim.renderer.GLState;
|
import org.oscim.renderer.GLState;
|
||||||
import org.oscim.renderer.GLUtils;
|
import org.oscim.renderer.GLUtils;
|
||||||
import org.oscim.renderer.GLViewport;
|
import org.oscim.renderer.GLViewport;
|
||||||
import org.oscim.renderer.MapRenderer;
|
|
||||||
import org.oscim.renderer.bucket.VertexData.Chunk;
|
import org.oscim.renderer.bucket.VertexData.Chunk;
|
||||||
import org.oscim.theme.styles.AreaStyle;
|
import org.oscim.theme.styles.AreaStyle;
|
||||||
import org.oscim.utils.ColorUtil;
|
import org.oscim.utils.ColorUtil;
|
||||||
@@ -134,8 +133,7 @@ public class MeshBucket extends RenderBucket {
|
|||||||
|
|
||||||
Chunk chunk = vertexItems.obtainChunk();
|
Chunk chunk = vertexItems.obtainChunk();
|
||||||
|
|
||||||
tess.getVertices(chunk.vertices, offset, size,
|
tess.getVertices(chunk.vertices, offset, size, COORD_SCALE);
|
||||||
MapRenderer.COORD_SCALE);
|
|
||||||
offset += size;
|
offset += size;
|
||||||
|
|
||||||
vertexItems.releaseChunk(size);
|
vertexItems.releaseChunk(size);
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ import org.oscim.renderer.GLShader;
|
|||||||
import org.oscim.renderer.GLState;
|
import org.oscim.renderer.GLState;
|
||||||
import org.oscim.renderer.GLUtils;
|
import org.oscim.renderer.GLUtils;
|
||||||
import org.oscim.renderer.GLViewport;
|
import org.oscim.renderer.GLViewport;
|
||||||
import org.oscim.renderer.MapRenderer;
|
|
||||||
import org.oscim.theme.styles.AreaStyle;
|
import org.oscim.theme.styles.AreaStyle;
|
||||||
import org.oscim.utils.ArrayUtils;
|
import org.oscim.utils.ArrayUtils;
|
||||||
import org.oscim.utils.geom.LineClipper;
|
import org.oscim.utils.geom.LineClipper;
|
||||||
@@ -39,6 +38,7 @@ import org.slf4j.LoggerFactory;
|
|||||||
import java.nio.ShortBuffer;
|
import java.nio.ShortBuffer;
|
||||||
|
|
||||||
import static org.oscim.backend.GLAdapter.gl;
|
import static org.oscim.backend.GLAdapter.gl;
|
||||||
|
import static org.oscim.renderer.MapRenderer.COORD_SCALE;
|
||||||
import static org.oscim.utils.FastMath.clamp;
|
import static org.oscim.utils.FastMath.clamp;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -52,8 +52,6 @@ public final class PolygonBucket extends RenderBucket {
|
|||||||
public final static int CLIP_DEPTH = 2;
|
public final static int CLIP_DEPTH = 2;
|
||||||
public final static int CLIP_TEST_DEPTH = 3;
|
public final static int CLIP_TEST_DEPTH = 3;
|
||||||
|
|
||||||
private static final float S = MapRenderer.COORD_SCALE;
|
|
||||||
|
|
||||||
public static boolean enableTexture = true;
|
public static boolean enableTexture = true;
|
||||||
|
|
||||||
public AreaStyle area;
|
public AreaStyle area;
|
||||||
@@ -75,7 +73,7 @@ public final class PolygonBucket extends RenderBucket {
|
|||||||
final float[] bbox = new float[8];
|
final float[] bbox = new float[8];
|
||||||
|
|
||||||
public void addPolygon(float[] points, int[] index) {
|
public void addPolygon(float[] points, int[] index) {
|
||||||
short center = (short) ((Tile.SIZE >> 1) * S);
|
short center = (short) ((Tile.SIZE >> 1) * COORD_SCALE);
|
||||||
|
|
||||||
boolean outline = area.strokeWidth > 0;
|
boolean outline = area.strokeWidth > 0;
|
||||||
|
|
||||||
@@ -96,8 +94,8 @@ public final class PolygonBucket extends RenderBucket {
|
|||||||
int inPos = pos;
|
int inPos = pos;
|
||||||
|
|
||||||
for (int j = 0; j < length; j += 2) {
|
for (int j = 0; j < length; j += 2) {
|
||||||
float x = (points[inPos++] * S);
|
float x = (points[inPos++] * COORD_SCALE);
|
||||||
float y = (points[inPos++] * S);
|
float y = (points[inPos++] * COORD_SCALE);
|
||||||
xmax = Math.max(xmax, x);
|
xmax = Math.max(xmax, x);
|
||||||
xmin = Math.min(xmin, x);
|
xmin = Math.min(xmin, x);
|
||||||
ymax = Math.max(ymax, y);
|
ymax = Math.max(ymax, y);
|
||||||
@@ -117,8 +115,8 @@ public final class PolygonBucket extends RenderBucket {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
vertexItems.add((short) (points[pos + 0] * S),
|
vertexItems.add((short) (points[pos + 0] * COORD_SCALE),
|
||||||
(short) (points[pos + 1] * S));
|
(short) (points[pos + 1] * COORD_SCALE));
|
||||||
numVertices++;
|
numVertices++;
|
||||||
|
|
||||||
pos += length;
|
pos += length;
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import org.slf4j.LoggerFactory;
|
|||||||
|
|
||||||
import java.nio.ShortBuffer;
|
import java.nio.ShortBuffer;
|
||||||
|
|
||||||
|
import static org.oscim.renderer.MapRenderer.COORD_SCALE;
|
||||||
import static org.oscim.renderer.bucket.RenderBucket.CIRCLE;
|
import static org.oscim.renderer.bucket.RenderBucket.CIRCLE;
|
||||||
import static org.oscim.renderer.bucket.RenderBucket.HAIRLINE;
|
import static org.oscim.renderer.bucket.RenderBucket.HAIRLINE;
|
||||||
import static org.oscim.renderer.bucket.RenderBucket.LINE;
|
import static org.oscim.renderer.bucket.RenderBucket.LINE;
|
||||||
@@ -434,7 +435,7 @@ public class RenderBuckets extends TileData {
|
|||||||
private static short[] fillCoords;
|
private static short[] fillCoords;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
short s = (short) (Tile.SIZE * MapRenderer.COORD_SCALE);
|
short s = (short) (Tile.SIZE * COORD_SCALE);
|
||||||
fillCoords = new short[]{0, s, s, s, 0, 0, s, 0};
|
fillCoords = new short[]{0, s, s, s, 0, 0, s, 0};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,10 +28,11 @@ import org.slf4j.LoggerFactory;
|
|||||||
|
|
||||||
import java.nio.ShortBuffer;
|
import java.nio.ShortBuffer;
|
||||||
|
|
||||||
|
import static org.oscim.renderer.MapRenderer.COORD_SCALE;
|
||||||
|
|
||||||
public final class SymbolBucket extends TextureBucket {
|
public final class SymbolBucket extends TextureBucket {
|
||||||
static final Logger log = LoggerFactory.getLogger(SymbolBucket.class);
|
static final Logger log = LoggerFactory.getLogger(SymbolBucket.class);
|
||||||
|
|
||||||
private final static float SCALE = 8.0f;
|
|
||||||
private final static int VERTICES_PER_SPRITE = 4;
|
private final static int VERTICES_PER_SPRITE = 4;
|
||||||
private final static int LBIT_MASK = 0xfffffffe;
|
private final static int LBIT_MASK = 0xfffffffe;
|
||||||
|
|
||||||
@@ -132,10 +133,10 @@ public final class SymbolBucket extends TextureBucket {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
short u1 = (short) (SCALE * x);
|
short u1 = (short) (COORD_SCALE * x);
|
||||||
short v1 = (short) (SCALE * y);
|
short v1 = (short) (COORD_SCALE * y);
|
||||||
short u2 = (short) (SCALE * (x + width));
|
short u2 = (short) (COORD_SCALE * (x + width));
|
||||||
short v2 = (short) (SCALE * (y + height));
|
short v2 = (short) (COORD_SCALE * (y + height));
|
||||||
|
|
||||||
PointF prevOffset = null;
|
PointF prevOffset = null;
|
||||||
short x1 = 0, y1 = 0, x2 = 0, y2 = 0;
|
short x1 = 0, y1 = 0, x2 = 0, y2 = 0;
|
||||||
@@ -156,25 +157,25 @@ public final class SymbolBucket extends TextureBucket {
|
|||||||
float hw = width / 2f;
|
float hw = width / 2f;
|
||||||
float hh = height / 2f;
|
float hh = height / 2f;
|
||||||
|
|
||||||
x1 = (short) (SCALE * (-hw));
|
x1 = (short) (COORD_SCALE * (-hw));
|
||||||
x2 = (short) (SCALE * (hw));
|
x2 = (short) (COORD_SCALE * (hw));
|
||||||
y1 = (short) (SCALE * (hh));
|
y1 = (short) (COORD_SCALE * (hh));
|
||||||
y2 = (short) (SCALE * (-hh));
|
y2 = (short) (COORD_SCALE * (-hh));
|
||||||
} else {
|
} else {
|
||||||
float hw = (float) (it.offset.x * width);
|
float hw = (float) (it.offset.x * width);
|
||||||
float hh = (float) (it.offset.y * height);
|
float hh = (float) (it.offset.y * height);
|
||||||
x1 = (short) (SCALE * (-hw));
|
x1 = (short) (COORD_SCALE * (-hw));
|
||||||
x2 = (short) (SCALE * (width - hw));
|
x2 = (short) (COORD_SCALE * (width - hw));
|
||||||
y1 = (short) (SCALE * (height - hh));
|
y1 = (short) (COORD_SCALE * (height - hh));
|
||||||
y2 = (short) (SCALE * (-hh));
|
y2 = (short) (COORD_SCALE * (-hh));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* add vertices */
|
/* add vertices */
|
||||||
short tx = (short) ((int) (SCALE * it.x) & LBIT_MASK
|
short tx = (short) ((int) (COORD_SCALE * it.x) & LBIT_MASK
|
||||||
| (it.billboard ? 1 : 0));
|
| (it.billboard ? 1 : 0));
|
||||||
|
|
||||||
short ty = (short) (SCALE * it.y);
|
short ty = (short) (COORD_SCALE * it.y);
|
||||||
|
|
||||||
vertexItems.add(tx, ty, x1, y1, u1, v2);
|
vertexItems.add(tx, ty, x1, y1, u1, v2);
|
||||||
vertexItems.add(tx, ty, x1, y2, u1, v1);
|
vertexItems.add(tx, ty, x1, y2, u1, v1);
|
||||||
@@ -192,17 +193,17 @@ public final class SymbolBucket extends TextureBucket {
|
|||||||
offsetX = 0;
|
offsetX = 0;
|
||||||
offsetY = 0;
|
offsetY = 0;
|
||||||
} else {
|
} else {
|
||||||
offsetX = (short) (((width / 2f) - (it.offset.x * width)) * SCALE);
|
offsetX = (short) (((width / 2f) - (it.offset.x * width)) * COORD_SCALE);
|
||||||
offsetY = (short) (((height / 2f) - (it.offset.y * height)) * SCALE);
|
offsetY = (short) (((height / 2f) - (it.offset.y * height)) * COORD_SCALE);
|
||||||
}
|
}
|
||||||
|
|
||||||
float hw = width / 2f;
|
float hw = width / 2f;
|
||||||
float hh = height / 2f;
|
float hh = height / 2f;
|
||||||
|
|
||||||
minX = (SCALE * (-hw));
|
minX = (COORD_SCALE * (-hw));
|
||||||
maxX = (SCALE * (hw));
|
maxX = (COORD_SCALE * (hw));
|
||||||
minY = (SCALE * (hh));
|
minY = (COORD_SCALE * (hh));
|
||||||
maxY = (SCALE * (-hh));
|
maxY = (COORD_SCALE * (-hh));
|
||||||
|
|
||||||
// target drawing rectangle
|
// target drawing rectangle
|
||||||
{ // lower-left
|
{ // lower-left
|
||||||
@@ -231,9 +232,9 @@ public final class SymbolBucket extends TextureBucket {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* add vertices */
|
/* add vertices */
|
||||||
short tx = (short) (((int) (SCALE * it.x) & LBIT_MASK
|
short tx = (short) (((int) (COORD_SCALE * it.x) & LBIT_MASK
|
||||||
| (it.billboard ? 1 : 0)) + offsetX);
|
| (it.billboard ? 1 : 0)) + offsetX);
|
||||||
short ty = (short) ((SCALE * it.y) + offsetY);
|
short ty = (short) ((COORD_SCALE * it.y) + offsetY);
|
||||||
|
|
||||||
vertexItems.add(tx, ty, points[0], points[1], u1, v2); // lower-left
|
vertexItems.add(tx, ty, points[0], points[1], u1, v2); // lower-left
|
||||||
vertexItems.add(tx, ty, points[2], points[3], u1, v1); // upper-left
|
vertexItems.add(tx, ty, points[2], points[3], u1, v1); // upper-left
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ public class TextureBucket extends RenderBucket {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static class Shader extends GLShader {
|
static class Shader extends GLShader {
|
||||||
int uMV, uProj, uScale, uTexSize, aPos, aTexCoord;
|
int uMV, uProj, uScale, uCoordScale, uTexSize, aPos, aTexCoord;
|
||||||
|
|
||||||
Shader() {
|
Shader() {
|
||||||
if (!create("texture_layer"))
|
if (!create("texture_layer"))
|
||||||
@@ -92,6 +92,7 @@ public class TextureBucket extends RenderBucket {
|
|||||||
uMV = getUniform("u_mv");
|
uMV = getUniform("u_mv");
|
||||||
uProj = getUniform("u_proj");
|
uProj = getUniform("u_proj");
|
||||||
uScale = getUniform("u_scale");
|
uScale = getUniform("u_scale");
|
||||||
|
uCoordScale = getUniform("u_coord_scale");
|
||||||
uTexSize = getUniform("u_div");
|
uTexSize = getUniform("u_div");
|
||||||
aPos = getAttrib("vertex");
|
aPos = getAttrib("vertex");
|
||||||
aTexCoord = getAttrib("tex_coord");
|
aTexCoord = getAttrib("tex_coord");
|
||||||
@@ -127,6 +128,7 @@ public class TextureBucket extends RenderBucket {
|
|||||||
|
|
||||||
TextureBucket tb = (TextureBucket) b;
|
TextureBucket tb = (TextureBucket) b;
|
||||||
gl.uniform1f(shader.uScale, tb.fixed ? 1 / scale : 1);
|
gl.uniform1f(shader.uScale, tb.fixed ? 1 / scale : 1);
|
||||||
|
gl.uniform1f(shader.uCoordScale, COORD_SCALE);
|
||||||
|
|
||||||
v.proj.setAsUniform(shader.uProj);
|
v.proj.setAsUniform(shader.uProj);
|
||||||
v.mvp.setAsUniform(shader.uMV);
|
v.mvp.setAsUniform(shader.uMV);
|
||||||
|
|||||||
Reference in New Issue
Block a user