aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/webglframebuffer.rs14
-rw-r--r--components/script/dom/webglrenderingcontext.rs12
-rw-r--r--tests/wpt/webgl/meta/conformance/renderbuffers/framebuffer-object-attachment.html.ini9
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