diff options
3 files changed, 18 insertions, 17 deletions
diff --git a/components/script/dom/webglframebuffer.rs b/components/script/dom/webglframebuffer.rs index 83814bd2f30..09a1cbea7cc 100644 --- a/components/script/dom/webglframebuffer.rs +++ b/components/script/dom/webglframebuffer.rs @@ -18,6 +18,12 @@ use dom::webgltexture::WebGLTexture; use dom_struct::dom_struct; use std::cell::Cell; +pub enum CompleteForRendering { + Complete, + Incomplete, + MissingColorAttachment, +} + #[must_root] #[derive(Clone, JSTraceable, MallocSizeOf)] enum WebGLFramebufferAttachment { @@ -214,14 +220,14 @@ impl WebGLFramebuffer { return self.status.get(); } - pub fn check_status_for_rendering(&self) -> u32 { + pub fn check_status_for_rendering(&self) -> CompleteForRendering { let result = self.check_status(); if result != constants::FRAMEBUFFER_COMPLETE { - return result; + return CompleteForRendering::Incomplete; } if self.color.borrow().is_none() { - return constants::FRAMEBUFFER_INCOMPLETE_ATTACHMENT; + return CompleteForRendering::MissingColorAttachment; } if !self.is_initialized.get() { @@ -245,7 +251,7 @@ impl WebGLFramebuffer { self.is_initialized.set(true); } - constants::FRAMEBUFFER_COMPLETE + CompleteForRendering::Complete } pub fn renderbuffer(&self, attachment: u32, rb: Option<&WebGLRenderbuffer>) -> WebGLResult<()> { diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs index c4ea4667cbd..db0fabf452d 100644 --- a/components/script/dom/webglrenderingcontext.rs +++ b/components/script/dom/webglrenderingcontext.rs @@ -39,7 +39,7 @@ use dom::webgl_validations::types::{TexDataType, TexFormat, TexImageTarget}; use dom::webglactiveinfo::WebGLActiveInfo; use dom::webglbuffer::WebGLBuffer; use dom::webglcontextevent::WebGLContextEvent; -use dom::webglframebuffer::{WebGLFramebuffer, WebGLFramebufferAttachmentRoot}; +use dom::webglframebuffer::{WebGLFramebuffer, WebGLFramebufferAttachmentRoot, CompleteForRendering}; use dom::webglobject::WebGLObject; use dom::webglprogram::WebGLProgram; use dom::webglrenderbuffer::WebGLRenderbuffer; @@ -339,10 +339,14 @@ impl WebGLRenderingContext { // this: clear() and getParameter(IMPLEMENTATION_COLOR_READ_*). fn validate_framebuffer(&self) -> WebGLResult<()> { match self.bound_framebuffer.get() { - Some(ref fb) if fb.check_status_for_rendering() != constants::FRAMEBUFFER_COMPLETE => { - Err(InvalidFramebufferOperation) + Some(fb) => match fb.check_status_for_rendering() { + CompleteForRendering::Complete => Ok(()), + CompleteForRendering::Incomplete => + Err(InvalidFramebufferOperation), + CompleteForRendering::MissingColorAttachment => + Err(InvalidOperation), }, - _ => Ok(()), + None => Ok(()), } } diff --git a/tests/wpt/webgl/meta/conformance/renderbuffers/framebuffer-object-attachment.html.ini b/tests/wpt/webgl/meta/conformance/renderbuffers/framebuffer-object-attachment.html.ini index de3a2cf6273..b0777f21743 100644 --- a/tests/wpt/webgl/meta/conformance/renderbuffers/framebuffer-object-attachment.html.ini +++ b/tests/wpt/webgl/meta/conformance/renderbuffers/framebuffer-object-attachment.html.ini @@ -1,12 +1,3 @@ [framebuffer-object-attachment.html] [WebGL test #139: at (0, 0) expected: 0,255,0,255 was 255,0,0,255] expected: fail - - [WebGL test #559: getError expected: INVALID_OPERATION. Was INVALID_FRAMEBUFFER_OPERATION : After CopyTexSubImage2D from missing attachment] - expected: FAIL - - [WebGL test #555: getError expected: INVALID_OPERATION. Was INVALID_FRAMEBUFFER_OPERATION : After ReadPixels from missing attachment] - expected: FAIL - - [WebGL test #557: getError expected: INVALID_OPERATION. Was INVALID_FRAMEBUFFER_OPERATION : After CopyTexImage2D from missing attachment] - expected: FAIL |