1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this file, 3 * You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 #include "WebGLExtensions.h" 6 7 #include "GLContext.h" 8 #include "mozilla/dom/WebGLRenderingContextBinding.h" 9 #include "WebGLContext.h" 10 #include "WebGLFormats.h" 11 12 namespace mozilla { 13 WebGLExtensionCompressedTextureS3TC(WebGLContext * webgl)14WebGLExtensionCompressedTextureS3TC::WebGLExtensionCompressedTextureS3TC( 15 WebGLContext* webgl) 16 : WebGLExtensionBase(webgl) { 17 RefPtr<WebGLContext> webgl_ = webgl; // Bug 1201275 18 const auto fnAdd = [&webgl_](GLenum sizedFormat, 19 webgl::EffectiveFormat effFormat) { 20 auto& fua = webgl_->mFormatUsage; 21 22 auto usage = fua->EditUsage(effFormat); 23 usage->isFilterable = true; 24 fua->AllowSizedTexFormat(sizedFormat, usage); 25 }; 26 27 #define FOO(x) LOCAL_GL_##x, webgl::EffectiveFormat::x 28 29 fnAdd(FOO(COMPRESSED_RGB_S3TC_DXT1_EXT)); 30 fnAdd(FOO(COMPRESSED_RGBA_S3TC_DXT1_EXT)); 31 fnAdd(FOO(COMPRESSED_RGBA_S3TC_DXT3_EXT)); 32 fnAdd(FOO(COMPRESSED_RGBA_S3TC_DXT5_EXT)); 33 34 #undef FOO 35 } 36 IsSupported(const WebGLContext * webgl)37bool WebGLExtensionCompressedTextureS3TC::IsSupported( 38 const WebGLContext* webgl) { 39 gl::GLContext* gl = webgl->GL(); 40 if (gl->IsExtensionSupported(gl::GLContext::EXT_texture_compression_s3tc)) 41 return true; 42 43 return gl->IsExtensionSupported( 44 gl::GLContext::EXT_texture_compression_dxt1) && 45 gl->IsExtensionSupported( 46 gl::GLContext::ANGLE_texture_compression_dxt3) && 47 gl->IsExtensionSupported( 48 gl::GLContext::ANGLE_texture_compression_dxt5); 49 } 50 51 } // namespace mozilla 52