Rev 185 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
package com.gebauz.Bauzoid.graphics.model;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.ShortBuffer;
import com.gebauz.Bauzoid.app.Consts;
import com.gebauz.Bauzoid.graphics.Graphics;
import com.gebauz.Bauzoid.graphics.GraphicsObject;
import android.opengl.GLES20;
/** Index stream. */
public class IndexStream
extends GraphicsObject
{
private int mIndexCount =
0;
private ShortBuffer mData
;
private int mBufferID =
0;
private static int[] BUFFERID =
new int[1];
/** Constructor. */
public IndexStream
(Graphics graphics,
int indexCount,
byte[] data
)
{
super(graphics
);
mIndexCount = indexCount
;
ByteBuffer byteBuffer =
ByteBuffer.
allocateDirect(data.
length);
byteBuffer.
order(ByteOrder.
nativeOrder());
byteBuffer.
put(data
);
byteBuffer.
position(0);
mData = byteBuffer.
asShortBuffer();
}
/** Upload indices to hardware. */
public final void upload
()
{
GLES20.
glGenBuffers(1, BUFFERID,
0);
mBufferID = BUFFERID
[0];
GLES20.
glBindBuffer(GLES20.
GL_ELEMENT_ARRAY_BUFFER, mBufferID
);
GLES20.
glBufferData(GLES20.
GL_ELEMENT_ARRAY_BUFFER, mData.
capacity() * Consts.
SIZEOF_SHORT, mData, GLES20.
GL_STATIC_DRAW);
GLES20.
glBindBuffer(GLES20.
GL_ELEMENT_ARRAY_BUFFER,
0);
}
/** Unload indices from hardware. */
public final void unload
()
{
BUFFERID
[0] = mBufferID
;
GLES20.
glDeleteBuffers(1, BUFFERID,
0);
mBufferID =
0;
}
/** Activate index stream. */
public final void activate
()
{
// TODO: state tracking
GLES20.
glBindBuffer(GLES20.
GL_ELEMENT_ARRAY_BUFFER, mBufferID
);
}
/** Deactivate index stream. */
public final void deactivate
()
{
// TODO: state tracking
GLES20.
glBindBuffer(GLES20.
GL_ELEMENT_ARRAY_BUFFER,
0);
}
}