WebGLRenderingContextBase.texSubImage2D() should use a union instead of overloading
[WebKit-https.git] / Source / WebCore / html / canvas / WebGLRenderingContextBase.idl
index 90ce5f2..ec755c9 100644 (file)
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
-typedef unsigned long  GLenum;
+typedef unsigned long GLenum;
 typedef boolean GLboolean;
-typedef unsigned long  GLbitfield;
-typedef byte   GLbyte; /* 'byte' should be a signed 8 bit type. */
-typedef short  GLshort;
-typedef long   GLint;
-typedef long   GLsizei;
-typedef long long  GLintptr;
-typedef long long  GLsizeiptr;
-typedef octet  GLubyte; /* 'octet' should be an unsigned 8 bit type. */
+typedef unsigned long GLbitfield;
+typedef byte GLbyte; /* 'byte' should be a signed 8 bit type. */
+typedef short GLshort;
+typedef long GLint;
+typedef long GLsizei;
+typedef long long GLintptr;
+typedef long long GLsizeiptr;
+typedef octet GLubyte; /* 'octet' should be an unsigned 8 bit type. */
 typedef unsigned short GLushort;
-typedef unsigned long  GLuint;
+typedef unsigned long GLuint;
 typedef unrestricted float GLfloat;
 typedef unrestricted float GLclampf;
+typedef (ArrayBuffer or ArrayBufferView) BufferDataSource;
+
+// FIXME: Should allow ImageBitmap too.
+typedef (ImageData or HTMLImageElement or HTMLCanvasElement or HTMLVideoElement) TexImageSource;
 
 [
-Conditional=WEBGL,
-DoNotCheckConstants,
-JSCustomMarkFunction,
-NoInterfaceObject,
-] interface WebGLRenderingContextBase : CanvasRenderingContext {
+    Conditional=WEBGL,
+    CustomIsReachable,
+    CustomToJSObject,
+    DoNotCheckConstants,
+    JSCustomMarkFunction,
+    NoInterfaceObject,
+] interface WebGLRenderingContextBase {
+
+    // back-reference to the canvas
+    readonly attribute HTMLCanvasElement canvas;
 
     /* ClearBufferMask */
     const GLenum DEPTH_BUFFER_BIT = 0x00000100;
@@ -467,23 +476,21 @@ NoInterfaceObject,
     readonly attribute GLsizei drawingBufferWidth;
     readonly attribute GLsizei drawingBufferHeight;
 
-    [RaisesException] void activeTexture(GLenum texture);
-    [RaisesException] void attachShader(WebGLProgram? program, WebGLShader? shader);
-    [RaisesException] void bindAttribLocation(WebGLProgram? program, GLuint index, DOMString name);
-    [RaisesException] void bindBuffer(GLenum target, WebGLBuffer? buffer);
-    [RaisesException] void bindFramebuffer(GLenum target, WebGLFramebuffer? framebuffer);
-    [RaisesException] void bindRenderbuffer(GLenum target, WebGLRenderbuffer? renderbuffer);
-    [RaisesException] void bindTexture(GLenum target, WebGLTexture? texture);
+    void activeTexture(GLenum texture);
+    void attachShader(WebGLProgram? program, WebGLShader? shader);
+    void bindAttribLocation(WebGLProgram? program, GLuint index, DOMString name);
+    void bindBuffer(GLenum target, WebGLBuffer? buffer);
+    void bindFramebuffer(GLenum target, WebGLFramebuffer? framebuffer);
+    void bindRenderbuffer(GLenum target, WebGLRenderbuffer? renderbuffer);
+    void bindTexture(GLenum target, WebGLTexture? texture);
     void blendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
     void blendEquation(GLenum mode);
     void blendEquationSeparate(GLenum modeRGB, GLenum modeAlpha);
     void blendFunc(GLenum sfactor, GLenum dfactor);
     void blendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
-    [RaisesException] void bufferData(GLenum target, ArrayBuffer data, GLenum usage);
-    [RaisesException] void bufferData(GLenum target, ArrayBufferView data, GLenum usage);
-    [RaisesException] void bufferData(GLenum target, GLsizeiptr size, GLenum usage);
-    [RaisesException] void bufferSubData(GLenum target, GLintptr offset, ArrayBuffer? data);
-    [RaisesException] void bufferSubData(GLenum target, GLintptr offset, ArrayBufferView? data);
+    void bufferData(GLenum target, BufferDataSource? data, GLenum usage);
+    void bufferData(GLenum target, GLsizeiptr size, GLenum usage);
+    void bufferSubData(GLenum target, GLintptr offset, BufferDataSource? data);
 
     GLenum checkFramebufferStatus(GLenum target);
     void clear(GLbitfield mask);
@@ -491,12 +498,12 @@ NoInterfaceObject,
     void clearDepth(GLclampf depth);
     void clearStencil(GLint s);
     void colorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
-    [RaisesException] void compileShader(WebGLShader? shader);
+    void compileShader(WebGLShader? shader);
 
     void compressedTexImage2D(GLenum target, GLint level, GLenum internalformat,
     GLsizei width, GLsizei height, GLint border, ArrayBufferView data);
     void compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
-   GLsizei width, GLsizei height, GLenum format, ArrayBufferView data);
+        GLsizei width, GLsizei height, GLenum format, ArrayBufferView data);
     
     void copyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
     void copyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
