package org.anddev.andengine.util.cache; import javax.microedition.khronos.opengles.GL11; import org.anddev.andengine.opengl.buffer.BufferObjectManager; import org.anddev.andengine.opengl.vertex.RectangleVertexBuffer; import org.anddev.andengine.util.MultiKey; import org.anddev.andengine.util.MultiKeyHashMap; /** * (c) 2010 Nicolas Gramlich * (c) 2011 Zynga Inc. * * @author Nicolas Gramlich * @since 21:10:05 - 09.01.2011 */ public class RectangleVertexBufferCache { // =========================================================== // Constants // =========================================================== // =========================================================== // Fields // =========================================================== private final int mDrawType; private final MultiKeyHashMap<Integer, RectangleVertexBuffer> mRectangleVertexBufferCache = new MultiKeyHashMap<Integer, RectangleVertexBuffer>(); // =========================================================== // Constructors // =========================================================== public RectangleVertexBufferCache() { this(GL11.GL_STATIC_DRAW); } public RectangleVertexBufferCache(final int pDrawType) { this.mDrawType = pDrawType; } // =========================================================== // Getter & Setter // =========================================================== // =========================================================== // Methods for/from SuperClass/Interfaces // =========================================================== // =========================================================== // Methods // =========================================================== public RectangleVertexBuffer get(final int pWidth, final int pHeight) { final RectangleVertexBuffer cachedRectangleVertexBuffer = this.mRectangleVertexBufferCache.get(pWidth, pHeight); if(cachedRectangleVertexBuffer != null) { return cachedRectangleVertexBuffer; } else { return this.put(pWidth, pHeight, new RectangleVertexBuffer(this.mDrawType, false)); } } public RectangleVertexBuffer put(final int pWidth, final int pHeight, final RectangleVertexBuffer pRectangleVertexBuffer) { pRectangleVertexBuffer.update(pWidth, pHeight); BufferObjectManager.getActiveInstance().loadBufferObject(pRectangleVertexBuffer); this.mRectangleVertexBufferCache.put(new MultiKey<Integer>(pWidth, pHeight), pRectangleVertexBuffer); return pRectangleVertexBuffer; } // =========================================================== // Inner and Anonymous Classes // =========================================================== }