diff options
Diffstat (limited to 'components/script/dom/webgl_extensions/extension.rs')
-rw-r--r-- | components/script/dom/webgl_extensions/extension.rs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/components/script/dom/webgl_extensions/extension.rs b/components/script/dom/webgl_extensions/extension.rs new file mode 100644 index 00000000000..3854acee122 --- /dev/null +++ b/components/script/dom/webgl_extensions/extension.rs @@ -0,0 +1,40 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +use super::WebGLExtensions; +use crate::dom::bindings::reflector::DomObject; +use crate::dom::bindings::root::DomRoot; +use crate::dom::bindings::trace::JSTraceable; +use crate::dom::webglrenderingcontext::WebGLRenderingContext; +use canvas_traits::webgl::WebGLVersion; + +/// Trait implemented by WebGL extensions. +pub trait WebGLExtension: Sized +where + Self::Extension: DomObject + JSTraceable, +{ + type Extension; + + /// Creates the DOM object of the WebGL extension. + fn new(ctx: &WebGLRenderingContext) -> DomRoot<Self::Extension>; + + /// Returns which WebGL spec is this extension written against. + fn spec() -> WebGLExtensionSpec; + + /// Checks if the extension is supported. + fn is_supported(ext: &WebGLExtensions) -> bool; + + /// Enable the extension. + fn enable(ext: &WebGLExtensions); + + /// Name of the WebGL Extension. + fn name() -> &'static str; +} + +pub enum WebGLExtensionSpec { + /// Extensions written against both WebGL and WebGL2 specs. + All, + /// Extensions writen against a specific WebGL version spec. + Specific(WebGLVersion), +} |