aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/webgl_extensions/extensions.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/webgl_extensions/extensions.rs')
-rw-r--r--components/script/dom/webgl_extensions/extensions.rs25
1 files changed, 24 insertions, 1 deletions
diff --git a/components/script/dom/webgl_extensions/extensions.rs b/components/script/dom/webgl_extensions/extensions.rs
index 5833cccba71..560d699cedd 100644
--- a/components/script/dom/webgl_extensions/extensions.rs
+++ b/components/script/dom/webgl_extensions/extensions.rs
@@ -11,9 +11,13 @@ use dom::bindings::codegen::Bindings::OESTextureHalfFloatBinding::OESTextureHalf
use dom::bindings::codegen::Bindings::OESVertexArrayObjectBinding::OESVertexArrayObjectConstants;
use dom::bindings::codegen::Bindings::WebGLRenderingContextBinding::WebGLRenderingContextConstants as constants;
use dom::bindings::trace::JSTraceable;
+use dom::extcolorbufferhalffloat::EXTColorBufferHalfFloat;
+use dom::oestexturefloat::OESTextureFloat;
+use dom::oestexturehalffloat::OESTextureHalfFloat;
+use dom::webglcolorbufferfloat::WEBGLColorBufferFloat;
use dom::webglrenderingcontext::WebGLRenderingContext;
use fnv::{FnvHashMap, FnvHashSet};
-use gleam::gl::GLenum;
+use gleam::gl::{self, GLenum};
use js::jsapi::JSObject;
use malloc_size_of::MallocSizeOf;
use std::collections::HashMap;
@@ -333,6 +337,7 @@ impl WebGLExtensions {
fn register_all_extensions(&self) {
self.register::<ext::angleinstancedarrays::ANGLEInstancedArrays>();
self.register::<ext::extblendminmax::EXTBlendMinmax>();
+ self.register::<ext::extcolorbufferhalffloat::EXTColorBufferHalfFloat>();
self.register::<ext::extshadertexturelod::EXTShaderTextureLod>();
self.register::<ext::exttexturefilteranisotropic::EXTTextureFilterAnisotropic>();
self.register::<ext::oeselementindexuint::OESElementIndexUint>();
@@ -342,6 +347,7 @@ impl WebGLExtensions {
self.register::<ext::oestexturehalffloat::OESTextureHalfFloat>();
self.register::<ext::oestexturehalffloatlinear::OESTextureHalfFloatLinear>();
self.register::<ext::oesvertexarrayobject::OESVertexArrayObject>();
+ self.register::<ext::webglcolorbufferfloat::WEBGLColorBufferFloat>();
}
pub fn enable_element_index_uint(&self) {
@@ -359,6 +365,23 @@ impl WebGLExtensions {
pub fn is_blend_minmax_enabled(&self) -> bool {
self.features.borrow().blend_minmax_enabled
}
+
+ pub fn is_float_buffer_renderable(&self) -> bool {
+ self.is_enabled::<WEBGLColorBufferFloat>() || self.is_enabled::<OESTextureFloat>()
+ }
+
+ pub fn is_half_float_buffer_renderable(&self) -> bool {
+ self.is_enabled::<EXTColorBufferHalfFloat>() || self.is_enabled::<OESTextureHalfFloat>()
+ }
+
+ pub fn effective_type(&self, type_: u32) -> u32 {
+ if type_ == OESTextureHalfFloatConstants::HALF_FLOAT_OES {
+ if !self.supports_gl_extension("GL_OES_texture_half_float") {
+ return gl::HALF_FLOAT;
+ }
+ }
+ type_
+ }
}
// Helper structs