diff options
author | Mátyás Mustoha <matyas.mustoha@h-lab.eu> | 2020-03-03 14:44:33 +0100 |
---|---|---|
committer | Josh Matthews <josh@joshmatthews.net> | 2020-03-13 13:43:30 -0400 |
commit | 5eaa9ef8cb552063df2645847a4ab3793c3ebcd6 (patch) | |
tree | 893999249e8c8149787d2c0f7c8aad4a4acb06b6 /components/script/dom/webglrenderingcontext.rs | |
parent | 13a349603d986f969f522a676f356702aa69d5ac (diff) | |
download | servo-5eaa9ef8cb552063df2645847a4ab3793c3ebcd6.tar.gz servo-5eaa9ef8cb552063df2645847a4ab3793c3ebcd6.zip |
Add support for some more WebGL2 renderbuffer functions
Adds support for the following WebGL2 calls:
- `RenderbufferStorageMultisample`
- `GetInternalFormativ`
See: https://www.khronos.org/registry/webgl/specs/latest/2.0/#3.7.5
Diffstat (limited to 'components/script/dom/webglrenderingcontext.rs')
-rw-r--r-- | components/script/dom/webglrenderingcontext.rs | 59 |
1 files changed, 35 insertions, 24 deletions
diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs index bda7c036d60..9f30edac79c 100644 --- a/components/script/dom/webglrenderingcontext.rs +++ b/components/script/dom/webglrenderingcontext.rs @@ -1476,6 +1476,40 @@ impl WebGLRenderingContext { } slot.set(framebuffer); } + + pub fn renderbuffer_storage( + &self, + target: u32, + samples: i32, + internal_format: u32, + width: i32, + height: i32, + ) { + if target != constants::RENDERBUFFER { + return self.webgl_error(InvalidEnum); + } + + let max = self.limits.max_renderbuffer_size; + + if samples < 0 || width < 0 || width as u32 > max || height < 0 || height as u32 > max { + return self.webgl_error(InvalidValue); + } + + let rb = handle_potential_webgl_error!( + self, + self.bound_renderbuffer.get().ok_or(InvalidOperation), + return + ); + handle_potential_webgl_error!( + self, + rb.storage(self.api_type, samples, internal_format, width, height) + ); + if let Some(fb) = self.bound_draw_framebuffer.get() { + fb.invalidate_renderbuffer(&*rb); + } + + // FIXME: https://github.com/servo/servo/issues/13710 + } } #[cfg(not(feature = "webgl_backtrace"))] @@ -4336,30 +4370,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.7 fn RenderbufferStorage(&self, target: u32, internal_format: u32, width: i32, height: i32) { - if target != constants::RENDERBUFFER { - return self.webgl_error(InvalidEnum); - } - - let max = self.limits.max_renderbuffer_size; - - if width < 0 || width as u32 > max || height < 0 || height as u32 > max { - return self.webgl_error(InvalidValue); - } - - let rb = handle_potential_webgl_error!( - self, - self.bound_renderbuffer.get().ok_or(InvalidOperation), - return - ); - handle_potential_webgl_error!( - self, - rb.storage(self.api_type, internal_format, width, height) - ); - if let Some(fb) = self.bound_draw_framebuffer.get() { - fb.invalidate_renderbuffer(&*rb); - } - - // FIXME: https://github.com/servo/servo/issues/13710 + self.renderbuffer_storage(target, 0, internal_format, width, height) } // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14.6 |