package org.andengine.opengl.vbo;
import java.nio.ByteBuffer;
import org.andengine.opengl.shader.ShaderProgram;
import org.andengine.opengl.util.GLState;
import org.andengine.util.IDisposable;
/**
* (c) Zynga 2011
*
* @author Nicolas Gramlich <ngramlich@zynga.com>
* @since 14:32:10 - 15.11.2011
*/
public interface IVertexBufferObject extends IDisposable {
// ===========================================================
// Constants
// ===========================================================
public static final int HARDWARE_BUFFER_ID_INVALID = -1;
// ===========================================================
// Methods
// ===========================================================
public boolean isAutoDispose();
public int getHardwareBufferID();
public boolean isLoadedToHardware();
/**
* Mark this {@link VertexBufferObject} as not not loaded to hardware.
* It will reload itself to hardware when it gets used again.
*/
public void setNotLoadedToHardware();
public void unloadFromHardware(final GLState pGLState);
public boolean isDirtyOnHardware();
/** Mark this {@link VertexBufferObject} dirty so it gets updated on the hardware. */
public void setDirtyOnHardware();
/**
* @return the number of <code>float</code>s that fit into this {@link IVertexBufferObject}.
*/
public int getCapacity();
/**
* @return the number of <code>byte</code>s that fit into this {@link IVertexBufferObject}.
*/
public int getByteCapacity();
/**
* @return the number of <code>byte</code>s that are allocated on the heap.
*/
public int getHeapMemoryByteSize();
/**
* @return the number of <code>byte</code>s that are allocated on the native heap (through direct {@link ByteBuffer}s).
*/
public int getNativeHeapMemoryByteSize();
/**
* @return the number of <code>byte</code>s that are allocated on the GPU.
*/
public int getGPUMemoryByteSize();
public void bind(final GLState pGLState);
public void bind(final GLState pGLState, final ShaderProgram pShaderProgram);
public void unbind(final GLState pGLState, final ShaderProgram pShaderProgram);
public VertexBufferObjectManager getVertexBufferObjectManager();
public void draw(final int pPrimitiveType, final int pCount);
public void draw(final int pPrimitiveType, final int pOffset, final int pCount);
}