final GL gl = GLContext.getCurrentGL();
int vboID = data.getVBOID(context.getGlContextRep());
if (vboID != 0) {
if (data.isNeedsRefresh()) {
final Buffer dataBuffer = data.getBuffer();
dataBuffer.rewind();
JoglRendererUtil.setBoundElementVBO(rendRecord, vboID);
gl.glBufferSubData(GL.GL_ELEMENT_ARRAY_BUFFER, 0, dataBuffer.limit() * data.getByteCount(), dataBuffer);
data.setNeedsRefresh(false);
}
return vboID;
}
final Buffer dataBuffer = data.getBuffer();
if (dataBuffer != null) {
// XXX: should we be rewinding? Maybe make that the programmer's responsibility.
dataBuffer.rewind();
vboID = makeVBOId();
data.setVBOID(context.getGlContextRep(), vboID);
rendRecord.invalidateVBO();
JoglRendererUtil.setBoundElementVBO(rendRecord, vboID);
gl.glBufferData(GL.GL_ELEMENT_ARRAY_BUFFER, dataBuffer.limit() * data.getByteCount(), dataBuffer,
getGLVBOAccessMode(data.getVboAccessMode()));
} else {
throw new Ardor3dException("Attempting to create a vbo id for a IndexBufferData with no Buffer value.");
}
return vboID;