@@ -505,7 +512,7 @@ NoInterfaceObject,
     WebGLFramebuffer createFramebuffer();
     WebGLProgram createProgram();
     WebGLRenderbuffer createRenderbuffer();
-    [RaisesException] WebGLShader createShader(GLenum type);
+    WebGLShader createShader(GLenum type);
     WebGLTexture createTexture();
 
     void cullFace(GLenum mode);
@@ -520,25 +527,25 @@ NoInterfaceObject,
     void depthFunc(GLenum func);
     void depthMask(GLboolean flag);
     void depthRange(GLclampf zNear, GLclampf zFar);
-    [RaisesException] void detachShader(WebGLProgram? program, WebGLShader? shader);
+    void detachShader(WebGLProgram? program, WebGLShader? shader);
     void disable(GLenum cap);
-    [RaisesException] void disableVertexAttribArray(GLuint index);
-    [RaisesException] void drawArrays(GLenum mode, GLint first, GLsizei count);
-    [RaisesException] void drawElements(GLenum mode, GLsizei count, GLenum type, GLintptr offset);
+    void disableVertexAttribArray(GLuint index);
+    void drawArrays(GLenum mode, GLint first, GLsizei count);
+    void drawElements(GLenum mode, GLsizei count, GLenum type, GLintptr offset);
 
     void enable(GLenum cap);
-    [RaisesException] void enableVertexAttribArray(GLuint index);
+    void enableVertexAttribArray(GLuint index);
     void finish();
     void flush();
-    [RaisesException] void framebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, WebGLRenderbuffer? renderbuffer);
-    [RaisesException] void framebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, WebGLTexture? texture, GLint level);
+    void framebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, WebGLRenderbuffer? renderbuffer);
+    void framebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, WebGLTexture? texture, GLint level);
     void frontFace(GLenum mode);
     void generateMipmap(GLenum target);
     
-    [RaisesException] WebGLActiveInfo getActiveAttrib(WebGLProgram? program, GLuint index);
-    [RaisesException] WebGLActiveInfo getActiveUniform(WebGLProgram? program, GLuint index);
+    WebGLActiveInfo getActiveAttrib(WebGLProgram? program, GLuint index);
+    WebGLActiveInfo getActiveUniform(WebGLProgram? program, GLuint index);
 
-    [Custom, RaisesException] void getAttachedShaders(WebGLProgram? program);
+    [Custom] void getAttachedShaders(WebGLProgram? program);
 
     GLint getAttribLocation(WebGLProgram? program, DOMString name);
 
@@ -551,28 +558,28 @@ NoInterfaceObject,
     // object getExtension(DOMString name);
     [Custom] any getExtension(DOMString name);
 
-    [Custom, RaisesException] any getFramebufferAttachmentParameter(GLenum target, GLenum attachment, GLenum pname);
-    [Custom, RaisesException] any getParameter(GLenum pname);
-    [Custom, RaisesException] any getProgramParameter(WebGLProgram? program, GLenum pname);
-    [RaisesException] DOMString? getProgramInfoLog(WebGLProgram? program);
-    [Custom, RaisesException] any getRenderbufferParameter(GLenum target, GLenum pname);
-    [Custom, RaisesException] any getShaderParameter(WebGLShader? shader, GLenum pname);
+    [Custom] any getFramebufferAttachmentParameter(GLenum target, GLenum attachment, GLenum pname);
+    [Custom] any getParameter(GLenum pname);
+    [Custom] any getProgramParameter(WebGLProgram? program, GLenum pname);
+    DOMString? getProgramInfoLog(WebGLProgram? program);
+    [Custom] any getRenderbufferParameter(GLenum target, GLenum pname);
+    [Custom] any getShaderParameter(WebGLShader? shader, GLenum pname);
 
