Make some WebGL parameters non-optional (fixes #8753)

Those parameters aren't optional in the current spec.

The test element-array-buffer-delete-recreate.html now fails because we don't
actually implement gl.getParameter(gl.CURRENT_PROGRAM).
This commit is contained in:
Anthony Ramine 2018-03-21 12:23:42 +01:00
parent 3229c62282
commit f532e79dc1
6 changed files with 133 additions and 171 deletions

View file

@ -9,7 +9,7 @@ use dom::bindings::codegen::Bindings::WebGL2RenderingContextBinding::WebGL2Rende
use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::WebGLContextAttributes; use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::WebGLContextAttributes;
use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::WebGLRenderingContextMethods; use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::WebGLRenderingContextMethods;
use dom::bindings::codegen::UnionTypes::ImageDataOrHTMLImageElementOrHTMLCanvasElementOrHTMLVideoElement; use dom::bindings::codegen::UnionTypes::ImageDataOrHTMLImageElementOrHTMLCanvasElementOrHTMLVideoElement;
use dom::bindings::error::Fallible; use dom::bindings::error::{ErrorResult, Fallible};
use dom::bindings::reflector::{reflect_dom_object, Reflector}; use dom::bindings::reflector::{reflect_dom_object, Reflector};
use dom::bindings::root::{Dom, DomRoot, LayoutDom}; use dom::bindings::root::{Dom, DomRoot, LayoutDom};
use dom::bindings::str::DOMString; use dom::bindings::str::DOMString;
@ -329,7 +329,7 @@ impl WebGL2RenderingContextMethods for WebGL2RenderingContext {
} }
/// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9 /// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9
fn CompileShader(&self, shader: Option<&WebGLShader>) { fn CompileShader(&self, shader: &WebGLShader) {
self.base.CompileShader(shader) self.base.CompileShader(shader)
} }
@ -414,39 +414,39 @@ impl WebGL2RenderingContextMethods for WebGL2RenderingContext {
} }
/// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 /// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10
fn GetActiveUniform(&self, program: Option<&WebGLProgram>, index: u32) -> Option<DomRoot<WebGLActiveInfo>> { fn GetActiveUniform(&self, program: &WebGLProgram, index: u32) -> Option<DomRoot<WebGLActiveInfo>> {
self.base.GetActiveUniform(program, index) self.base.GetActiveUniform(program, index)
} }
/// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 /// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10
fn GetActiveAttrib(&self, program: Option<&WebGLProgram>, index: u32) -> Option<DomRoot<WebGLActiveInfo>> { fn GetActiveAttrib(&self, program: &WebGLProgram, index: u32) -> Option<DomRoot<WebGLActiveInfo>> {
self.base.GetActiveAttrib(program, index) self.base.GetActiveAttrib(program, index)
} }
/// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 /// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10
fn GetAttribLocation(&self, program: Option<&WebGLProgram>, name: DOMString) -> i32 { fn GetAttribLocation(&self, program: &WebGLProgram, name: DOMString) -> i32 {
self.base.GetAttribLocation(program, name) self.base.GetAttribLocation(program, name)
} }
/// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9 /// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9
fn GetProgramInfoLog(&self, program: Option<&WebGLProgram>) -> Option<DOMString> { fn GetProgramInfoLog(&self, program: &WebGLProgram) -> Option<DOMString> {
self.base.GetProgramInfoLog(program) self.base.GetProgramInfoLog(program)
} }
#[allow(unsafe_code)] #[allow(unsafe_code)]
/// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9 /// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9
unsafe fn GetProgramParameter(&self, cx: *mut JSContext, program: Option<&WebGLProgram>, param_id: u32) -> JSVal { unsafe fn GetProgramParameter(&self, cx: *mut JSContext, program: &WebGLProgram, param_id: u32) -> JSVal {
self.base.GetProgramParameter(cx, program, param_id) self.base.GetProgramParameter(cx, program, param_id)
} }
/// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9 /// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9
fn GetShaderInfoLog(&self, shader: Option<&WebGLShader>) -> Option<DOMString> { fn GetShaderInfoLog(&self, shader: &WebGLShader) -> Option<DOMString> {
self.base.GetShaderInfoLog(shader) self.base.GetShaderInfoLog(shader)
} }
#[allow(unsafe_code)] #[allow(unsafe_code)]
/// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9 /// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9
unsafe fn GetShaderParameter(&self, cx: *mut JSContext, shader: Option<&WebGLShader>, param_id: u32) -> JSVal { unsafe fn GetShaderParameter(&self, cx: *mut JSContext, shader: &WebGLShader, param_id: u32) -> JSVal {
self.base.GetShaderParameter(cx, shader, param_id) self.base.GetShaderParameter(cx, shader, param_id)
} }
@ -459,9 +459,11 @@ impl WebGL2RenderingContextMethods for WebGL2RenderingContext {
} }
/// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 /// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10
fn GetUniformLocation(&self, fn GetUniformLocation(
program: Option<&WebGLProgram>, &self,
name: DOMString) -> Option<DomRoot<WebGLUniformLocation>> { program: &WebGLProgram,
name: DOMString,
) -> Option<DomRoot<WebGLUniformLocation>> {
self.base.GetUniformLocation(program, name) self.base.GetUniformLocation(program, name)
} }
@ -585,12 +587,12 @@ impl WebGL2RenderingContextMethods for WebGL2RenderingContext {
} }
/// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9 /// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9
fn ShaderSource(&self, shader: Option<&WebGLShader>, source: DOMString) { fn ShaderSource(&self, shader: &WebGLShader, source: DOMString) {
self.base.ShaderSource(shader, source) self.base.ShaderSource(shader, source)
} }
/// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9 /// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9
fn GetShaderSource(&self, shader: Option<&WebGLShader>) -> Option<DOMString> { fn GetShaderSource(&self, shader: &WebGLShader) -> Option<DOMString> {
self.base.GetShaderSource(shader) self.base.GetShaderSource(shader)
} }
@ -759,7 +761,7 @@ impl WebGL2RenderingContextMethods for WebGL2RenderingContext {
} }
/// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9 /// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9
fn ValidateProgram(&self, program: Option<&WebGLProgram>) { fn ValidateProgram(&self, program: &WebGLProgram) {
self.base.ValidateProgram(program) self.base.ValidateProgram(program)
} }
@ -835,13 +837,15 @@ impl WebGL2RenderingContextMethods for WebGL2RenderingContext {
} }
/// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.8 /// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.8
fn TexImage2D_(&self, fn TexImage2D_(
&self,
target: u32, target: u32,
level: i32, level: i32,
internal_format: u32, internal_format: u32,
format: u32, format: u32,
data_type: u32, data_type: u32,
source: Option<ImageDataOrHTMLImageElementOrHTMLCanvasElementOrHTMLVideoElement>) -> Fallible<()> { source: ImageDataOrHTMLImageElementOrHTMLCanvasElementOrHTMLVideoElement,
) -> ErrorResult {
self.base.TexImage2D_(target, level, internal_format, format, data_type, source) self.base.TexImage2D_(target, level, internal_format, format, data_type, source)
} }
@ -875,15 +879,16 @@ impl WebGL2RenderingContextMethods for WebGL2RenderingContext {
} }
/// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.8 /// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.8
fn TexSubImage2D_(&self, fn TexSubImage2D_(
&self,
target: u32, target: u32,
level: i32, level: i32,
xoffset: i32, xoffset: i32,
yoffset: i32, yoffset: i32,
format: u32, format: u32,
data_type: u32, data_type: u32,
source: Option<ImageDataOrHTMLImageElementOrHTMLCanvasElementOrHTMLVideoElement>) source: ImageDataOrHTMLImageElementOrHTMLCanvasElementOrHTMLVideoElement,
-> Fallible<()> { ) -> ErrorResult {
self.base.TexSubImage2D_(target, level, xoffset, yoffset, format, data_type, source) self.base.TexSubImage2D_(target, level, xoffset, yoffset, format, data_type, source)
} }

