I see, still, I think it would be better to provide all types of accesses in just several concrete buffer classes, if the underlying OpenGL object can be used in all these contexts. I think this would be better because:
- we would avoid the initialization order problem, since the parameters like `capacity` or `components`
- currently, `acquire` is called in the ctor of the mixed anonymous classes - I think we should encourage having it after the ctor to prevent clients from forgetting to call `release`
- I think it's simpler for the user to have to learn fewer abstractions, if we can stuff everything under the same roof

Do you think something like this makes sense?

    Buffer------------\
      |               |
      V               V
    IndexBuffer  VertexBuffer
    (possibly)

where:

    class Buffer(val capacity: Int) {
      object TextureBufferAccess { ... }
      object TransformFeedbackAccess { ... }
    }
    class VertexBuffer(vertexCount, attributeCount) extends Buffer(vertex*attribute*bytesPerFloat) {
      object VertexBufferAccess { ... }
    }

WDYT?