-    [RaisesException] DOMString? getShaderInfoLog(WebGLShader? shader);
+    DOMString? getShaderInfoLog(WebGLShader? shader);
 
-    [RaisesException] WebGLShaderPrecisionFormat getShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype);
+    WebGLShaderPrecisionFormat getShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype);
 
-    [RaisesException] DOMString? getShaderSource(WebGLShader? shader);
+    DOMString? getShaderSource(WebGLShader? shader);
 
     [Custom] sequence<DOMString> getSupportedExtensions();
 
-    [Custom, RaisesException] any getTexParameter(GLenum target, GLenum pname);
+    [Custom] any getTexParameter(GLenum target, GLenum pname);
 
-    [Custom, RaisesException] any getUniform(WebGLProgram? program, WebGLUniformLocation? location);
+    [Custom] any getUniform(WebGLProgram? program, WebGLUniformLocation? location);
 
-    [RaisesException] WebGLUniformLocation getUniformLocation(WebGLProgram? program, DOMString name);
+    WebGLUniformLocation getUniformLocation(WebGLProgram? program, DOMString name);
 
-    [Custom, RaisesException] any getVertexAttrib(GLuint index, GLenum pname);
+    [Custom] any getVertexAttrib(GLuint index, GLenum pname);
 
     GLsizeiptr getVertexAttribOffset(GLuint index, GLenum pname);
 
@@ -586,17 +593,17 @@ NoInterfaceObject,
     GLboolean isShader(WebGLShader? shader);
     GLboolean isTexture(WebGLTexture? texture);
     void lineWidth(GLfloat width);
-    [RaisesException] void linkProgram(WebGLProgram? program);
+    void linkProgram(WebGLProgram? program);
     void pixelStorei(GLenum pname, GLint param);
     void polygonOffset(GLfloat factor, GLfloat units);
 
-    [RaisesException] void readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, ArrayBufferView pixels);
+    void readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, ArrayBufferView pixels);
     
     void releaseShaderCompiler();
     void renderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
     void sampleCoverage(GLclampf value, GLboolean invert);
     void scissor(GLint x, GLint y, GLsizei width, GLsizei height);
-    [RaisesException] void shaderSource(WebGLShader? shader, DOMString string);
+    void shaderSource(WebGLShader? shader, DOMString string);
     void stencilFunc(GLenum func, GLint ref, GLuint mask);
     void stencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask);
     void stencilMask(GLuint mask);
@@ -608,56 +615,35 @@ NoInterfaceObject,
     void texParameteri(GLenum target, GLenum pname, GLint param);
 
     // Supported forms:
