mirror of
https://github.com/servo/servo.git
synced 2025-06-25 09:34:32 +01:00
Auto merge of #13337 - ofekd:implement-webgl-isEnabled, r=emilio
Implement WebGLRenderingContext::isEnabled Implemented WebGLRenderingContext::isEnabled - Please note the return value of the implementation, not sure about returning `false` on `InvalidEnum`. - the `webgl/conformance-1.0.3/conformance/state/gl-enable-enum-test.html` wpt test is disabled on linux but was enabled on my machine and run to validate expectations. - the `/webgl/conformance-1.0.3/conformance/context/methods.html` test is disabled everywhere. Enabling and running on my machine showed incorrect expectations beyond `isEnabled`. The test was temporarily edited to test just for `isEnabled` and it ran successfully. --- - [X] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors - [X] These changes fix #13040 - [X] There are tests for these changes (please read details above) - [ ] These changes do not require tests because _____ <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/13337) <!-- Reviewable:end -->
This commit is contained in:
commit
f09595e8af
4 changed files with 37 additions and 77 deletions
|
@ -511,6 +511,19 @@ impl WebGLRenderingContext {
|
||||||
.send(CanvasMsg::WebGL(msg))
|
.send(CanvasMsg::WebGL(msg))
|
||||||
.unwrap()
|
.unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14
|
||||||
|
fn validate_feature_enum(&self, cap: u32) -> bool {
|
||||||
|
match cap {
|
||||||
|
constants::BLEND | constants::CULL_FACE | constants::DEPTH_TEST | constants::DITHER |
|
||||||
|
constants::POLYGON_OFFSET_FILL | constants::SAMPLE_ALPHA_TO_COVERAGE | constants::SAMPLE_COVERAGE |
|
||||||
|
constants::SAMPLE_COVERAGE_INVERT | constants::SCISSOR_TEST => true,
|
||||||
|
_ => {
|
||||||
|
self.webgl_error(InvalidEnum);
|
||||||
|
false
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Drop for WebGLRenderingContext {
|
impl Drop for WebGLRenderingContext {
|
||||||
|
@ -1114,27 +1127,19 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
|
||||||
|
|
||||||
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3
|
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3
|
||||||
fn Enable(&self, cap: u32) {
|
fn Enable(&self, cap: u32) {
|
||||||
match cap {
|
if self.validate_feature_enum(cap) {
|
||||||
constants::BLEND | constants::CULL_FACE | constants::DEPTH_TEST | constants::DITHER |
|
self.ipc_renderer
|
||||||
constants::POLYGON_OFFSET_FILL | constants::SAMPLE_ALPHA_TO_COVERAGE | constants::SAMPLE_COVERAGE |
|
.send(CanvasMsg::WebGL(WebGLCommand::Enable(cap)))
|
||||||
constants::SAMPLE_COVERAGE_INVERT | constants::SCISSOR_TEST =>
|
.unwrap();
|
||||||
self.ipc_renderer
|
|
||||||
.send(CanvasMsg::WebGL(WebGLCommand::Enable(cap)))
|
|
||||||
.unwrap(),
|
|
||||||
_ => self.webgl_error(InvalidEnum),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3
|
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3
|
||||||
fn Disable(&self, cap: u32) {
|
fn Disable(&self, cap: u32) {
|
||||||
match cap {
|
if self.validate_feature_enum(cap) {
|
||||||
constants::BLEND | constants::CULL_FACE | constants::DEPTH_TEST | constants::DITHER |
|
self.ipc_renderer
|
||||||
constants::POLYGON_OFFSET_FILL | constants::SAMPLE_ALPHA_TO_COVERAGE | constants::SAMPLE_COVERAGE |
|
.send(CanvasMsg::WebGL(WebGLCommand::Disable(cap)))
|
||||||
constants::SAMPLE_COVERAGE_INVERT | constants::SCISSOR_TEST =>
|
.unwrap()
|
||||||
self.ipc_renderer
|
|
||||||
.send(CanvasMsg::WebGL(WebGLCommand::Disable(cap)))
|
|
||||||
.unwrap(),
|
|
||||||
_ => self.webgl_error(InvalidEnum),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1455,6 +1460,20 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
|
||||||
buffer.map_or(false, |buf| buf.target().is_some() && !buf.is_deleted())
|
buffer.map_or(false, |buf| buf.target().is_some() && !buf.is_deleted())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: We could write this without IPC, recording the calls to `enable` and `disable`.
|
||||||
|
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.3
|
||||||
|
fn IsEnabled(&self, cap: u32) -> bool {
|
||||||
|
if self.validate_feature_enum(cap) {
|
||||||
|
let (sender, receiver) = ipc::channel().unwrap();
|
||||||
|
self.ipc_renderer
|
||||||
|
.send(CanvasMsg::WebGL(WebGLCommand::IsEnabled(cap, sender)))
|
||||||
|
.unwrap();
|
||||||
|
return receiver.recv().unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.6
|
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.6
|
||||||
fn IsFramebuffer(&self, frame_buffer: Option<&WebGLFramebuffer>) -> bool {
|
fn IsFramebuffer(&self, frame_buffer: Option<&WebGLFramebuffer>) -> bool {
|
||||||
frame_buffer.map_or(false, |buf| buf.target().is_some() && !buf.is_deleted())
|
frame_buffer.map_or(false, |buf| buf.target().is_some() && !buf.is_deleted())
|
||||||
|
|
|
@ -603,7 +603,7 @@ interface WebGLRenderingContextBase
|
||||||
|
|
||||||
void hint(GLenum target, GLenum mode);
|
void hint(GLenum target, GLenum mode);
|
||||||
[WebGLHandlesContextLoss] GLboolean isBuffer(WebGLBuffer? buffer);
|
[WebGLHandlesContextLoss] GLboolean isBuffer(WebGLBuffer? buffer);
|
||||||
//[WebGLHandlesContextLoss] GLboolean isEnabled(GLenum cap);
|
[WebGLHandlesContextLoss] GLboolean isEnabled(GLenum cap);
|
||||||
[WebGLHandlesContextLoss] GLboolean isFramebuffer(WebGLFramebuffer? framebuffer);
|
[WebGLHandlesContextLoss] GLboolean isFramebuffer(WebGLFramebuffer? framebuffer);
|
||||||
[WebGLHandlesContextLoss] GLboolean isProgram(WebGLProgram? program);
|
[WebGLHandlesContextLoss] GLboolean isProgram(WebGLProgram? program);
|
||||||
[WebGLHandlesContextLoss] GLboolean isRenderbuffer(WebGLRenderbuffer? renderbuffer);
|
[WebGLHandlesContextLoss] GLboolean isRenderbuffer(WebGLRenderbuffer? renderbuffer);
|
||||||
|
|
|
@ -71,9 +71,6 @@
|
||||||
[WebGL test #22: Property either does not exist or is not a function: isContextLost]
|
[WebGL test #22: Property either does not exist or is not a function: isContextLost]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[WebGL test #23: Property either does not exist or is not a function: isEnabled]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[WebGL test #24: Property either does not exist or is not a function: isFramebuffer]
|
[WebGL test #24: Property either does not exist or is not a function: isFramebuffer]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -215,9 +212,6 @@
|
||||||
[WebGL test #18: Property either does not exist or is not a function: isContextLost]
|
[WebGL test #18: Property either does not exist or is not a function: isContextLost]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[WebGL test #19: Property either does not exist or is not a function: isEnabled]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[WebGL test #20: Property either does not exist or is not a function: isFramebuffer]
|
[WebGL test #20: Property either does not exist or is not a function: isFramebuffer]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -307,4 +301,3 @@
|
||||||
|
|
||||||
[WebGL test #49: Property either does not exist or is not a function: validateProgram]
|
[WebGL test #49: Property either does not exist or is not a function: validateProgram]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,62 +1,10 @@
|
||||||
[gl-enable-enum-test.html]
|
[gl-enable-enum-test.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
[WebGL test #59: gl.isEnabled(gl.BLEND) should be true. Threw exception TypeError: gl.isEnabled is not a function]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[WebGL test #60: gl.isEnabled(gl.BLEND) should be false. Threw exception TypeError: gl.isEnabled is not a function]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[WebGL test #62: gl.isEnabled(gl.CULL_FACE) should be true. Threw exception TypeError: gl.isEnabled is not a function]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[WebGL test #63: gl.isEnabled(gl.CULL_FACE) should be false. Threw exception TypeError: gl.isEnabled is not a function]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[WebGL test #65: gl.isEnabled(gl.DEPTH_TEST) should be true. Threw exception TypeError: gl.isEnabled is not a function]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[WebGL test #66: gl.isEnabled(gl.DEPTH_TEST) should be false. Threw exception TypeError: gl.isEnabled is not a function]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[WebGL test #68: gl.isEnabled(gl.DITHER) should be true. Threw exception TypeError: gl.isEnabled is not a function]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[WebGL test #69: gl.isEnabled(gl.DITHER) should be false. Threw exception TypeError: gl.isEnabled is not a function]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[WebGL test #71: gl.isEnabled(gl.POLYGON_OFFSET_FILL) should be true. Threw exception TypeError: gl.isEnabled is not a function]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[WebGL test #72: gl.isEnabled(gl.POLYGON_OFFSET_FILL) should be false. Threw exception TypeError: gl.isEnabled is not a function]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[WebGL test #74: gl.isEnabled(gl.SAMPLE_ALPHA_TO_COVERAGE) should be true. Threw exception TypeError: gl.isEnabled is not a function]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[WebGL test #75: gl.isEnabled(gl.SAMPLE_ALPHA_TO_COVERAGE) should be false. Threw exception TypeError: gl.isEnabled is not a function]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[WebGL test #77: gl.isEnabled(gl.SAMPLE_COVERAGE) should be true. Threw exception TypeError: gl.isEnabled is not a function]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[WebGL test #78: gl.isEnabled(gl.SAMPLE_COVERAGE) should be false. Threw exception TypeError: gl.isEnabled is not a function]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[WebGL test #80: gl.isEnabled(gl.SCISSOR_TEST) should be true. Threw exception TypeError: gl.isEnabled is not a function]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[WebGL test #81: gl.isEnabled(gl.SCISSOR_TEST) should be false. Threw exception TypeError: gl.isEnabled is not a function]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[WebGL test #82: getError expected: NO_ERROR. Was INVALID_ENUM : gl.enable must succeed when passed gl.STENCIL_TEST]
|
[WebGL test #82: getError expected: NO_ERROR. Was INVALID_ENUM : gl.enable must succeed when passed gl.STENCIL_TEST]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[WebGL test #83: gl.isEnabled(gl.STENCIL_TEST) should be true. Threw exception TypeError: gl.isEnabled is not a function]
|
[WebGL test #83: gl.isEnabled(gl.STENCIL_TEST) should be true. Was false.]
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[WebGL test #84: gl.isEnabled(gl.STENCIL_TEST) should be false. Threw exception TypeError: gl.isEnabled is not a function]
|
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[WebGL test #85: getError expected: NO_ERROR. Was INVALID_ENUM : there should be no errors]
|
[WebGL test #85: getError expected: NO_ERROR. Was INVALID_ENUM : there should be no errors]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue