use CheckReturnValue for BufferObject.release()
This commit is contained in:
parent
5b2cd72940
commit
620ce368b5
@ -17,6 +17,8 @@ package org.oscim.renderer;
|
||||
|
||||
import java.nio.Buffer;
|
||||
|
||||
import javax.annotation.CheckReturnValue;
|
||||
|
||||
import org.oscim.backend.GL20;
|
||||
import org.oscim.backend.Log;
|
||||
|
||||
@ -125,9 +127,10 @@ public final class BufferObject {
|
||||
return bo;
|
||||
}
|
||||
|
||||
public static synchronized void release(BufferObject bo) {
|
||||
@CheckReturnValue
|
||||
public static synchronized BufferObject release(BufferObject bo) {
|
||||
if (bo == null)
|
||||
return;
|
||||
return null;
|
||||
|
||||
// if (counter > 200) {
|
||||
// Log.d(TAG, "should clear some buffers " + counter);
|
||||
@ -137,6 +140,8 @@ public final class BufferObject {
|
||||
bo.next = pool[t];
|
||||
pool[t] = bo;
|
||||
counter[t]++;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
// Note: only call from GL-Thread
|
||||
|
@ -139,8 +139,7 @@ public abstract class ElementRenderer extends LayerRenderer {
|
||||
int newSize = layers.getSize();
|
||||
|
||||
if (newSize <= 0) {
|
||||
BufferObject.release(layers.vbo);
|
||||
layers.vbo = null;
|
||||
layers.vbo = BufferObject.release(layers.vbo);
|
||||
setReady(false);
|
||||
return;
|
||||
}
|
||||
|
@ -416,10 +416,8 @@ public class ExtrusionLayer extends RenderElement {
|
||||
@Override
|
||||
protected void clear() {
|
||||
if (compiled) {
|
||||
BufferObject.release(vboIndices);
|
||||
BufferObject.release(vboVertices);
|
||||
vboIndices = null;
|
||||
vboVertices = null;
|
||||
vboIndices = BufferObject.release(vboIndices);
|
||||
vboVertices = BufferObject.release(vboVertices);
|
||||
} else {
|
||||
for (int i = 0; i < 4; i++)
|
||||
VertexItem.pool.releaseAll(mIndices[i]);
|
||||
|
@ -43,6 +43,10 @@ public class MeshLayer extends RenderElement {
|
||||
}
|
||||
|
||||
public void addMesh(GeometryBuffer geom) {
|
||||
if (geom.index[0] < 6) {
|
||||
Log.d(TAG, "invalid poly");
|
||||
return;
|
||||
}
|
||||
if (vertexItems == null) {
|
||||
vertexItems = VertexItem.pool.get();
|
||||
indiceItems = VertexItem.pool.get();
|
||||
@ -69,9 +73,10 @@ public class MeshLayer extends RenderElement {
|
||||
@Override
|
||||
protected void compile(ShortBuffer sbuf) {
|
||||
if (indiceItems == null) {
|
||||
|
||||
indicesVbo = BufferObject.release(indicesVbo);
|
||||
return;
|
||||
}
|
||||
|
||||
Log.d(TAG, "compile");
|
||||
// add vertices to shared VBO
|
||||
ElementLayers.addPoolItems(this, sbuf);
|
||||
@ -95,19 +100,20 @@ public class MeshLayer extends RenderElement {
|
||||
|
||||
sbuf.flip();
|
||||
|
||||
if (indicesVbo == null)
|
||||
indicesVbo = BufferObject.get(GL20.GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||
|
||||
indicesVbo.loadBufferData(sbuf, sbuf.limit() * 2);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void clear() {
|
||||
BufferObject.release(indicesVbo);
|
||||
indicesVbo = BufferObject.release(indicesVbo);
|
||||
VertexItem.pool.releaseAll(indiceItems);
|
||||
VertexItem.pool.releaseAll(vertexItems);
|
||||
|
||||
indiceItems = null;
|
||||
vertexItems = null;
|
||||
indicesVbo = null;
|
||||
}
|
||||
|
||||
public static class Renderer {
|
||||
@ -147,6 +153,9 @@ public class MeshLayer extends RenderElement {
|
||||
for (; l != null && l.type == RenderElement.MESH; l = l.next) {
|
||||
MeshLayer ml = (MeshLayer) l;
|
||||
|
||||
if (ml.indicesVbo == null)
|
||||
continue;
|
||||
|
||||
ml.indicesVbo.bind();
|
||||
|
||||
GL.glVertexAttribPointer(hVertexPosition, 2, GL20.GL_SHORT,
|
||||
|
@ -223,11 +223,7 @@ public class MapTile extends Tile {
|
||||
protected void clear() {
|
||||
if (layers != null) {
|
||||
// TODO move this to layers clear
|
||||
if (layers.vbo != null) {
|
||||
BufferObject.release(layers.vbo);
|
||||
layers.vbo = null;
|
||||
}
|
||||
|
||||
layers.vbo = BufferObject.release(layers.vbo);
|
||||
layers.clear();
|
||||
}
|
||||
|
||||
|
@ -173,8 +173,7 @@ public class TileRenderer extends LayerRenderer {
|
||||
if (!ElementRenderer.uploadLayers(tile.layers, newSize, true)) {
|
||||
Log.d(TAG, "BUG uploadTileData " + tile + " failed!");
|
||||
|
||||
BufferObject.release(tile.layers.vbo);
|
||||
tile.layers.vbo = null;
|
||||
tile.layers.vbo = BufferObject.release(tile.layers.vbo);
|
||||
tile.layers.clear();
|
||||
tile.layers = null;
|
||||
return 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user