View file

@ -16,7 +16,7 @@ use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::WebGLRenderi
use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::WebGLRenderingContextMethods; use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::WebGLRenderingContextMethods;
use dom::bindings::codegen::UnionTypes::ImageDataOrHTMLImageElementOrHTMLCanvasElementOrHTMLVideoElement; use dom::bindings::codegen::UnionTypes::ImageDataOrHTMLImageElementOrHTMLCanvasElementOrHTMLVideoElement;
use dom::bindings::conversions::{ConversionResult, FromJSValConvertible, ToJSValConvertible}; use dom::bindings::conversions::{ConversionResult, FromJSValConvertible, ToJSValConvertible};
use dom::bindings::error::{Error, Fallible}; use dom::bindings::error::{Error, ErrorResult, Fallible};
use dom::bindings::inheritance::Castable; use dom::bindings::inheritance::Castable;
use dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object}; use dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object};
use dom::bindings::root::{Dom, DomRoot, LayoutDom, MutNullableDom}; use dom::bindings::root::{Dom, DomRoot, LayoutDom, MutNullableDom};
@ -763,14 +763,10 @@ impl WebGLRenderingContext {
} }
} }
fn get_image_pixels(&self, fn get_image_pixels(
source: Option<ImageDataOrHTMLImageElementOrHTMLCanvasElementOrHTMLVideoElement>) &self,
-> ImagePixelResult { source: ImageDataOrHTMLImageElementOrHTMLCanvasElementOrHTMLVideoElement,
let source = match source { ) -> ImagePixelResult {
Some(s) => s,
None => return Err(()),
};
// NOTE: Getting the pixels probably can be short-circuited if some // NOTE: Getting the pixels probably can be short-circuited if some
// parameter is invalid. // parameter is invalid.
// //
@ -1965,11 +1961,9 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
} }
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9 // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9
fn CompileShader(&self, shader: Option<&WebGLShader>) { fn CompileShader(&self, shader: &WebGLShader) {
if let Some(shader) = shader {
shader.compile(self.webgl_version, self.glsl_version, &self.extension_manager) shader.compile(self.webgl_version, self.glsl_version, &self.extension_manager)
} }
}
// TODO(emilio): Probably in the future we should keep track of the // TODO(emilio): Probably in the future we should keep track of the
// generated objects, either here or in the webgl thread // generated objects, either here or in the webgl thread
@ -2244,23 +2238,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
} }
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10
fn GetActiveUniform(&self, program: Option<&WebGLProgram>, index: u32) -> Option<DomRoot<WebGLActiveInfo>> { fn GetActiveUniform(&self, program: &WebGLProgram, index: u32) -> Option<DomRoot<WebGLActiveInfo>> {
let program = match program {
Some(program) => program,
None => {
// Reasons to generate InvalidValue error
// From the GLES 2.0 spec
//
// "INVALID_VALUE is generated if index is greater than or equal
// to the number of active uniform variables in program"
//
// A null program has no uniforms so any index is always greater than the active uniforms
// WebGl conformance expects error with null programs. Check tests in get-active-test.html
self.webgl_error(InvalidValue);
return None;
}
};
match program.get_active_uniform(index) { match program.get_active_uniform(index) {
Ok(ret) => Some(ret), Ok(ret) => Some(ret),
Err(e) => { Err(e) => {
@ -2271,23 +2249,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
} }
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10
fn GetActiveAttrib(&self, program: Option<&WebGLProgram>, index: u32) -> Option<DomRoot<WebGLActiveInfo>> { fn GetActiveAttrib(&self, program: &WebGLProgram, index: u32) -> Option<DomRoot<WebGLActiveInfo>> {
let program = match program {
Some(program) => program,
None => {
// Reasons to generate InvalidValue error
// From the GLES 2.0 spec
//
// "INVALID_VALUE is generated if index is greater than or equal
// to the number of active attribute variables in program"
//
// A null program has no attributes so any index is always greater than the active uniforms
// WebGl conformance expects error with null programs. Check tests in get-active-test.html
self.webgl_error(InvalidValue);
return None;
}
};
match program.get_active_attrib(index) { match program.get_active_attrib(index) {
Ok(ret) => Some(ret), Ok(ret) => Some(ret),
Err(e) => { Err(e) => {
@ -2298,12 +2260,8 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
} }
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10
fn GetAttribLocation(&self, program: Option<&WebGLProgram>, name: DOMString) -> i32 { fn GetAttribLocation(&self, program: &WebGLProgram, name: DOMString) -> i32 {
if let Some(program) = program {
handle_potential_webgl_error!(self, program.get_attrib_location(name), None).unwrap_or(-1) handle_potential_webgl_error!(self, program.get_attrib_location(name), None).unwrap_or(-1)
} else {
-1
}
} }
#[allow(unsafe_code)] #[allow(unsafe_code)]
@ -2394,8 +2352,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
} }
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9 // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9
fn GetProgramInfoLog(&self, program: Option<&WebGLProgram>) -> Option<DOMString> { fn GetProgramInfoLog(&self, program: &WebGLProgram) -> Option<DOMString> {
if let Some(program) = program {
match program.get_info_log() { match program.get_info_log() {
Ok(value) => Some(DOMString::from(value)), Ok(value) => Some(DOMString::from(value)),
Err(e) => { Err(e) => {
@ -2403,16 +2360,11 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
None None
} }
} }
} else {
self.webgl_error(WebGLError::InvalidValue);
None
}
} }
#[allow(unsafe_code)] #[allow(unsafe_code)]
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9 // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9
unsafe fn GetProgramParameter(&self, _: *mut JSContext, program: Option<&WebGLProgram>, param_id: u32) -> JSVal { unsafe fn GetProgramParameter(&self, _: *mut JSContext, program: &WebGLProgram, param_id: u32) -> JSVal {
if let Some(program) = program {
match handle_potential_webgl_error!(self, program.parameter(param_id), WebGLParameter::Invalid) { match handle_potential_webgl_error!(self, program.parameter(param_id), WebGLParameter::Invalid) {
WebGLParameter::Int(val) => Int32Value(val), WebGLParameter::Int(val) => Int32Value(val),
WebGLParameter::Bool(val) => BooleanValue(val), WebGLParameter::Bool(val) => BooleanValue(val),
@ -2423,20 +2375,16 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
} }
WebGLParameter::Invalid => NullValue(), WebGLParameter::Invalid => NullValue(),
} }
} else {
NullValue()
}
} }
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9 // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9
fn GetShaderInfoLog(&self, shader: Option<&WebGLShader>) -> Option<DOMString> { fn GetShaderInfoLog(&self, shader: &WebGLShader) -> Option<DOMString> {
shader.and_then(|s| s.info_log()).map(DOMString::from) shader.info_log().map(DOMString::from)
} }
#[allow(unsafe_code)] #[allow(unsafe_code)]
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9 // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9
unsafe fn GetShaderParameter(&self, _: *mut JSContext, shader: Option<&WebGLShader>, param_id: u32) -> JSVal { unsafe fn GetShaderParameter(&self, _: *mut JSContext, shader: &WebGLShader, param_id: u32) -> JSVal {
if let Some(shader) = shader {
match handle_potential_webgl_error!(self, shader.parameter(param_id), WebGLParameter::Invalid) { match handle_potential_webgl_error!(self, shader.parameter(param_id), WebGLParameter::Invalid) {
WebGLParameter::Int(val) => Int32Value(val), WebGLParameter::Int(val) => Int32Value(val),
WebGLParameter::Bool(val) => BooleanValue(val), WebGLParameter::Bool(val) => BooleanValue(val),
@ -2447,9 +2395,6 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
} }
WebGLParameter::Invalid => NullValue(), WebGLParameter::Invalid => NullValue(),
} }
} else {
NullValue()
}
} }
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9 // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9
@ -2481,12 +2426,13 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
} }
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10
fn GetUniformLocation(&self, fn GetUniformLocation(
program: Option<&WebGLProgram>, &self,
name: DOMString) -> Option<DomRoot<WebGLUniformLocation>> { program: &WebGLProgram,
program.and_then(|p| { name: DOMString,
handle_potential_webgl_error!(self, p.get_uniform_location(name), None) ) -> Option<DomRoot<WebGLUniformLocation>> {
.map(|location| WebGLUniformLocation::new(self.global().as_window(), location, p.id())) handle_potential_webgl_error!(self, program.get_uniform_location(name), None).map(|location| {
WebGLUniformLocation::new(self.global().as_window(), location, program.id())
}) })
} }
@ -2863,15 +2809,13 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
} }
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9 // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9
fn ShaderSource(&self, shader: Option<&WebGLShader>, source: DOMString) { fn ShaderSource(&self, shader: &WebGLShader, source: DOMString) {
if let Some(shader) = shader {
shader.set_source(source) shader.set_source(source)
} }
}
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9 // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9
fn GetShaderSource(&self, shader: Option<&WebGLShader>) -> Option<DOMString> { fn GetShaderSource(&self, shader: &WebGLShader) -> Option<DOMString> {
shader.and_then(|s| s.source()) shader.source()
} }
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10
@ -3162,13 +3106,11 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
} }
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9 // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.9
fn ValidateProgram(&self, program: Option<&WebGLProgram>) { fn ValidateProgram(&self, program: &WebGLProgram) {
if let Some(program) = program {
if let Err(e) = program.validate() { if let Err(e) = program.validate() {
self.webgl_error(e); self.webgl_error(e);
} }
} }
}
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10 // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.10
fn VertexAttrib1f(&self, indx: u32, x: f32) { fn VertexAttrib1f(&self, indx: u32, x: f32) {
@ -3376,13 +3318,15 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
} }
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.8 // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.8
fn TexImage2D_(&self, fn TexImage2D_(
&self,
target: u32, target: u32,
level: i32, level: i32,
internal_format: u32, internal_format: u32,
format: u32, format: u32,
data_type: u32, data_type: u32,
source: Option<ImageDataOrHTMLImageElementOrHTMLCanvasElementOrHTMLVideoElement>) -> Fallible<()> { source: ImageDataOrHTMLImageElementOrHTMLCanvasElementOrHTMLVideoElement,
) -> ErrorResult {
if !self.extension_manager.is_tex_type_enabled(data_type) { if !self.extension_manager.is_tex_type_enabled(data_type) {
return Ok(self.webgl_error(InvalidEnum)); return Ok(self.webgl_error(InvalidEnum));
} }
@ -3537,15 +3481,16 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
} }
// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.8 // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.8
fn TexSubImage2D_(&self, fn TexSubImage2D_(
&self,
target: u32, target: u32,
level: i32, level: i32,
xoffset: i32, xoffset: i32,
yoffset: i32, yoffset: i32,
format: u32, format: u32,
data_type: u32, data_type: u32,
source: Option<ImageDataOrHTMLImageElementOrHTMLCanvasElementOrHTMLVideoElement>) source: ImageDataOrHTMLImageElementOrHTMLCanvasElementOrHTMLVideoElement,
-> Fallible<()> { ) -> ErrorResult {
let (pixels, size, premultiplied) = match self.get_image_pixels(source) { let (pixels, size, premultiplied) = match self.get_image_pixels(source) {
Ok((pixels, size, premultiplied)) => (pixels, size, premultiplied), Ok((pixels, size, premultiplied)) => (pixels, size, premultiplied),
Err(_) => return Ok(()), Err(_) => return Ok(()),

View file

@ -510,7 +510,7 @@ interface WebGLRenderingContextBase
void clearDepth(GLclampf depth); void clearDepth(GLclampf depth);
void clearStencil(GLint s); void clearStencil(GLint s);
void colorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); void colorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
void compileShader(WebGLShader? shader); void compileShader(WebGLShader shader);
// FIXME(simartin) The Code generator doesn't handle ArrayBufferView so we're // FIXME(simartin) The Code generator doesn't handle ArrayBufferView so we're
// using 'object' in the meantime, and marking the function as Throws to // using 'object' in the meantime, and marking the function as Throws to
@ -578,11 +578,11 @@ interface WebGLRenderingContextBase
void generateMipmap(GLenum target); void generateMipmap(GLenum target);
WebGLActiveInfo? getActiveAttrib(WebGLProgram? program, GLuint index); WebGLActiveInfo? getActiveAttrib(WebGLProgram program, GLuint index);
WebGLActiveInfo? getActiveUniform(WebGLProgram? program, GLuint index); WebGLActiveInfo? getActiveUniform(WebGLProgram program, GLuint index);
//sequence<WebGLShader>? getAttachedShaders(WebGLProgram? program); //sequence<WebGLShader>? getAttachedShaders(WebGLProgram? program);
[WebGLHandlesContextLoss] GLint getAttribLocation(WebGLProgram? program, DOMString name); [WebGLHandlesContextLoss] GLint getAttribLocation(WebGLProgram program, DOMString name);
any getBufferParameter(GLenum target, GLenum pname); any getBufferParameter(GLenum target, GLenum pname);
any getParameter(GLenum pname); any getParameter(GLenum pname);
@ -591,20 +591,20 @@ interface WebGLRenderingContextBase
any getFramebufferAttachmentParameter(GLenum target, GLenum attachment, any getFramebufferAttachmentParameter(GLenum target, GLenum attachment,
GLenum pname); GLenum pname);
any getProgramParameter(WebGLProgram? program, GLenum pname); any getProgramParameter(WebGLProgram program, GLenum pname);
DOMString? getProgramInfoLog(WebGLProgram? program); DOMString? getProgramInfoLog(WebGLProgram program);
//any getRenderbufferParameter(GLenum target, GLenum pname); //any getRenderbufferParameter(GLenum target, GLenum pname);
any getShaderParameter(WebGLShader? shader, GLenum pname); any getShaderParameter(WebGLShader shader, GLenum pname);
WebGLShaderPrecisionFormat? getShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype); WebGLShaderPrecisionFormat? getShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype);
DOMString? getShaderInfoLog(WebGLShader? shader); DOMString? getShaderInfoLog(WebGLShader shader);
DOMString? getShaderSource(WebGLShader? shader); DOMString? getShaderSource(WebGLShader shader);
any getTexParameter(GLenum target, GLenum pname); any getTexParameter(GLenum target, GLenum pname);
//any getUniform(WebGLProgram? program, WebGLUniformLocation? location); //any getUniform(WebGLProgram program, WebGLUniformLocation location);
WebGLUniformLocation? getUniformLocation(WebGLProgram? program, DOMString name); WebGLUniformLocation? getUniformLocation(WebGLProgram program, DOMString name);
any getVertexAttrib(GLuint index, GLenum pname); any getVertexAttrib(GLuint index, GLenum pname);
@ -634,7 +634,7 @@ interface WebGLRenderingContextBase
void sampleCoverage(GLclampf value, GLboolean invert); void sampleCoverage(GLclampf value, GLboolean invert);
void scissor(GLint x, GLint y, GLsizei width, GLsizei height); void scissor(GLint x, GLint y, GLsizei width, GLsizei height);
void shaderSource(WebGLShader? shader, DOMString source); void shaderSource(WebGLShader shader, DOMString source);
void stencilFunc(GLenum func, GLint ref, GLuint mask); void stencilFunc(GLenum func, GLint ref, GLuint mask);
void stencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask); void stencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask);
@ -653,7 +653,7 @@ interface WebGLRenderingContextBase
GLenum type, object? data); GLenum type, object? data);
[Throws] [Throws]
void texImage2D(GLenum target, GLint level, GLenum internalformat, void texImage2D(GLenum target, GLint level, GLenum internalformat,
GLenum format, GLenum type, TexImageSource? source); // May throw DOMException GLenum format, GLenum type, TexImageSource source); // May throw DOMException
[Throws, Pref="dom.webgl.dom_to_texture.enabled"] [Throws, Pref="dom.webgl.dom_to_texture.enabled"]
void texImageDOM(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, void texImageDOM(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
GLenum format, GLenum type, HTMLIFrameElement source); // May throw DOMException GLenum format, GLenum type, HTMLIFrameElement source); // May throw DOMException
@ -667,7 +667,7 @@ interface WebGLRenderingContextBase
GLenum format, GLenum type, object? data); GLenum format, GLenum type, object? data);
[Throws] [Throws]
void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
GLenum format, GLenum type, TexImageSource? source); // May throw DOMException GLenum format, GLenum type, TexImageSource source); // May throw DOMException
void uniform1f(WebGLUniformLocation? location, GLfloat x); void uniform1f(WebGLUniformLocation? location, GLfloat x);
//void uniform1fv(WebGLUniformLocation? location, Float32Array v); //void uniform1fv(WebGLUniformLocation? location, Float32Array v);
@ -738,7 +738,7 @@ interface WebGLRenderingContextBase
object v); object v);
void useProgram(WebGLProgram? program); void useProgram(WebGLProgram? program);
void validateProgram(WebGLProgram? program); void validateProgram(WebGLProgram program);
// FIXME(dmarcos) // FIXME(dmarcos)
// The code generator doesn't handle Float32Array so we're using 'object' // The code generator doesn't handle Float32Array so we're using 'object'

View file

@ -1,8 +1,12 @@
[element-array-buffer-delete-recreate.html] [element-array-buffer-delete-recreate.html]
type: testharness type: testharness
expected: ERROR
[WebGL test #0: getError expected: NO_ERROR. Was INVALID_ENUM : no errors from draw] [WebGL test #0: getError expected: NO_ERROR. Was INVALID_ENUM : no errors from draw]
expected: FAIL expected: FAIL
[WebGL test #1: at (0, 0) expected: 0,255,0,255 was 0,0,0,0] [WebGL test #1: at (0, 0) expected: 0,255,0,255 was 0,0,0,0]
expected: FAIL expected: FAIL
[WebGL test #0: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).]
expected: FAIL

View file

@ -1,5 +1,6 @@
[drawingbuffer-hd-dpi-test.html] [drawingbuffer-hd-dpi-test.html]
type: testharness type: testharness
expected: ERROR
[WebGL test #5: at (28, 12) expected: 0,255,0,255 was 0,0,0,0] [WebGL test #5: at (28, 12) expected: 0,255,0,255 was 0,0,0,0]
expected: FAIL expected: FAIL
@ -45,3 +46,6 @@
[WebGL test #50: gl.getError() should be 0. Was 1280.] [WebGL test #50: gl.getError() should be 0. Was 1280.]
expected: FAIL expected: FAIL
[WebGL test #5: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).]
expected: FAIL

View file

@ -1,7 +1,11 @@
[unwritten-output-defaults-to-zero.html] [unwritten-output-defaults-to-zero.html]
expected: ERROR
[WebGL test #1: Fail to set up the program] [WebGL test #1: Fail to set up the program]
expected: FAIL expected: FAIL
[WebGL test #2: Fail to set up the program] [WebGL test #2: Fail to set up the program]
expected: FAIL expected: FAIL
[WebGL test #1: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).]
expected: FAIL