Subversion Repositories AndroidProjects

Rev

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);
        }
       
}