diff options
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/webglrenderingcontext.rs | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs index 631ad4ca84f..7a6b558144c 100644 --- a/components/script/dom/webglrenderingcontext.rs +++ b/components/script/dom/webglrenderingcontext.rs @@ -2202,13 +2202,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { } } - { - // https://www.khronos.org/registry/webgl/specs/latest/1.0/#6.2 - let buffers = self.vertex_attribs.borrow(); - if buffers.iter().any(|data| data.enabled_as_array && data.buffer.is_none()) { - return self.webgl_error(InvalidOperation); - } - } + handle_potential_webgl_error!(self, self.vertex_attribs.validate_for_draw(), return); if !self.validate_framebuffer_complete() { return; @@ -2277,13 +2271,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext { } } - { - // https://www.khronos.org/registry/webgl/specs/latest/1.0/#6.2 - let buffers = self.vertex_attribs.borrow(); - if buffers.iter().any(|data| data.enabled_as_array && data.buffer.is_none()) { - return self.webgl_error(InvalidOperation); - } - } + handle_potential_webgl_error!(self, self.vertex_attribs.validate_for_draw(), return); if !self.validate_framebuffer_complete() { return; @@ -3852,6 +3840,14 @@ impl VertexAttribs { fn bind_buffer(&self, index: u32, buffer: &WebGLBuffer) { self.attribs.borrow_mut()[index as usize].buffer = Some(Dom::from_ref(buffer)); } + + fn validate_for_draw(&self) -> WebGLResult<()> { + // https://www.khronos.org/registry/webgl/specs/latest/1.0/#6.2 + if self.borrow().iter().any(|data| data.enabled_as_array && data.buffer.is_none()) { + return Err(InvalidOperation); + } + Ok(()) + } } #[derive(Clone, Default, JSTraceable, MallocSizeOf)] |