Ok! In general your redesign makes sense to me - we need to treat the same data buffers in several different contexts and we need to account for that by providing different views over them. I would, as I said, trade some type-safety in exchange for having fewer abstractions to think about as a user.

If we want to retain some of the type safety that mixins give us, perhaps we could introduce methods `asVertex`, `asTexture`, `asTransformFeedback` that the user needs to explicitly call to use the buffer with a `using` declaration:

    using.textureBuffer(myData.asTexture) { ... }