lwjgl/src/java/org/lwjgl/test/opengles/util/BufferObject.java

99 lines
2.1 KiB
Java

package org.lwjgl.test.opengles.util;
import java.nio.*;
import static org.lwjgl.opengles.GLES20.*;
import static org.lwjgl.opengles.OESMapbuffer.*;
abstract class BufferObject implements GLObject {
protected final int ID;
protected int target;
protected int usage;
/** The BufferObject data size in bytes. */
private int size;
protected BufferObject(final int type, final int usage) {
this.ID = glGenBuffers();
this.target = type;
this.usage = usage;
}
protected BufferObject(final int type, final int usage, final Buffer buffer) {
this(type, usage);
setData(buffer);
}
protected BufferObject(final int type, final int usage, final int dataSize) {
this(type, usage);
setData(dataSize);
}
public final int getID() {
return ID;
}
public void destroy() {
glDeleteBuffers(ID);
}
public final int getTarget() {
return target;
}
public final int getUsage() {
return usage;
}
public final int getSize() {
return size;
}
public abstract void enable();
public abstract void disable();
public final void setData(final Buffer buffer) {
enable();
if ( buffer instanceof ByteBuffer ) {
glBufferData(target, (ByteBuffer)buffer, usage);
size = buffer.remaining();
} else if ( buffer instanceof ShortBuffer ) {
glBufferData(target, (ShortBuffer)buffer, usage);
size = buffer.remaining() << 1;
} else if ( buffer instanceof IntBuffer ) {
glBufferData(target, (IntBuffer)buffer, usage);
size = buffer.remaining() << 2;
} else if ( buffer instanceof FloatBuffer ) {
glBufferData(target, (FloatBuffer)buffer, usage);
size = buffer.remaining() << 2;
}
disable();
}
public final void setData(final int dataSize) {
enable();
glBufferData(target, dataSize, usage);
size = dataSize;
disable();
}
public final ByteBuffer map(final int access, final ByteBuffer oldBuffer) {
return glMapBufferOES(target, access, oldBuffer);
}
public final ByteBuffer map(final int access, final int length, final ByteBuffer oldBuffer) {
return glMapBufferOES(target, access, length, oldBuffer);
}
public final boolean unmap() {
return glUnmapBufferOES(target);
}
}