package org.anddev.andengine.opengl.texture.region.buffer;
import org.anddev.andengine.opengl.buffer.BufferObject;
import org.anddev.andengine.opengl.texture.ITexture;
import org.anddev.andengine.opengl.texture.region.BaseTextureRegion;
import org.anddev.andengine.opengl.util.FastFloatBuffer;
import org.anddev.andengine.opengl.vertex.SpriteBatchVertexBuffer;
/**
* (c) 2010 Nicolas Gramlich
* (c) 2011 Zynga Inc.
*
* @author Nicolas Gramlich
* @since 12:32:14 - 14.06.2011
*/
public class SpriteBatchTextureRegionBuffer extends BufferObject {
// ===========================================================
// Constants
// ===========================================================
// ===========================================================
// Fields
// ===========================================================
protected int mIndex;
// ===========================================================
// Constructors
// ===========================================================
public SpriteBatchTextureRegionBuffer(final int pCapacity, final int pDrawType, final boolean pManaged) {
super(pCapacity * 2 * SpriteBatchVertexBuffer.VERTICES_PER_RECTANGLE, pDrawType, pManaged);
}
// ===========================================================
// Getter & Setter
// ===========================================================
public int getIndex() {
return this.mIndex;
}
public void setIndex(final int pIndex) {
this.mIndex = pIndex;
}
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
// ===========================================================
// Methods
// ===========================================================
public void add(final BaseTextureRegion pTextureRegion) {
final ITexture texture = pTextureRegion.getTexture();
if(texture == null) { // TODO Check really needed?
return;
}
final int x1 = Float.floatToRawIntBits(pTextureRegion.getTextureCoordinateX1());
final int y1 = Float.floatToRawIntBits(pTextureRegion.getTextureCoordinateY1());
final int x2 = Float.floatToRawIntBits(pTextureRegion.getTextureCoordinateX2());
final int y2 = Float.floatToRawIntBits(pTextureRegion.getTextureCoordinateY2());
final int[] bufferData = this.mBufferData;
int index = this.mIndex;
bufferData[index++] = x1;
bufferData[index++] = y1;
bufferData[index++] = x1;
bufferData[index++] = y2;
bufferData[index++] = x2;
bufferData[index++] = y1;
bufferData[index++] = x2;
bufferData[index++] = y1;
bufferData[index++] = x1;
bufferData[index++] = y2;
bufferData[index++] = x2;
bufferData[index++] = y2;
this.mIndex = index;
}
public void submit() {
final FastFloatBuffer buffer = this.mFloatBuffer;
buffer.position(0);
buffer.put(this.mBufferData);
buffer.position(0);
super.setHardwareBufferNeedsUpdate();
}
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
}