package org.geogebra.common.jre.openGL; import java.nio.ShortBuffer; import org.geogebra.common.geogebra3D.euclidian3D.openGL.GLBufferIndices; /** * buffers for openGL * * @author Mathieu * */ public class GLBufferIndicesJavaNio implements GLBufferIndices { private ShortBuffer impl; /** * constructor from float array */ public GLBufferIndicesJavaNio() { isEmpty = true; } 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.capacity() < length) { impl = ShortBuffer.allocate(length); } else { impl.rewind(); } impl.limit(length); } @Override public void setLimit(int length) { impl.limit(length); currentLength = length; impl.rewind(); isEmpty = false; } @Override public void put(short value) { impl.put(value); } @Override public short get() { return impl.get(); } @Override public void rewind() { impl.rewind(); } @Override public int capacity() { return currentLength; } @Override public void array(short[] ret) { impl.rewind(); for (int i = 0; i < ret.length; i++) { ret[i] = impl.get(); } } /** * * @return buffer */ public ShortBuffer getBuffer() { return impl; } }