/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef WEBGL_EXTENSIONS_H_ #define WEBGL_EXTENSIONS_H_ #include "mozilla/AlreadyAddRefed.h" #include "nsString.h" #include "nsTArray.h" #include "nsWrapperCache.h" #include "WebGLObjectModel.h" #include "WebGLTypes.h" #include "WebGLFormats.h" namespace mozilla { class ErrorResult; namespace dom { template struct Nullable; template class Sequence; } // namespace dom namespace webgl { class FormatUsageAuthority; } // namespace webgl class WebGLContext; class WebGLQuery; class WebGLShader; class WebGLTexture; class WebGLVertexArray; class WebGLExtensionBase { protected: WebGLContext* const mContext; private: bool mIsExplicit = false; protected: explicit WebGLExtensionBase(WebGLContext* context) : mContext(context) {} public: virtual ~WebGLExtensionBase() = default; private: virtual void OnSetExplicit() {} public: void SetExplicit() { mIsExplicit = true; OnSetExplicit(); } bool IsExplicit() const { return mIsExplicit; } }; //// class WebGLExtensionCompressedTextureASTC : public WebGLExtensionBase { public: explicit WebGLExtensionCompressedTextureASTC(WebGLContext* webgl); static bool IsSupported(const WebGLContext* webgl); }; class WebGLExtensionCompressedTextureBPTC final : public WebGLExtensionBase { public: explicit WebGLExtensionCompressedTextureBPTC(WebGLContext* webgl); static bool IsSupported(const WebGLContext* webgl); }; class WebGLExtensionCompressedTextureES3 : public WebGLExtensionBase { public: explicit WebGLExtensionCompressedTextureES3(WebGLContext*); }; class WebGLExtensionCompressedTextureETC1 : public WebGLExtensionBase { public: explicit WebGLExtensionCompressedTextureETC1(WebGLContext*); }; class WebGLExtensionCompressedTexturePVRTC : public WebGLExtensionBase { public: explicit WebGLExtensionCompressedTexturePVRTC(WebGLContext*); }; class WebGLExtensionCompressedTextureRGTC final : public WebGLExtensionBase { public: explicit WebGLExtensionCompressedTextureRGTC(WebGLContext* webgl); static bool IsSupported(const WebGLContext* webgl); }; class WebGLExtensionCompressedTextureS3TC : public WebGLExtensionBase { public: explicit WebGLExtensionCompressedTextureS3TC(WebGLContext*); static bool IsSupported(const WebGLContext*); }; class WebGLExtensionCompressedTextureS3TC_SRGB : public WebGLExtensionBase { public: explicit WebGLExtensionCompressedTextureS3TC_SRGB(WebGLContext*); static bool IsSupported(const WebGLContext*); }; class WebGLExtensionDebugRendererInfo : public WebGLExtensionBase { public: explicit WebGLExtensionDebugRendererInfo(WebGLContext* webgl) : WebGLExtensionBase(webgl) {} }; class WebGLExtensionDebugShaders : public WebGLExtensionBase { public: explicit WebGLExtensionDebugShaders(WebGLContext* webgl) : WebGLExtensionBase(webgl) {} }; class WebGLExtensionDepthTexture : public WebGLExtensionBase { public: explicit WebGLExtensionDepthTexture(WebGLContext*); static bool IsSupported(const WebGLContext*); }; class WebGLExtensionDrawBuffersIndexed : public WebGLExtensionBase { public: explicit WebGLExtensionDrawBuffersIndexed(WebGLContext* webgl) : WebGLExtensionBase(webgl) {} }; class WebGLExtensionElementIndexUint : public WebGLExtensionBase { public: explicit WebGLExtensionElementIndexUint(WebGLContext* webgl) : WebGLExtensionBase(webgl) {} }; class WebGLExtensionExplicitPresent : public WebGLExtensionBase { public: explicit WebGLExtensionExplicitPresent(WebGLContext*); static bool IsSupported(const WebGLContext*); }; class WebGLExtensionEXTColorBufferFloat : public WebGLExtensionBase { public: explicit WebGLExtensionEXTColorBufferFloat(WebGLContext*); static bool IsSupported(const WebGLContext*); }; class WebGLExtensionFBORenderMipmap : public WebGLExtensionBase { public: explicit WebGLExtensionFBORenderMipmap(WebGLContext* webgl); static bool IsSupported(const WebGLContext*); }; class WebGLExtensionFloatBlend : public WebGLExtensionBase { public: explicit WebGLExtensionFloatBlend(WebGLContext* webgl); static bool IsSupported(const WebGLContext*); }; class WebGLExtensionFragDepth : public WebGLExtensionBase { public: explicit WebGLExtensionFragDepth(WebGLContext*); static bool IsSupported(const WebGLContext* context); }; class WebGLExtensionLoseContext : public WebGLExtensionBase { public: explicit WebGLExtensionLoseContext(WebGLContext* webgl) : WebGLExtensionBase(webgl) {} }; class WebGLExtensionMultiview : public WebGLExtensionBase { public: explicit WebGLExtensionMultiview(WebGLContext*); static bool IsSupported(const WebGLContext*); }; class WebGLExtensionProvokingVertex : public WebGLExtensionBase { public: explicit WebGLExtensionProvokingVertex(WebGLContext* webgl) : WebGLExtensionBase(webgl) {} }; class WebGLExtensionSRGB : public WebGLExtensionBase { public: explicit WebGLExtensionSRGB(WebGLContext*); static bool IsSupported(const WebGLContext* context); }; class WebGLExtensionStandardDerivatives : public WebGLExtensionBase { public: explicit WebGLExtensionStandardDerivatives(WebGLContext* webgl) : WebGLExtensionBase(webgl) {} }; class WebGLExtensionShaderTextureLod : public WebGLExtensionBase { public: explicit WebGLExtensionShaderTextureLod(WebGLContext*); static bool IsSupported(const WebGLContext* context); }; class WebGLExtensionTextureFilterAnisotropic : public WebGLExtensionBase { public: explicit WebGLExtensionTextureFilterAnisotropic(WebGLContext* webgl) : WebGLExtensionBase(webgl) {} }; class WebGLExtensionTextureFloat : public WebGLExtensionBase { public: static void InitWebGLFormats(webgl::FormatUsageAuthority* authority); explicit WebGLExtensionTextureFloat(WebGLContext*); static bool IsSupported(const WebGLContext*); }; class WebGLExtensionTextureFloatLinear : public WebGLExtensionBase { public: explicit WebGLExtensionTextureFloatLinear(WebGLContext*); }; class WebGLExtensionTextureHalfFloat : public WebGLExtensionBase { public: static void InitWebGLFormats(webgl::FormatUsageAuthority* authority); explicit WebGLExtensionTextureHalfFloat(WebGLContext*); static bool IsSupported(const WebGLContext*); }; class WebGLExtensionTextureHalfFloatLinear : public WebGLExtensionBase { public: explicit WebGLExtensionTextureHalfFloatLinear(WebGLContext*); }; class WebGLExtensionTextureNorm16 : public WebGLExtensionBase { public: static bool IsSupported(const WebGLContext*); explicit WebGLExtensionTextureNorm16(WebGLContext*); }; class WebGLExtensionColorBufferFloat : public WebGLExtensionBase { public: explicit WebGLExtensionColorBufferFloat(WebGLContext*); static bool IsSupported(const WebGLContext*); void SetRenderable(const webgl::FormatRenderableState); void OnSetExplicit() override; }; class WebGLExtensionColorBufferHalfFloat : public WebGLExtensionBase { public: explicit WebGLExtensionColorBufferHalfFloat(WebGLContext*); static bool IsSupported(const WebGLContext*); void SetRenderable(const webgl::FormatRenderableState); void OnSetExplicit() override; }; class WebGLExtensionDrawBuffers : public WebGLExtensionBase { public: explicit WebGLExtensionDrawBuffers(WebGLContext*); static bool IsSupported(const WebGLContext*); }; class WebGLExtensionVertexArray : public WebGLExtensionBase { public: explicit WebGLExtensionVertexArray(WebGLContext* webgl) : WebGLExtensionBase(webgl) {} }; class WebGLExtensionInstancedArrays : public WebGLExtensionBase { public: explicit WebGLExtensionInstancedArrays(WebGLContext* webgl); static bool IsSupported(const WebGLContext* webgl); }; class WebGLExtensionBlendMinMax : public WebGLExtensionBase { public: explicit WebGLExtensionBlendMinMax(WebGLContext* webgl); static bool IsSupported(const WebGLContext*); }; class WebGLExtensionDisjointTimerQuery : public WebGLExtensionBase { public: explicit WebGLExtensionDisjointTimerQuery(WebGLContext* webgl); static bool IsSupported(const WebGLContext*); }; class WebGLExtensionMOZDebug final : public WebGLExtensionBase { public: explicit WebGLExtensionMOZDebug(WebGLContext* webgl) : WebGLExtensionBase(webgl) {} }; } // namespace mozilla #endif // WEBGL_EXTENSIONS_H_