aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/webglrenderingcontext.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/webglrenderingcontext.rs')
-rw-r--r--components/script/dom/webglrenderingcontext.rs31
1 files changed, 30 insertions, 1 deletions
diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs
index 3abe390bfe6..d712b8cc58a 100644
--- a/components/script/dom/webglrenderingcontext.rs
+++ b/components/script/dom/webglrenderingcontext.rs
@@ -2388,7 +2388,36 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
_ => false
};
- if !target_matches || !attachment_matches || !pname_matches {
+ let bound_attachment_matches = match self.bound_framebuffer.get().unwrap().attachment(attachment) {
+ Some(attachment_root) => {
+ match attachment_root {
+ WebGLFramebufferAttachmentRoot::Renderbuffer(_) => {
+ match pname {
+ constants::FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE |
+ constants::FRAMEBUFFER_ATTACHMENT_OBJECT_NAME => true,
+ _ => false
+ }
+ },
+ WebGLFramebufferAttachmentRoot::Texture(_) => {
+ match pname {
+ constants::FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE |
+ constants::FRAMEBUFFER_ATTACHMENT_OBJECT_NAME |
+ constants::FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL |
+ constants::FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE => true,
+ _ => false
+ }
+ }
+ }
+ },
+ _ => {
+ match pname {
+ constants::FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE => true,
+ _ => false
+ }
+ }
+ };
+
+ if !target_matches || !attachment_matches || !pname_matches || !bound_attachment_matches {
self.webgl_error(InvalidEnum);
return NullValue();
}