package org.geogebra.web.geogebra3D.web.euclidian3D.openGL;
import org.geogebra.common.geogebra3D.euclidian3D.openGL.GLBufferIndices;
/**
* buffers for openGL
*
* @author mathieu
*
*/
public class GLBufferIndicesW implements GLBufferIndices {
private MyInt16Array impl;
/**
* constructor from float array
*/
public GLBufferIndicesW() {
isEmpty = true;
currentLength = 0;
}
private boolean isEmpty;
private int currentLength;
@Override
public boolean isEmpty() {
return isEmpty;
}
@Override
public void setEmpty() {
isEmpty = true;
}
@Override
public void allocate(int length) {
// allocate buffer only at start and when length change
if (impl == null || impl.getLength() < length) {
// This may be null in IE10
impl = MyInt16Array.create(length);
}
index = 0;
}
private int index = 0;
@Override
public void setLimit(int length) {
currentLength = length;
isEmpty = false;
}
@Override
public void put(short value) {
if (impl == null) {
return;
}
impl.set(index, value);
index++;
}
@Override
public short get() {
short ret = (short) impl.get(index);
index++;
return ret;
}
@Override
public void rewind() {
index = 0;
}
@Override
public int capacity() {
return currentLength;
}
@Override
public void array(short[] ret) {
if (impl == null) {
return;
}
for (int i = 0; i < ret.length; i++) {
ret[i] = (short) impl.get(i);
}
}
/**
*
* @return buffer
*/
public MyInt16Array getBuffer() {
return impl;
}
}