From 8f0c51675ddb0de9731408b0820f5fde834c9f51 Mon Sep 17 00:00:00 2001 From: Hannes Janetzek Date: Tue, 18 Mar 2014 01:38:10 +0100 Subject: [PATCH] TexturePool: add function to initialize item with bitmap --- .../layers/tile/bitmap/BitmapTileLayer.java | 6 +- .../oscim/renderer/elements/BitmapLayer.java | 3 +- .../oscim/renderer/elements/TextureItem.java | 67 ++++++++----------- 3 files changed, 30 insertions(+), 46 deletions(-) diff --git a/vtm/src/org/oscim/layers/tile/bitmap/BitmapTileLayer.java b/vtm/src/org/oscim/layers/tile/bitmap/BitmapTileLayer.java index b03977ca..9d192109 100644 --- a/vtm/src/org/oscim/layers/tile/bitmap/BitmapTileLayer.java +++ b/vtm/src/org/oscim/layers/tile/bitmap/BitmapTileLayer.java @@ -104,14 +104,10 @@ public class BitmapTileLayer extends TileLayer { return new BitmapTileLoader(this, mTileSource); } - final static int TEXTURE_HEIGHT = 256; - final static int TEXTURE_WIDTH = 256; final static int POOL_FILL = 40; /** pool shared by TextLayers */ - final static TexturePool pool = new TexturePool(POOL_FILL, - TEXTURE_WIDTH, - TEXTURE_HEIGHT) { + final static TexturePool pool = new TexturePool(POOL_FILL) { // int sum = 0; // diff --git a/vtm/src/org/oscim/renderer/elements/BitmapLayer.java b/vtm/src/org/oscim/renderer/elements/BitmapLayer.java index c67c846a..802fe927 100644 --- a/vtm/src/org/oscim/renderer/elements/BitmapLayer.java +++ b/vtm/src/org/oscim/renderer/elements/BitmapLayer.java @@ -70,8 +70,7 @@ public class BitmapLayer extends TextureLayer { if (pool == null) textures = new TextureItem(mBitmap); else { - textures = pool.get(); - textures.bitmap = mBitmap; + textures = pool.get(mBitmap); } } diff --git a/vtm/src/org/oscim/renderer/elements/TextureItem.java b/vtm/src/org/oscim/renderer/elements/TextureItem.java index 73242ea4..1ebe8a07 100644 --- a/vtm/src/org/oscim/renderer/elements/TextureItem.java +++ b/vtm/src/org/oscim/renderer/elements/TextureItem.java @@ -150,6 +150,8 @@ public class TextureItem extends Inlist { private final int mHeight; private final int mWidth; + private final boolean mUseBitmapPool; + //private final int mBitmapFormat; //private final int mBitmapType; @@ -159,6 +161,14 @@ public class TextureItem extends Inlist { super(maxFill); mWidth = width; mHeight = height; + mUseBitmapPool = true; + } + + public TexturePool(int maxFill) { + super(maxFill); + mWidth = 0; + mHeight = 0; + mUseBitmapPool = false; } @Override @@ -172,6 +182,9 @@ public class TextureItem extends Inlist { public synchronized TextureItem get() { TextureItem t = super.get(); + if (!mUseBitmapPool) + return t; + synchronized (mBitmaps) { int size = mBitmaps.size(); if (size == 0) @@ -185,6 +198,13 @@ public class TextureItem extends Inlist { return t; } + public synchronized TextureItem get(Bitmap bitmap) { + TextureItem t = super.get(); + t.bitmap = bitmap; + + return t; + } + @Override protected TextureItem createItem() { return new TextureItem(this, -1); @@ -193,21 +213,14 @@ public class TextureItem extends Inlist { @Override protected boolean clearItem(TextureItem t) { - //if (t.ownBitmap) { - // t.bitmap = null; - // t.ownBitmap = false; - // releaseTexture(t); - // return false; - //} - if (t.ref) return false; t.ready = false; - releaseBitmap(t); - // only add back to pool when a texture - // is already assigned + if (mUseBitmapPool) + releaseBitmap(t); + return t.id >= 0; } @@ -273,21 +286,11 @@ public class TextureItem extends Inlist { t.bitmap.uploadToTexture(true); } - //if (t.ownBitmap) { - // t.bitmap.uploadToTexture(false); - //} else - - //if (t.width == mWidth && t.height == mHeight) { - // // use faster subimage upload - // t.bitmap.uploadToTexture(true); - //} else { - // t.bitmap.uploadToTexture(false); - //} - if (TextureLayer.Renderer.debug) GLUtils.checkGlError(TextureItem.class.getName()); - releaseBitmap(t); + if (mUseBitmapPool) + releaseBitmap(t); } protected void initTexture(TextureItem t) { @@ -312,27 +315,13 @@ public class TextureItem extends Inlist { } }; - // Pool for not-pooled textures. Disposed items will only be released - // on the GL-Thread and will not be put back in any pool. - final static TexturePool NOPOOL = new TexturePool(0, 0, 0) { - protected void releaseBitmap(TextureItem t) { - // TODO - }; - }; - - // public final static TexturePool nopool(){ - // return NOPOOL; - // } + /* Pool for not-pooled textures. Disposed items will only be released + * on the GL-Thread and will not be put back in any pool. */ + final static TexturePool NOPOOL = new TexturePool(0); private static GL20 GL; static void init(GL20 gl) { GL = gl; - - // mTexCnt = num; - // NOPOOL.init(num); - // - // mBitmaps.clear(); - // mTexDisposed.clear(); } }