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/. */
6 #ifndef WEBGL_EXTENSIONS_H_
7 #define WEBGL_EXTENSIONS_H_
9 #include "mozilla/AlreadyAddRefed.h"
12 #include "nsWrapperCache.h"
13 #include "WebGLObjectModel.h"
14 #include "WebGLTypes.h"
27 struct FormatRenderableState
;
28 class FormatUsageAuthority
;
35 class WebGLVertexArray
;
37 class WebGLExtensionBase
{
39 WebGLContext
* const mContext
;
42 bool mIsExplicit
= false;
45 explicit WebGLExtensionBase(WebGLContext
* context
) : mContext(context
) {}
48 virtual ~WebGLExtensionBase() = default;
51 virtual void OnSetExplicit() {}
59 bool IsExplicit() const { return mIsExplicit
; }
64 class WebGLExtensionCompressedTextureASTC
: public WebGLExtensionBase
{
66 explicit WebGLExtensionCompressedTextureASTC(WebGLContext
* webgl
);
67 static bool IsSupported(const WebGLContext
* webgl
);
70 class WebGLExtensionCompressedTextureBPTC final
: public WebGLExtensionBase
{
72 explicit WebGLExtensionCompressedTextureBPTC(WebGLContext
* webgl
);
73 static bool IsSupported(const WebGLContext
* webgl
);
76 class WebGLExtensionCompressedTextureES3
: public WebGLExtensionBase
{
78 explicit WebGLExtensionCompressedTextureES3(WebGLContext
*);
81 class WebGLExtensionCompressedTextureETC1
: public WebGLExtensionBase
{
83 explicit WebGLExtensionCompressedTextureETC1(WebGLContext
*);
86 class WebGLExtensionCompressedTexturePVRTC
: public WebGLExtensionBase
{
88 explicit WebGLExtensionCompressedTexturePVRTC(WebGLContext
*);
91 class WebGLExtensionCompressedTextureRGTC final
: public WebGLExtensionBase
{
93 explicit WebGLExtensionCompressedTextureRGTC(WebGLContext
* webgl
);
94 static bool IsSupported(const WebGLContext
* webgl
);
97 class WebGLExtensionCompressedTextureS3TC
: public WebGLExtensionBase
{
99 explicit WebGLExtensionCompressedTextureS3TC(WebGLContext
*);
100 static bool IsSupported(const WebGLContext
*);
103 class WebGLExtensionCompressedTextureS3TC_SRGB
: public WebGLExtensionBase
{
105 explicit WebGLExtensionCompressedTextureS3TC_SRGB(WebGLContext
*);
106 static bool IsSupported(const WebGLContext
*);
109 class WebGLExtensionDebugRendererInfo
: public WebGLExtensionBase
{
111 explicit WebGLExtensionDebugRendererInfo(WebGLContext
* webgl
)
112 : WebGLExtensionBase(webgl
) {}
115 class WebGLExtensionDebugShaders
: public WebGLExtensionBase
{
117 explicit WebGLExtensionDebugShaders(WebGLContext
* webgl
)
118 : WebGLExtensionBase(webgl
) {}
121 class WebGLExtensionDepthClamp
: public WebGLExtensionBase
{
123 explicit WebGLExtensionDepthClamp(WebGLContext
* webgl
);
126 class WebGLExtensionDepthTexture
: public WebGLExtensionBase
{
128 explicit WebGLExtensionDepthTexture(WebGLContext
*);
129 static bool IsSupported(const WebGLContext
*);
132 class WebGLExtensionDrawBuffersIndexed
: public WebGLExtensionBase
{
134 explicit WebGLExtensionDrawBuffersIndexed(WebGLContext
* webgl
)
135 : WebGLExtensionBase(webgl
) {}
138 class WebGLExtensionElementIndexUint
: public WebGLExtensionBase
{
140 explicit WebGLExtensionElementIndexUint(WebGLContext
* webgl
)
141 : WebGLExtensionBase(webgl
) {}
144 class WebGLExtensionExplicitPresent
: public WebGLExtensionBase
{
146 explicit WebGLExtensionExplicitPresent(WebGLContext
*);
147 static bool IsSupported(const WebGLContext
*);
150 class WebGLExtensionEXTColorBufferFloat
: public WebGLExtensionBase
{
152 explicit WebGLExtensionEXTColorBufferFloat(WebGLContext
*);
153 static bool IsSupported(const WebGLContext
*);
156 class WebGLExtensionFBORenderMipmap
: public WebGLExtensionBase
{
158 explicit WebGLExtensionFBORenderMipmap(WebGLContext
* webgl
);
159 static bool IsSupported(const WebGLContext
*);
162 class WebGLExtensionFloatBlend
: public WebGLExtensionBase
{
164 explicit WebGLExtensionFloatBlend(WebGLContext
* webgl
);
165 static bool IsSupported(const WebGLContext
*);
168 class WebGLExtensionFragDepth
: public WebGLExtensionBase
{
170 explicit WebGLExtensionFragDepth(WebGLContext
*);
171 static bool IsSupported(const WebGLContext
* context
);
174 class WebGLExtensionLoseContext
: public WebGLExtensionBase
{
176 explicit WebGLExtensionLoseContext(WebGLContext
* webgl
)
177 : WebGLExtensionBase(webgl
) {}
180 class WebGLExtensionMultiview
: public WebGLExtensionBase
{
182 explicit WebGLExtensionMultiview(WebGLContext
*);
183 static bool IsSupported(const WebGLContext
*);
186 class WebGLExtensionProvokingVertex
: public WebGLExtensionBase
{
188 explicit WebGLExtensionProvokingVertex(WebGLContext
* webgl
)
189 : WebGLExtensionBase(webgl
) {}
192 class WebGLExtensionSRGB
: public WebGLExtensionBase
{
194 explicit WebGLExtensionSRGB(WebGLContext
*);
195 static bool IsSupported(const WebGLContext
* context
);
198 class WebGLExtensionStandardDerivatives
: public WebGLExtensionBase
{
200 explicit WebGLExtensionStandardDerivatives(WebGLContext
* webgl
)
201 : WebGLExtensionBase(webgl
) {}
204 class WebGLExtensionShaderTextureLod
: public WebGLExtensionBase
{
206 explicit WebGLExtensionShaderTextureLod(WebGLContext
*);
207 static bool IsSupported(const WebGLContext
* context
);
210 class WebGLExtensionTextureFilterAnisotropic
: public WebGLExtensionBase
{
212 explicit WebGLExtensionTextureFilterAnisotropic(WebGLContext
* webgl
)
213 : WebGLExtensionBase(webgl
) {}
216 class WebGLExtensionTextureFloat
: public WebGLExtensionBase
{
218 static void InitWebGLFormats(webgl::FormatUsageAuthority
* authority
);
220 explicit WebGLExtensionTextureFloat(WebGLContext
*);
221 static bool IsSupported(const WebGLContext
*);
224 class WebGLExtensionTextureFloatLinear
: public WebGLExtensionBase
{
226 explicit WebGLExtensionTextureFloatLinear(WebGLContext
*);
229 class WebGLExtensionTextureHalfFloat
: public WebGLExtensionBase
{
231 static void InitWebGLFormats(webgl::FormatUsageAuthority
* authority
);
233 explicit WebGLExtensionTextureHalfFloat(WebGLContext
*);
234 static bool IsSupported(const WebGLContext
*);
237 class WebGLExtensionTextureHalfFloatLinear
: public WebGLExtensionBase
{
239 explicit WebGLExtensionTextureHalfFloatLinear(WebGLContext
*);
242 class WebGLExtensionTextureNorm16
: public WebGLExtensionBase
{
244 static bool IsSupported(const WebGLContext
*);
245 explicit WebGLExtensionTextureNorm16(WebGLContext
*);
248 class WebGLExtensionColorBufferFloat
: public WebGLExtensionBase
{
250 explicit WebGLExtensionColorBufferFloat(WebGLContext
*);
251 static bool IsSupported(const WebGLContext
*);
253 void SetRenderable(const webgl::FormatRenderableState
&);
254 void OnSetExplicit() override
;
257 class WebGLExtensionColorBufferHalfFloat
: public WebGLExtensionBase
{
259 explicit WebGLExtensionColorBufferHalfFloat(WebGLContext
*);
260 static bool IsSupported(const WebGLContext
*);
262 void SetRenderable(const webgl::FormatRenderableState
&);
263 void OnSetExplicit() override
;
266 class WebGLExtensionDrawBuffers
: public WebGLExtensionBase
{
268 explicit WebGLExtensionDrawBuffers(WebGLContext
*);
269 static bool IsSupported(const WebGLContext
*);
272 class WebGLExtensionVertexArray
: public WebGLExtensionBase
{
274 explicit WebGLExtensionVertexArray(WebGLContext
* webgl
)
275 : WebGLExtensionBase(webgl
) {}
278 class WebGLExtensionInstancedArrays
: public WebGLExtensionBase
{
280 explicit WebGLExtensionInstancedArrays(WebGLContext
* webgl
);
281 static bool IsSupported(const WebGLContext
* webgl
);
284 class WebGLExtensionBlendMinMax
: public WebGLExtensionBase
{
286 explicit WebGLExtensionBlendMinMax(WebGLContext
* webgl
);
287 static bool IsSupported(const WebGLContext
*);
290 class WebGLExtensionDisjointTimerQuery
: public WebGLExtensionBase
{
292 explicit WebGLExtensionDisjointTimerQuery(WebGLContext
* webgl
);
293 static bool IsSupported(const WebGLContext
*);
296 class WebGLExtensionMOZDebug final
: public WebGLExtensionBase
{
298 explicit WebGLExtensionMOZDebug(WebGLContext
* webgl
)
299 : WebGLExtensionBase(webgl
) {}
302 } // namespace mozilla
304 #endif // WEBGL_EXTENSIONS_H_