[Public WebGL] Index Validation and using the same buffer for both GL_ARRAY_BUFFER and GL_ELEMENT_ARRAY_BUFFER

Gregg Tavares [email protected]
Tue Jan 12 15:23:47 PST 2010

I was in the process of writing some index validation code before calling
glDrawElements and I found out that apparently some WebGL implementations
currently assume that the same buffer will never be used for both a

as in

    buf = ctx.createBuffer();
    ctx.bindBuffer(ctx.ARRAY_BUFFER, buf);
    ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, buf);

The spec does not disallow this.

My understanding is the reason some implementations assumed this would never
happen was that to efficiently validate the indices, client side shadow
copies of the buffer data needed to be kept. If there is an assumption that
any buffer bound to GL_ELEMENT_ARRAY_BUFFER will only ever be bound to
GL_ELEMENT_ARRAY_BUFFER then only the few buffers that are bound to
GL_ELEMENT_ARRAY_BUFFER need to be shadowed.

The problem is that makes these implementations fail if the user does use
the same buffer for both as in the example above.

If this optimization is important than it seems like we should make it part
of the spec and require that a buffer can only be ever bound to one or the
other. That way, we'll get the same results on all implementations.
Otherwise, it seems like we need a conformance test to make sure
implementations are not taking this shortcut as programs that are spec
compliant will only run on some implementations.

Any thoughts on which way it should be?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://khronos.org/pipermail/public_webgl_khronos.org/attachments/20100112/0d7d7fb3/attachment.html>

More information about the public_webgl mailing list