[Public WebGL] Null return values from create*

Glenn Maynard [email protected]
Fri Apr 13 19:10:40 PDT 2012

On Fri, Apr 13, 2012 at 8:30 PM, Kenneth Russell <[email protected]> wrote:

> The set of functions where non-nullability could be enforced is only a
> small percentage of the WebGL API.

There's nothing inconsistent about functions for which null is *always* a
programming error raising TypeError.

Further, there were only
> three functions -- bufferSubData, texImage2D and texSubImage2D --
> where enforcing non-nullable "data" arguments was under consideration.

No, it's much more than that.  The following functions should have
non-nullable arguments:

    void attachShader(WebGLProgram? program, WebGLShader? shader);
    void detachShader(WebGLProgram? program, WebGLShader? shader);
    void bindAttribLocation(WebGLProgram? program, GLuint index, DOMString
    WebGLActiveInfo? getActiveAttrib(WebGLProgram? program, GLuint index);
    WebGLActiveInfo? getActiveUniform(WebGLProgram? program, GLuint index);
    WebGLShader[]? getAttachedShaders(WebGLProgram? program);
    any getProgramParameter(WebGLProgram? program, GLenum pname);
    DOMString? getProgramInfoLog(WebGLProgram? program);
    any getUniform(WebGLProgram? program, WebGLUniformLocation? location);
(first argument)
    WebGLUniformLocation? getUniformLocation(WebGLProgram? program,
DOMString name);
    void linkProgram(WebGLProgram? program);
    void validateProgram(WebGLProgram? program);
    void compileShader(WebGLShader? shader);
    any getShaderParameter(WebGLShader? shader, GLenum pname);
    DOMString? getShaderInfoLog(WebGLShader? shader);
    DOMString? getShaderSource(WebGLShader? shader);
    void shaderSource(WebGLShader? shader, DOMString source);
    GLint getAttribLocation(WebGLProgram? program, DOMString name);
    void bufferData(GLenum target, ArrayBuffer? data, GLenum usage);
    void bufferSubData(GLenum target, GLintptr offset, ArrayBuffer? data);

and the following should have non-nullable return values (I havn't seen any
rationale for why this hasn't been done; it's worthwhile on its own):

    WebGLBuffer? createBuffer();
    WebGLFramebuffer? createFramebuffer();
    WebGLProgram? createProgram();
    WebGLRenderbuffer? createRenderbuffer();
    WebGLShader? createShader(GLenum type);
    WebGLTexture? createTexture();

(The delete* and is* functions should have simply been two member functions
on WebGLObject, "delete()" and "isValid()", but it's too late to fix

Glenn Maynard
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://khronos.org/pipermail/public_webgl_khronos.org/attachments/20120413/0a4d811a/attachment.html>

More information about the public_webgl mailing list