From 8992cfda94811a803d04161364d3749a24793ccd Mon Sep 17 00:00:00 2001 From: Hannes Janetzek Date: Sat, 11 May 2013 22:55:15 +0200 Subject: [PATCH] fix texture pool initialization --- .../oscim/renderer/sublayers/TextureItem.java | 51 ++++++++++--------- src/org/oscim/utils/pool/SyncPool.java | 5 +- 2 files changed, 29 insertions(+), 27 deletions(-) diff --git a/src/org/oscim/renderer/sublayers/TextureItem.java b/src/org/oscim/renderer/sublayers/TextureItem.java index 3dcc2637..7e1bb792 100644 --- a/src/org/oscim/renderer/sublayers/TextureItem.java +++ b/src/org/oscim/renderer/sublayers/TextureItem.java @@ -55,6 +55,10 @@ public class TextureItem extends Inlist { pool.releaseAll(ti); } + /** + * Retrieve a TextureItem from pool with default Bitmap + * with dimension TextureRenderer.TEXTURE_WIDTH/HEIGHT. + * */ public synchronized static TextureItem get(boolean initBitmap) { TextureItem ti = pool.get(); if (initBitmap) { @@ -68,16 +72,16 @@ public class TextureItem extends Inlist { @Override public void init(int num) { - super.init(num); - int[] textureIds = new int[num]; GLES20.glGenTextures(num, textureIds, 0); - for (int i = 1; i < num; i++) { + for (int i = 0; i < num; i++) { initTexture(textureIds[i]); TextureItem to = new TextureItem(textureIds[i]); pool = Inlist.push(pool, to); } + count = num; + fill = num; } @Override @@ -102,8 +106,8 @@ public class TextureItem extends Inlist { } }; - private static ArrayList mFreeTextures = new ArrayList(); - private static ArrayList mBitmaps = new ArrayList(10); + private final static ArrayList mTextures = new ArrayList(); + private final static ArrayList mBitmaps = new ArrayList(10); public final static int TEXTURE_WIDTH = 512; public final static int TEXTURE_HEIGHT = 256; @@ -113,25 +117,14 @@ public class TextureItem extends Inlist { private static int mTexCnt = 0; static void releaseTexture(TextureItem it) { - synchronized (mFreeTextures) { + synchronized (mTextures) { if (it.id >= 0) { - mFreeTextures.add(Integer.valueOf(it.id)); + mTextures.add(Integer.valueOf(it.id)); it.id = -1; } } } - static void releaseBitmap(TextureItem it) { - synchronized (mBitmaps) { - if (it.bitmap != null) { - mBitmaps.add(it.bitmap); - it.bitmap = null; - } - it.ownBitmap = false; - - } - } - /** * This function may only be used in GLRenderer Thread. * @@ -140,12 +133,12 @@ public class TextureItem extends Inlist { public static void uploadTexture(TextureItem to) { // free unused textures, find a better place for this TODO - synchronized (mFreeTextures) { - int size = mFreeTextures.size(); + synchronized (mTextures) { + int size = mTextures.size(); int[] tmp = new int[size]; for (int i = 0; i < size; i++) - tmp[i] = mFreeTextures.get(i).intValue(); - mFreeTextures.clear(); + tmp[i] = mTextures.get(i).intValue(); + mTextures.clear(); GLES20.glDeleteTextures(size, tmp, 0); } @@ -208,13 +201,13 @@ public class TextureItem extends Inlist { static void init(int num) { pool.init(num); - mBitmaps = new ArrayList(10); + mBitmaps.clear(); + mTextures.clear(); for (int i = 0; i < 4; i++) { Bitmap bitmap = Bitmap.createBitmap( TEXTURE_WIDTH, TEXTURE_HEIGHT, Bitmap.Config.ARGB_8888); - mBitmaps.add(bitmap); } @@ -242,4 +235,14 @@ public class TextureItem extends Inlist { return mBitmaps.remove(size - 1); } } + + static void releaseBitmap(TextureItem it) { + synchronized (mBitmaps) { + if (it.bitmap != null) { + mBitmaps.add(it.bitmap); + it.bitmap = null; + } + it.ownBitmap = false; + } + } } diff --git a/src/org/oscim/utils/pool/SyncPool.java b/src/org/oscim/utils/pool/SyncPool.java index 553aad4d..4f2cf81e 100644 --- a/src/org/oscim/utils/pool/SyncPool.java +++ b/src/org/oscim/utils/pool/SyncPool.java @@ -42,11 +42,10 @@ public abstract class SyncPool> { } /** - * @param items number of initial items + * @param items number of initial items. + * NOTE: default does nothing! */ public void init(int items) { - count = items; - fill = items; } /**