diff options
Diffstat (limited to 'components/script/dom/webglrenderingcontext.rs')
-rw-r--r-- | components/script/dom/webglrenderingcontext.rs | 31 |
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(); } |