mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
webgl: Implement multiple calls and improve error detection
This commit implements WebGL's: * cullFace * frontFace * enable * disable * depthMask * colorMask * clearDepth * clearStencil * depthFunc * depthRange * hint * lineWidth * pixelStorei * polygonOffset * texParameteri * texParameterf * texImage2D (partially) It inlines a lot of OpenGL calls to keep the file `components/canvas/webgl_paint_task.rs` as small as possible while keeping readability. It also improves error detection on previous calls, and sets node damage on the canvas in the drawing calls. It adds a `TexImage2D` reftest, even though it's not enabled because: * WebGL paints the image when it loads (asynchronously), so the reftest doesn't wait for it and it finishes early * If we change the source for the base64 src of the image it works as expected in non-headless mode, but the test harness locks
This commit is contained in:
parent
af3310f149
commit
6341c77700
12 changed files with 763 additions and 226 deletions
|
@ -24,6 +24,11 @@ typedef unsigned long GLuint;
|
|||
typedef unrestricted float GLfloat;
|
||||
typedef unrestricted float GLclampf;
|
||||
|
||||
typedef (ImageData or
|
||||
HTMLImageElement or
|
||||
HTMLCanvasElement or
|
||||
HTMLVideoElement) TexImageSource;
|
||||
|
||||
|
||||
dictionary WebGLContextAttributes {
|
||||
GLboolean alpha = true;
|
||||
|
@ -495,9 +500,9 @@ interface WebGLRenderingContextBase
|
|||
//[WebGLHandlesContextLoss] GLenum checkFramebufferStatus(GLenum target);
|
||||
void clear(GLbitfield mask);
|
||||
void clearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
|
||||
//void clearDepth(GLclampf depth);
|
||||
//void clearStencil(GLint s);
|
||||
//void colorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
|
||||
void clearDepth(GLclampf depth);
|
||||
void clearStencil(GLint s);
|
||||
void colorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
|
||||
void compileShader(WebGLShader? shader);
|
||||
|
||||
//void compressedTexImage2D(GLenum target, GLint level, GLenum internalformat,
|
||||
|
@ -521,7 +526,7 @@ interface WebGLRenderingContextBase
|
|||
WebGLShader? createShader(GLenum type);
|
||||
WebGLTexture? createTexture();
|
||||
|
||||
//void cullFace(GLenum mode);
|
||||
void cullFace(GLenum mode);
|
||||
|
||||
void deleteBuffer(WebGLBuffer? buffer);
|
||||
void deleteFramebuffer(WebGLFramebuffer? framebuffer);
|
||||
|
@ -530,16 +535,16 @@ interface WebGLRenderingContextBase
|
|||
void deleteShader(WebGLShader? shader);
|
||||
void deleteTexture(WebGLTexture? texture);
|
||||
|
||||
//void depthFunc(GLenum func);
|
||||
//void depthMask(GLboolean flag);
|
||||
//void depthRange(GLclampf zNear, GLclampf zFar);
|
||||
void depthFunc(GLenum func);
|
||||
void depthMask(GLboolean flag);
|
||||
void depthRange(GLclampf zNear, GLclampf zFar);
|
||||
//void detachShader(WebGLProgram? program, WebGLShader? shader);
|
||||
//void disable(GLenum cap);
|
||||
void disable(GLenum cap);
|
||||
//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);
|
||||
void enable(GLenum cap);
|
||||
void enableVertexAttribArray(GLuint index);
|
||||
//void finish();
|
||||
//void flush();
|
||||
|
@ -548,7 +553,7 @@ interface WebGLRenderingContextBase
|
|||
// WebGLRenderbuffer? renderbuffer);
|
||||
//void framebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget,
|
||||
// WebGLTexture? texture, GLint level);
|
||||
//void frontFace(GLenum mode);
|
||||
void frontFace(GLenum mode);
|
||||
|
||||
//void generateMipmap(GLenum target);
|
||||
|
||||
|
@ -584,7 +589,7 @@ interface WebGLRenderingContextBase
|
|||
|
||||
//[WebGLHandlesContextLoss] GLsizeiptr getVertexAttribOffset(GLuint index, GLenum pname);
|
||||
|
||||
//void hint(GLenum target, GLenum mode);
|
||||
void hint(GLenum target, GLenum mode);
|
||||
//[WebGLHandlesContextLoss] GLboolean isBuffer(WebGLBuffer? buffer);
|
||||
//[WebGLHandlesContextLoss] GLboolean isEnabled(GLenum cap);
|
||||
//[WebGLHandlesContextLoss] GLboolean isFramebuffer(WebGLFramebuffer? framebuffer);
|
||||
|
@ -592,10 +597,10 @@ interface WebGLRenderingContextBase
|
|||
//[WebGLHandlesContextLoss] GLboolean isRenderbuffer(WebGLRenderbuffer? renderbuffer);
|
||||
//[WebGLHandlesContextLoss] GLboolean isShader(WebGLShader? shader);
|
||||
//[WebGLHandlesContextLoss] GLboolean isTexture(WebGLTexture? texture);
|
||||
//void lineWidth(GLfloat width);
|
||||
void lineWidth(GLfloat width);
|
||||
void linkProgram(WebGLProgram? program);
|
||||
//void pixelStorei(GLenum pname, GLint param);
|
||||
//void polygonOffset(GLfloat factor, GLfloat units);
|
||||
void pixelStorei(GLenum pname, GLint param);
|
||||
void polygonOffset(GLfloat factor, GLfloat units);
|
||||
|
||||
//void readPixels(GLint x, GLint y, GLsizei width, GLsizei height,
|
||||
// GLenum format, GLenum type, ArrayBufferView? pixels);
|
||||
|
@ -614,18 +619,14 @@ interface WebGLRenderingContextBase
|
|||
//void stencilOp(GLenum fail, GLenum zfail, GLenum zpass);
|
||||
//void stencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
|
||||
|
||||
//typedef (ImageData or
|
||||
// HTMLImageElement or
|
||||
// HTMLCanvasElement or
|
||||
// HTMLVideoElement) TexImageSource;
|
||||
//void texImage2D(GLenum target, GLint level, GLenum internalformat,
|
||||
// GLsizei width, GLsizei height, GLint border, GLenum format,
|
||||
// GLenum type, ArrayBufferView? pixels);
|
||||
//void texImage2D(GLenum target, GLint level, GLenum internalformat,
|
||||
// GLenum format, GLenum type, TexImageSource? source); // May throw DOMException
|
||||
void texImage2D(GLenum target, GLint level, GLenum internalformat,
|
||||
GLenum format, GLenum type, TexImageSource? source); // May throw DOMException
|
||||
|
||||
//void texParameterf(GLenum target, GLenum pname, GLfloat param);
|
||||
//void texParameteri(GLenum target, GLenum pname, GLint param);
|
||||
void texParameterf(GLenum target, GLenum pname, GLfloat param);
|
||||
void texParameteri(GLenum target, GLenum pname, GLint param);
|
||||
|
||||
//void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
|
||||
// GLsizei width, GLsizei height,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue