@Override public GeometryHandle storeGeometry(float[] geometry, EGeometryFormatType type, boolean writable, String name) { GeometryHandle geometryBuffer = allocateVBO(type, name); bindGeometry(geometryBuffer); try(MemoryStack stack = MemoryStack.stackPush()) { ByteBuffer bfr = stack.malloc(4*geometry.length); bfr.asFloatBuffer().put(geometry); GL15.glBufferData(GL15.GL_ARRAY_BUFFER, bfr, writable ? GL15.GL_DYNAMIC_DRAW : GL15.GL_STATIC_DRAW); setObjectLabel(KHRDebug.GL_BUFFER, geometryBuffer.getInternalId(), name + "-vertices"); } return geometryBuffer; }
@Override public GeometryHandle generateGeometry(int vertices, EGeometryFormatType type, boolean writable, String name) { GeometryHandle vertexBufferId = allocateVBO(type, name); bindGeometry(vertexBufferId); GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vertices*type.getBytesPerVertexSize(), writable ? GL15.GL_DYNAMIC_DRAW : GL15.GL_STATIC_DRAW); setObjectLabel(KHRDebug.GL_BUFFER, vertexBufferId.getInternalId(), name + "-vertices"); return vertexBufferId; }
@Override GeometryHandle allocateVBO(EGeometryFormatType type, String name) { GeometryHandle geometry = super.allocateVBO(type, name); if (glcaps.GL_ARB_vertex_array_object && type.isSingleBuffer()) { geometry.setInternalFormatId(ARBVertexArrayObject.glGenVertexArrays()); bindFormat(geometry.getInternalFormatId()); specifyFormat(type); } if(type.isSingleBuffer()) { setObjectLabel(GL11.GL_VERTEX_ARRAY, geometry.getInternalFormatId(), name + "-vao"); } return geometry; }