99 lines
2.1 KiB
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);
|
|
}
|
|
|
|
} |