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)14 WebGLExtensionCompressedTextureS3TC::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)37 bool 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