diff options
author | Anthony Ramine <n.oxyde@gmail.com> | 2018-05-25 14:58:50 +0200 |
---|---|---|
committer | Anthony Ramine <n.oxyde@gmail.com> | 2018-06-06 12:24:47 +0200 |
commit | f1288cc6e0a52d377619f0ec9634eefd29ba15dc (patch) | |
tree | de9787bb29bf8adb2b759774bab0064c27cf44b2 /components/script/dom/webgl_extensions/extensions.rs | |
parent | eb1dfd07756f690dfbebae2e53447bc747c5763a (diff) | |
download | servo-f1288cc6e0a52d377619f0ec9634eefd29ba15dc.tar.gz servo-f1288cc6e0a52d377619f0ec9634eefd29ba15dc.zip |
Implement EXT_texture_filter_anisotropic
Diffstat (limited to 'components/script/dom/webgl_extensions/extensions.rs')
-rw-r--r-- | components/script/dom/webgl_extensions/extensions.rs | 43 |
1 files changed, 36 insertions, 7 deletions
diff --git a/components/script/dom/webgl_extensions/extensions.rs b/components/script/dom/webgl_extensions/extensions.rs index 92a34bac23e..33081e4bfe1 100644 --- a/components/script/dom/webgl_extensions/extensions.rs +++ b/components/script/dom/webgl_extensions/extensions.rs @@ -4,6 +4,7 @@ use canvas_traits::webgl::{WebGLError, WebGLVersion}; use dom::bindings::cell::DomRefCell; +use dom::bindings::codegen::Bindings::EXTTextureFilterAnisotropicBinding::EXTTextureFilterAnisotropicConstants; use dom::bindings::codegen::Bindings::OESStandardDerivativesBinding::OESStandardDerivativesConstants; use dom::bindings::codegen::Bindings::OESTextureHalfFloatBinding::OESTextureHalfFloatConstants; use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::WebGLRenderingContextConstants as constants; @@ -41,8 +42,16 @@ const DEFAULT_NOT_FILTERABLE_TEX_TYPES: [GLenum; 2] = [ // Param names that are implemented for glGetParameter in a WebGL 1.0 context // but must trigger a InvalidEnum error until the related WebGL Extensions are enabled. // Example: https://www.khronos.org/registry/webgl/extensions/OES_standard_derivatives/ -const DEFAULT_DISABLED_GET_PARAMETER_NAMES_WEBGL1: [GLenum; 1] = [ - OESStandardDerivativesConstants::FRAGMENT_SHADER_DERIVATIVE_HINT_OES +const DEFAULT_DISABLED_GET_PARAMETER_NAMES_WEBGL1: [GLenum; 2] = [ + EXTTextureFilterAnisotropicConstants::MAX_TEXTURE_MAX_ANISOTROPY_EXT, + OESStandardDerivativesConstants::FRAGMENT_SHADER_DERIVATIVE_HINT_OES, +]; + +// Param names that are implemented for glGetTexParameter in a WebGL 1.0 context +// but must trigger a InvalidEnum error until the related WebGL Extensions are enabled. +// Example: https://www.khronos.org/registry/webgl/extensions/OES_standard_derivatives/ +const DEFAULT_DISABLED_GET_TEX_PARAMETER_NAMES_WEBGL1: [GLenum; 1] = [ + EXTTextureFilterAnisotropicConstants::TEXTURE_MAX_ANISOTROPY_EXT, ]; /// WebGL features that are enabled/disabled by WebGL Extensions. @@ -57,20 +66,30 @@ struct WebGLExtensionFeatures { hint_targets: FnvHashSet<GLenum>, /// WebGL GetParameter() names enabled by extensions. disabled_get_parameter_names: FnvHashSet<GLenum>, + /// WebGL GetTexParameter() names enabled by extensions. + disabled_get_tex_parameter_names: FnvHashSet<GLenum>, /// WebGL OES_element_index_uint extension. element_index_uint_enabled: bool, } impl WebGLExtensionFeatures { fn new(webgl_version: WebGLVersion) -> Self { - let (disabled_tex_types, disabled_get_parameter_names, element_index_uint_enabled) = match webgl_version { + let ( + disabled_tex_types, + disabled_get_parameter_names, + disabled_get_tex_parameter_names, + element_index_uint_enabled, + ) = match webgl_version { WebGLVersion::WebGL1 => { - (DEFAULT_DISABLED_TEX_TYPES_WEBGL1.iter().cloned().collect(), - DEFAULT_DISABLED_GET_PARAMETER_NAMES_WEBGL1.iter().cloned().collect(), - false) + ( + DEFAULT_DISABLED_TEX_TYPES_WEBGL1.iter().cloned().collect(), + DEFAULT_DISABLED_GET_PARAMETER_NAMES_WEBGL1.iter().cloned().collect(), + DEFAULT_DISABLED_GET_TEX_PARAMETER_NAMES_WEBGL1.iter().cloned().collect(), + false, + ) }, WebGLVersion::WebGL2 => { - (Default::default(), Default::default(), true) + (Default::default(), Default::default(), Default::default(), true) } }; Self { @@ -81,6 +100,7 @@ impl WebGLExtensionFeatures { query_parameter_handlers: Default::default(), hint_targets: Default::default(), disabled_get_parameter_names, + disabled_get_tex_parameter_names, element_index_uint_enabled, } } @@ -236,7 +256,16 @@ impl WebGLExtensions { !self.features.borrow().disabled_get_parameter_names.contains(&name) } + pub fn enable_get_tex_parameter_name(&self, name: GLenum) { + self.features.borrow_mut().disabled_get_tex_parameter_names.remove(&name); + } + + pub fn is_get_tex_parameter_name_enabled(&self, name: GLenum) -> bool { + !self.features.borrow().disabled_get_tex_parameter_names.contains(&name) + } + fn register_all_extensions(&self) { + self.register::<ext::exttexturefilteranisotropic::EXTTextureFilterAnisotropic>(); self.register::<ext::oeselementindexuint::OESElementIndexUint>(); self.register::<ext::oesstandardderivatives::OESStandardDerivatives>(); self.register::<ext::oestexturefloat::OESTextureFloat>(); |