webgl: Implement component narrowing checks for CopyTexImage2D.

This commit is contained in:
Josh Matthews 2019-09-19 17:45:19 -04:00
parent 7e4cf13f5b
commit 778b48fa47
2 changed files with 41 additions and 11 deletions

View file

@ -1928,6 +1928,47 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
Err(_) => return,
};
let framebuffer_format = match self.bound_framebuffer.get() {
Some(fb) => match fb.attachment(constants::COLOR_ATTACHMENT0) {
Some(WebGLFramebufferAttachmentRoot::Renderbuffer(rb)) => {
TexFormat::from_gl_constant(rb.internal_format())
},
Some(WebGLFramebufferAttachmentRoot::Texture(texture)) => {
texture.image_info_for_target(&target, 0).internal_format()
},
None => None,
},
None => {
let attrs = self.GetContextAttributes().unwrap();
Some(if attrs.alpha {
TexFormat::RGBA
} else {
TexFormat::RGB
})
},
};
let framebuffer_format = match framebuffer_format {
Some(f) => f,
None => {
self.webgl_error(InvalidOperation);
return;
},
};
match (framebuffer_format, internal_format) {
(a, b) if a == b => (),
(TexFormat::RGBA, TexFormat::RGB) => (),
(TexFormat::RGBA, TexFormat::Alpha) => (),
(TexFormat::RGBA, TexFormat::Luminance) => (),
(TexFormat::RGBA, TexFormat::LuminanceAlpha) => (),
(TexFormat::RGB, TexFormat::Luminance) => (),
_ => {
self.webgl_error(InvalidOperation);
return;
},
}
// NB: TexImage2D depth is always equal to 1
handle_potential_webgl_error!(
self,