From 4e6eea221a19b3e5a4b70f5954b3347bb6db02d1 Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Tue, 20 Mar 2018 10:11:46 +0100 Subject: Implement instanced WebGL drawing calls (part of #20791) --- .../script/dom/webgl_extensions/extensions.rs | 31 +++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'components/script/dom/webgl_extensions/extensions.rs') diff --git a/components/script/dom/webgl_extensions/extensions.rs b/components/script/dom/webgl_extensions/extensions.rs index c5413ea1eb2..b3812f51cf5 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::ANGLEInstancedArraysBinding::ANGLEInstancedArraysConstants; use dom::bindings::codegen::Bindings::EXTTextureFilterAnisotropicBinding::EXTTextureFilterAnisotropicConstants; use dom::bindings::codegen::Bindings::OESStandardDerivativesBinding::OESStandardDerivativesConstants; use dom::bindings::codegen::Bindings::OESTextureHalfFloatBinding::OESTextureHalfFloatConstants; @@ -54,6 +55,13 @@ const DEFAULT_DISABLED_GET_TEX_PARAMETER_NAMES_WEBGL1: [GLenum; 1] = [ EXTTextureFilterAnisotropicConstants::TEXTURE_MAX_ANISOTROPY_EXT, ]; +// Param names that are implemented for glGetVertexAttrib 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/ANGLE_instanced_arrays/ +const DEFAULT_DISABLED_GET_VERTEX_ATTRIB_NAMES_WEBGL1: [GLenum; 1] = [ + ANGLEInstancedArraysConstants::VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE, +]; + /// WebGL features that are enabled/disabled by WebGL Extensions. #[derive(JSTraceable, MallocSizeOf)] struct WebGLExtensionFeatures { @@ -68,6 +76,8 @@ struct WebGLExtensionFeatures { disabled_get_parameter_names: FnvHashSet, /// WebGL GetTexParameter() names enabled by extensions. disabled_get_tex_parameter_names: FnvHashSet, + /// WebGL GetAttribVertex() names enabled by extensions. + disabled_get_vertex_attrib_names: FnvHashSet, /// WebGL OES_element_index_uint extension. element_index_uint_enabled: bool, /// WebGL EXT_blend_minmax extension. @@ -80,6 +90,7 @@ impl WebGLExtensionFeatures { disabled_tex_types, disabled_get_parameter_names, disabled_get_tex_parameter_names, + disabled_get_vertex_attrib_names, element_index_uint_enabled, blend_minmax_enabled, ) = match webgl_version { @@ -88,12 +99,20 @@ impl WebGLExtensionFeatures { 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(), + DEFAULT_DISABLED_GET_VERTEX_ATTRIB_NAMES_WEBGL1.iter().cloned().collect(), false, false, ) }, WebGLVersion::WebGL2 => { - (Default::default(), Default::default(), Default::default(), true, true) + ( + Default::default(), + Default::default(), + Default::default(), + Default::default(), + true, + true, + ) } }; Self { @@ -105,6 +124,7 @@ impl WebGLExtensionFeatures { hint_targets: Default::default(), disabled_get_parameter_names, disabled_get_tex_parameter_names, + disabled_get_vertex_attrib_names, element_index_uint_enabled, blend_minmax_enabled, } @@ -269,7 +289,16 @@ impl WebGLExtensions { !self.features.borrow().disabled_get_tex_parameter_names.contains(&name) } + pub fn enable_get_vertex_attrib_name(&self, name: GLenum) { + self.features.borrow_mut().disabled_get_vertex_attrib_names.remove(&name); + } + + pub fn is_get_vertex_attrib_name_enabled(&self, name: GLenum) -> bool { + !self.features.borrow().disabled_get_vertex_attrib_names.contains(&name) + } + fn register_all_extensions(&self) { + self.register::(); self.register::(); self.register::(); self.register::(); -- cgit v1.2.3