-    [RaisesException] void texImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
-  GLint border, GLenum format, GLenum type, ArrayBufferView? pixels);
-    [RaisesException] void texImage2D(GLenum target, GLint level, GLenum internalformat,
-  GLenum format, GLenum type, ImageData? pixels);
-    [RaisesException] void texImage2D(GLenum target, GLint level, GLenum internalformat,
-  GLenum format, GLenum type, HTMLImageElement? image);
-    [RaisesException] void texImage2D(GLenum target, GLint level, GLenum internalformat,
-  GLenum format, GLenum type, HTMLCanvasElement? canvas);
-#if defined(ENABLE_VIDEO) && ENABLE_VIDEO
-    [RaisesException] void texImage2D(GLenum target, GLint level, GLenum internalformat,
-  GLenum format, GLenum type, HTMLVideoElement? video);
-#endif
-
-    [RaisesException] void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
- GLsizei width, GLsizei height,
- GLenum format, GLenum type, ArrayBufferView? pixels);
-    [RaisesException] void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
- GLenum format, GLenum type, ImageData? pixels);
-    [RaisesException] void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
- GLenum format, GLenum type, HTMLImageElement? image);
-    [RaisesException] void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
- GLenum format, GLenum type, HTMLCanvasElement? canvas);
-#if defined(ENABLE_VIDEO) && ENABLE_VIDEO
-    [RaisesException] void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
- GLenum format, GLenum type, HTMLVideoElement? video);
-#endif
-
-    [RaisesException] void uniform1f(WebGLUniformLocation? location, GLfloat x);
-    [Custom, RaisesException] void uniform1fv(WebGLUniformLocation? location, Float32Array v);
-    [RaisesException] void uniform1i(WebGLUniformLocation? location, GLint x);
-    [Custom, RaisesException] void uniform1iv(WebGLUniformLocation? location, Int32Array v);
-    [RaisesException] void uniform2f(WebGLUniformLocation? location, GLfloat x, GLfloat y);
-    [Custom, RaisesException] void uniform2fv(WebGLUniformLocation? location, Float32Array v);
-    [RaisesException] void uniform2i(WebGLUniformLocation? location, GLint x, GLint y);
-    [Custom, RaisesException] void uniform2iv(WebGLUniformLocation? location, Int32Array v);
-    [RaisesException] void uniform3f(WebGLUniformLocation? location, GLfloat x, GLfloat y, GLfloat z);
-    [Custom, RaisesException] void uniform3fv(WebGLUniformLocation? location, Float32Array v);
-    [RaisesException] void uniform3i(WebGLUniformLocation? location, GLint x, GLint y, GLint z);
-    [Custom, RaisesException] void uniform3iv(WebGLUniformLocation? location, Int32Array v);
-    [RaisesException] void uniform4f(WebGLUniformLocation? location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
-    [Custom, RaisesException] void uniform4fv(WebGLUniformLocation? location, Float32Array v);
-    [RaisesException] void uniform4i(WebGLUniformLocation? location, GLint x, GLint y, GLint z, GLint w);
-    [Custom, RaisesException] void uniform4iv(WebGLUniformLocation? location, Int32Array v);
-
-    [Custom, RaisesException] void uniformMatrix2fv(WebGLUniformLocation? location, GLboolean transpose, Float32Array array);
-    [Custom, RaisesException] void uniformMatrix3fv(WebGLUniformLocation? location, GLboolean transpose, Float32Array array);
-    [Custom, RaisesException] void uniformMatrix4fv(WebGLUniformLocation? location, GLboolean transpose, Float32Array array);
-
-    [RaisesException] void useProgram(WebGLProgram? program);
-    [RaisesException] void validateProgram(WebGLProgram? program);
+    void texImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, ArrayBufferView? pixels);
+    [MayThrowException] void texImage2D(GLenum target, GLint level, GLenum internalformat, GLenum format, GLenum type, TexImageSource? source);
+
+    void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, ArrayBufferView? pixels);
+    [MayThrowException] void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLenum format, GLenum type, TexImageSource? source);
+
+    void uniform1f(WebGLUniformLocation? location, GLfloat x);
+    [Custom] void uniform1fv(WebGLUniformLocation? location, Float32Array v);
+    void uniform1i(WebGLUniformLocation? location, GLint x);
+    [Custom] void uniform1iv(WebGLUniformLocation? location, Int32Array v);
+    void uniform2f(WebGLUniformLocation? location, GLfloat x, GLfloat y);
+    [Custom] void uniform2fv(WebGLUniformLocation? location, Float32Array v);
+    void uniform2i(WebGLUniformLocation? location, GLint x, GLint y);
+    [Custom] void uniform2iv(WebGLUniformLocation? location, Int32Array v);
+    void uniform3f(WebGLUniformLocation? location, GLfloat x, GLfloat y, GLfloat z);
+    [Custom] void uniform3fv(WebGLUniformLocation? location, Float32Array v);
+    void uniform3i(WebGLUniformLocation? location, GLint x, GLint y, GLint z);
+    [Custom] void uniform3iv(WebGLUniformLocation? location, Int32Array v);
+    void uniform4f(WebGLUniformLocation? location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+    [Custom] void uniform4fv(WebGLUniformLocation? location, Float32Array v);
+    void uniform4i(WebGLUniformLocation? location, GLint x, GLint y, GLint z, GLint w);
+    [Custom] void uniform4iv(WebGLUniformLocation? location, Int32Array v);
+
+    [Custom] void uniformMatrix2fv(WebGLUniformLocation? location, GLboolean transpose, Float32Array array);
+    [Custom] void uniformMatrix3fv(WebGLUniformLocation? location, GLboolean transpose, Float32Array array);
+    [Custom] void uniformMatrix4fv(WebGLUniformLocation? location, GLboolean transpose, Float32Array array);
+
+    void useProgram(WebGLProgram? program);
+    void validateProgram(WebGLProgram? program);
 
     void vertexAttrib1f(GLuint indx, GLfloat x);
     [Custom] void vertexAttrib1fv(GLuint indx, Float32Array values);
@@ -667,7 +653,7 @@ NoInterfaceObject,
     [Custom] void vertexAttrib3fv(GLuint indx, Float32Array values);
     void vertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
     [Custom] void vertexAttrib4fv(GLuint indx, Float32Array values);
-    [RaisesException] void vertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset);
+    void vertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset);
 
     void viewport(GLint x, GLint y, GLsizei width, GLsizei height);
 };