org.oscim.renderer.bucket.RenderBucket Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of vtm Show documentation
Show all versions of vtm Show documentation
OpenGL vector map library written in Java - running on Android, iOS, Desktop and within the browser.
/*
* Copyright 2012, 2013 Hannes Janetzek
* Copyright 2016 Stephan Leuschner
* Copyright 2017 Luca Osten
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see .
*/
package org.oscim.renderer.bucket;
import org.oscim.utils.pool.Inlist;
import java.nio.ShortBuffer;
public abstract class RenderBucket extends Inlist {
public static final byte LINE = 0;
public static final byte TEXLINE = 1;
public static final byte POLYGON = 2;
public static final byte MESH = 3;
public static final byte EXTRUSION = 4;
public static final byte HAIRLINE = 5;
public static final byte SYMBOL = 6;
public static final byte BITMAP = 7;
public static final byte CIRCLE = 8;
public final byte type;
/**
* Drawing order from bottom to top.
*/
int level;
/**
* Number of vertices for this layer.
*/
protected int numVertices;
protected int numIndices;
/**
* Temporary list of vertex data.
*/
protected final VertexData vertexItems;
protected final VertexData indiceItems;
static final VertexData EMPTY = new VertexData();
final boolean quads;
protected RenderBucket(byte type, boolean indexed, boolean quads) {
this.type = type;
vertexItems = new VertexData();
if (indexed)
indiceItems = new VertexData();
else
indiceItems = EMPTY;
this.quads = quads;
}
/**
* Clear all resources.
*/
protected void clear() {
vertexItems.dispose();
indiceItems.dispose();
numVertices = 0;
numIndices = 0;
}
/**
* Final preparation of content before compilation
* for stuff that should not be done on render-thread.
*/
protected void prepare() {
}
/**
* For line- and polygon-buckets this is the offset
* of VERTICES in its bucket.vbo.
* For all other types it is the byte offset in vbo.
* FIXME - always use byte offset?
*/
public int getVertexOffset() {
return vertexOffset;
}
/**
* Start position in ibo for this bucket (in bytes)
*/
public int getIndiceOffset() {
return indiceOffset;
}
public void setLevel(int level) {
this.level = level;
}
public void setVertexOffset(int offset) {
this.vertexOffset = offset;
}
protected int vertexOffset; // in bytes
protected int indiceOffset; // in bytes
protected void compile(ShortBuffer vboData, ShortBuffer iboData) {
compileVertexItems(vboData);
if (iboData != null)
compileIndicesItems(iboData);
}
protected void compileVertexItems(ShortBuffer vboData) {
/* keep offset of layer data in vbo */
vertexOffset = vboData.position() * RenderBuckets.SHORT_BYTES;
vertexItems.compile(vboData);
}
protected void compileIndicesItems(ShortBuffer iboData) {
/* keep offset of layer data in ibo */
if (indiceItems == null || indiceItems.empty())
return;
indiceOffset = iboData.position() * RenderBuckets.SHORT_BYTES;
indiceItems.compile(iboData);
}
}