1 /* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 #include "WebGLExtensions.h" 7 8 #include "GLContext.h" 9 #include "mozilla/dom/WebGLRenderingContextBinding.h" 10 #include "mozilla/StaticPrefs_webgl.h" 11 #include "WebGLContext.h" 12 13 namespace mozilla { 14 WebGLExtensionBlendMinMax(WebGLContext * webgl)15WebGLExtensionBlendMinMax::WebGLExtensionBlendMinMax(WebGLContext* webgl) 16 : WebGLExtensionBase(webgl) { 17 MOZ_ASSERT(IsSupported(webgl), "Don't construct extension if unsupported."); 18 } 19 IsSupported(const WebGLContext * webgl)20bool WebGLExtensionBlendMinMax::IsSupported(const WebGLContext* webgl) { 21 if (webgl->IsWebGL2()) return false; 22 23 return webgl->GL()->IsSupported(gl::GLFeature::blend_minmax); 24 } 25 26 // - 27 WebGLExtensionExplicitPresent(WebGLContext * const webgl)28WebGLExtensionExplicitPresent::WebGLExtensionExplicitPresent( 29 WebGLContext* const webgl) 30 : WebGLExtensionBase(webgl) { 31 MOZ_ASSERT(IsSupported(webgl), "Don't construct extension if unsupported."); 32 } 33 IsSupported(const WebGLContext * const webgl)34bool WebGLExtensionExplicitPresent::IsSupported( 35 const WebGLContext* const webgl) { 36 return StaticPrefs::webgl_enable_draft_extensions(); 37 } 38 39 // - 40 WebGLExtensionFloatBlend(WebGLContext * const webgl)41WebGLExtensionFloatBlend::WebGLExtensionFloatBlend(WebGLContext* const webgl) 42 : WebGLExtensionBase(webgl) { 43 MOZ_ASSERT(IsSupported(webgl), "Don't construct extension if unsupported."); 44 } 45 IsSupported(const WebGLContext * const webgl)46bool WebGLExtensionFloatBlend::IsSupported(const WebGLContext* const webgl) { 47 if (!WebGLExtensionColorBufferFloat::IsSupported(webgl) && 48 !WebGLExtensionEXTColorBufferFloat::IsSupported(webgl)) 49 return false; 50 51 const auto& gl = webgl->gl; 52 if (!gl->IsGLES() && gl->Version() >= 300) return true; 53 if (gl->IsGLES() && gl->Version() >= 320) return true; 54 return gl->IsExtensionSupported(gl::GLContext::EXT_float_blend); 55 } 56 57 // - 58 WebGLExtensionFBORenderMipmap(WebGLContext * const webgl)59WebGLExtensionFBORenderMipmap::WebGLExtensionFBORenderMipmap( 60 WebGLContext* const webgl) 61 : WebGLExtensionBase(webgl) { 62 MOZ_ASSERT(IsSupported(webgl), "Don't construct extension if unsupported."); 63 } 64 IsSupported(const WebGLContext * const webgl)65bool WebGLExtensionFBORenderMipmap::IsSupported( 66 const WebGLContext* const webgl) { 67 if (webgl->IsWebGL2()) return false; 68 69 const auto& gl = webgl->gl; 70 if (!gl->IsGLES()) return true; 71 if (gl->Version() >= 300) return true; 72 return gl->IsExtensionSupported(gl::GLContext::OES_fbo_render_mipmap); 73 } 74 75 // - 76 WebGLExtensionMultiview(WebGLContext * const webgl)77WebGLExtensionMultiview::WebGLExtensionMultiview(WebGLContext* const webgl) 78 : WebGLExtensionBase(webgl) { 79 MOZ_ASSERT(IsSupported(webgl), "Don't construct extension if unsupported."); 80 } 81 IsSupported(const WebGLContext * const webgl)82bool WebGLExtensionMultiview::IsSupported(const WebGLContext* const webgl) { 83 if (!webgl->IsWebGL2()) return false; 84 85 const auto& gl = webgl->gl; 86 return gl->IsSupported(gl::GLFeature::multiview); 87 } 88 89 } // namespace mozilla 90