It’s not really worth directly converting the direct_state_access extension. You would still be asking the driver to do lots of extra int -> object lookups. It would be much better to have a variation of this extension with opaque pointer types.
Here’s a mock up of a fictional direct_buffer_objects extension:
typedef void* Buffer
Buffer CreateBuffer(int size, void *data, enum usage);
GenBuffers(int count, Buffer *buffer)
BufferData(Buffer buffer, int size, const void *data, enum usage);
BufferSubData(Buffer buffer, int offset, int size, const void *data);
DeleteBuffers(int count, Buffer *buffer)
FlushMappedBufferRange(Buffer buffer, int offset, int size);
GetBufferParameter<T>(Buffer buffer, enum param, T *data);
void* GetBufferPointer(Buffer buffer, enum param);
GetBufferSubData(Buffer buffer, int offset, int size, void *data);
void* MapBuffer(Buffer, enum access);
void* MapBufferRange(Buffer, int offset, int size, enum access);
UnmapBuffer(Buffer buffer);
CopyBufferSubData(Buffer src, Buffer dest, int srcoffset, int destoffset, int size);
BindBuffer(enum target, Buffer buffer); //target cannot be array_buffer, element_array_buffer, copy_{read,write}_buffer
BindBufferRange(enum target, uint index, Buffer buffer, int offset, int size);
BindBufferBase(enum target, uint index, Buffer buffer);
//vertex arrays
VertexAttrib(int index, int size, enum type, boolean normalized, Buffer, buffer, int offset, int stride);
VertexAttribI(int index, int size, enum type, Buffer, buffer, int offset, int stride);
ElementPointer(int index, enum type, Buffer buffer, int offset, int size);//if size == 0, use whole buffer
ElementPointerRange(int index, enum type, int start, int end, Buffer buffer, int offset, int size);
DrawElements(enum mode, int instances, int elementIndex, int baseVertex);
MultiDrawElements(enum *mode, int *instances, int *elementIndex, int *baseVertex);
//texture buffers
TexBuffer(Buffer buffer, enum internalformat);
BindBuffer is unfortunately still there due to texturing methods still using it.
The ElementPointer and [Multi]DrawElements are new, in an attempt to stem the explosion of Draw combinations.
Regards
elFarto