use CheckReturnValue for BufferObject.release()

This commit is contained in:
Hannes Janetzek 2013-09-28 22:29:27 +02:00
parent 5b2cd72940
commit 620ce368b5
6 changed files with 25 additions and 19 deletions

@ -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();
indicesVbo = BufferObject.get(GL20.GL_ELEMENT_ARRAY_BUFFER, 0);
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;