Â
The steps I meant in front of 5.13 are things that apply to all (or most) entry points. That is, something like:
Before performing the implementation of any method of the
WebGLRenderingContext interface, the following steps must be performed:
1. If
webgl context lost flag is set, and the called method is not in the list of methods with
explicit context lost handling, perform the following steps and terminate this algorithm.
1.1. If the return type of the called method is
any or any nullable type, return null.
1.2. Terminate this algorithm without calling the method implementation.
2. Otherwise, perform the implementation of the called method and return its result.
The following methods have
explicit context lost handling:
- isContextLost, checkFramebufferStatus, getAttribLocation, getVertexAttribOffset, isBuffer, isEnabled, isFramebuffer, isProgram, isRenderbuffer, isShader, isTexture
This is a bit awkward, since I'm not aware of anything like this in other specs to draw from, but it's a start. I'm ignoring the concurrent thread about null return values (if that does lead to API changes, this is probably where they'd go). The synchronous context loss issue would also affect this; this is where checking for a newly lost context would go.
The isBuffer, etc. functions are in the list because their return value depends on the
lost object flag of their argument; they don't care whether the context itself is currently lost or not, and should return false even if
webgl context lost flag is set, not null.
Something this also needs to allow is handling extensions: extension methods (which aren't methods of WebGLRenderingContext) also need to perform these steps. If getExtension had a base interface instead of just returning "object" then it could just say "any method of the
WebGLRenderingContext or any
WebGLExtension interface...". I suppose "any method of the
WebGLRenderingContext interface or any
method of an interface returned by getExtension" might work.
Or perhaps we can rewrite section 2 to mainly comprise your steps, and delete most of Section 5.14. Do you have a preference?
I think the first paragraph of 2.1 can be removed: that's all either defined here, or by the upstream Canvas API itself. (Canvas already defines the "Subsequent calls to getContext ..." behavior, for example, so it doesn't need to be duplicated here.)
I wouldn't try to rewrite the drawing buffer creation parts of section 2 right now, since it'd be biting off too much at once. I'd add eg. "To
create a drawing buffer, the following must be performed" somewhere at the top of section 2. That ties it to step 4 above ("4.
Create a drawing buffer using the settings..."; note the change in italics), defining what that step in the algorithm means.