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

View File

@ -17,6 +17,8 @@ package org.oscim.renderer;
import java.nio.Buffer; import java.nio.Buffer;
import javax.annotation.CheckReturnValue;
import org.oscim.backend.GL20; import org.oscim.backend.GL20;
import org.oscim.backend.Log; import org.oscim.backend.Log;
@ -125,9 +127,10 @@ public final class BufferObject {
return bo; return bo;
} }
public static synchronized void release(BufferObject bo) { @CheckReturnValue
public static synchronized BufferObject release(BufferObject bo) {
if (bo == null) if (bo == null)
return; return null;
// if (counter > 200) { // if (counter > 200) {
// Log.d(TAG, "should clear some buffers " + counter); // Log.d(TAG, "should clear some buffers " + counter);
@ -137,6 +140,8 @@ public final class BufferObject {
bo.next = pool[t]; bo.next = pool[t];
pool[t] = bo; pool[t] = bo;
counter[t]++; counter[t]++;
return null;
} }
// Note: only call from GL-Thread // Note: only call from GL-Thread

View File

@ -139,8 +139,7 @@ public abstract class ElementRenderer extends LayerRenderer {
int newSize = layers.getSize(); int newSize = layers.getSize();
if (newSize <= 0) { if (newSize <= 0) {
BufferObject.release(layers.vbo); layers.vbo = BufferObject.release(layers.vbo);
layers.vbo = null;
setReady(false); setReady(false);
return; return;
} }

View File

@ -416,10 +416,8 @@ public class ExtrusionLayer extends RenderElement {
@Override @Override
protected void clear() { protected void clear() {
if (compiled) { if (compiled) {
BufferObject.release(vboIndices); vboIndices = BufferObject.release(vboIndices);
BufferObject.release(vboVertices); vboVertices = BufferObject.release(vboVertices);
vboIndices = null;
vboVertices = null;
} else { } else {
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
VertexItem.pool.releaseAll(mIndices[i]); VertexItem.pool.releaseAll(mIndices[i]);

View File

@ -43,6 +43,10 @@ public class MeshLayer extends RenderElement {
} }
public void addMesh(GeometryBuffer geom) { public void addMesh(GeometryBuffer geom) {
if (geom.index[0] < 6) {
Log.d(TAG, "invalid poly");
return;
}
if (vertexItems == null) { if (vertexItems == null) {
vertexItems = VertexItem.pool.get(); vertexItems = VertexItem.pool.get();
indiceItems = VertexItem.pool.get(); indiceItems = VertexItem.pool.get();
@ -69,9 +73,10 @@ public class MeshLayer extends RenderElement {
@Override @Override
protected void compile(ShortBuffer sbuf) { protected void compile(ShortBuffer sbuf) {
if (indiceItems == null) { if (indiceItems == null) {
indicesVbo = BufferObject.release(indicesVbo);
return; return;
} }
Log.d(TAG, "compile"); Log.d(TAG, "compile");
// add vertices to shared VBO // add vertices to shared VBO
ElementLayers.addPoolItems(this, sbuf); ElementLayers.addPoolItems(this, sbuf);
@ -95,19 +100,20 @@ public class MeshLayer extends RenderElement {
sbuf.flip(); 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); indicesVbo.loadBufferData(sbuf, sbuf.limit() * 2);
} }
@Override @Override
protected void clear() { protected void clear() {
BufferObject.release(indicesVbo); indicesVbo = BufferObject.release(indicesVbo);
VertexItem.pool.releaseAll(indiceItems); VertexItem.pool.releaseAll(indiceItems);
VertexItem.pool.releaseAll(vertexItems); VertexItem.pool.releaseAll(vertexItems);
indiceItems = null; indiceItems = null;
vertexItems = null; vertexItems = null;
indicesVbo = null;
} }
public static class Renderer { public static class Renderer {
@ -147,6 +153,9 @@ public class MeshLayer extends RenderElement {
for (; l != null && l.type == RenderElement.MESH; l = l.next) { for (; l != null && l.type == RenderElement.MESH; l = l.next) {
MeshLayer ml = (MeshLayer) l; MeshLayer ml = (MeshLayer) l;
if (ml.indicesVbo == null)
continue;
ml.indicesVbo.bind(); ml.indicesVbo.bind();
GL.glVertexAttribPointer(hVertexPosition, 2, GL20.GL_SHORT, GL.glVertexAttribPointer(hVertexPosition, 2, GL20.GL_SHORT,

View File

@ -223,11 +223,7 @@ public class MapTile extends Tile {
protected void clear() { protected void clear() {
if (layers != null) { if (layers != null) {
// TODO move this to layers clear // TODO move this to layers clear
if (layers.vbo != null) { layers.vbo = BufferObject.release(layers.vbo);
BufferObject.release(layers.vbo);
layers.vbo = null;
}
layers.clear(); layers.clear();
} }

View File

@ -173,8 +173,7 @@ public class TileRenderer extends LayerRenderer {
if (!ElementRenderer.uploadLayers(tile.layers, newSize, true)) { if (!ElementRenderer.uploadLayers(tile.layers, newSize, true)) {
Log.d(TAG, "BUG uploadTileData " + tile + " failed!"); Log.d(TAG, "BUG uploadTileData " + tile + " failed!");
BufferObject.release(tile.layers.vbo); tile.layers.vbo = BufferObject.release(tile.layers.vbo);
tile.layers.vbo = null;
tile.layers.clear(); tile.layers.clear();
tile.layers = null; tile.layers = null;
return 0; return 0;