[Public WebGL] "context creation parameters"

Glenn Maynard [email protected]
Wed Apr 4 17:51:32 PDT 2012


I recall that it was meant to be possible for a context to be lost, then on
context restoration, to end up with different parameters.  (For example, if
the browser window is moved to a different window that's running on a
different graphics card, or if the capabilities change when a tablet is
docked.)  I think we ended up with a bug related to this in context
creation.

The "context creation parameters" are used to restore the context (5.15.3
step 3), but the context creation parameters are also *set* to the results
of "create a drawing buffer"; that's what "The attributes actually used to
create the context..." implies.  This means that, each time the context is
lost and restored, the new drawing buffer is created with parameters based
on the previous creation.  You end up with f = func(f); f = func(f); f =
func(f); in other words, the creation parameters can constantly drift, as
each new set of parameters changes the result.

I think what's actually intended is to create a drawing buffer using the
*original* WebGLContextAttributes, so we always try to get as close to the
original request as possible, not to the previous result.

To fix this, I'd recommend:

1: In 2.1, below "context creation parameters", add a similar definition:
"Each WebGLRenderingContext has *actual context parameters*, set each time
the drawing buffer is created, which is a WebGLContextAttributes object."
(The initial value doesn't matter; it should be impossible to access this
definition before the drawing buffer is created.)
2: In 2.2 "The Drawing Buffer", replace "The attributes actually used..."
with: "The *actual context parameters* are set to the attributes of the
created drawing buffer."  (Mentioning getContextAttributes here becomes
redundant, so should be removed, but it could be mentioned in the note
below.)
3: In 5.14.2 getContextAttributes, replace "context creation parameters"
with "actual context parameters".

This also fixes a minor error: it says "used to create the context", when
it should have said "used to create the drawing buffer".  It also makes
setting the results of drawing buffer creation clear; "The attributes
actually used ..." was a little ambiguous (it could be interpreted to mean
"the original parameters to getContext" instead of the resulting
configuration).

There might also be value in giving a way to access the context creation
parameters, eg. a copy of the original parameters passed to getContext; for
example, "getOriginalContextAttributes".  It's not critical, since you can
always store it yourself, but possibly useful.

(As I mentioned previously, I'm still trying to think of a phrasing of "...
parameters" that avoids being plural, since both of these are really a
single object.)

-- 
Glenn Maynard
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://khronos.org/pipermail/public_webgl_khronos.org/attachments/20120404/2ae36ab8/attachment.html>


More information about the public_webgl mailing list