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"
15 #include "WebGLFormats.h"
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 WebGLExtensionDepthTexture
: public WebGLExtensionBase
{
123 explicit WebGLExtensionDepthTexture(WebGLContext
*);
124 static bool IsSupported(const WebGLContext
*);
127 class WebGLExtensionDrawBuffersIndexed
: public WebGLExtensionBase
{
129 explicit WebGLExtensionDrawBuffersIndexed(WebGLContext
* webgl
)
130 : WebGLExtensionBase(webgl
) {}
133 class WebGLExtensionElementIndexUint
: public WebGLExtensionBase
{
135 explicit WebGLExtensionElementIndexUint(WebGLContext
* webgl
)
136 : WebGLExtensionBase(webgl
) {}
139 class WebGLExtensionExplicitPresent
: public WebGLExtensionBase
{
141 explicit WebGLExtensionExplicitPresent(WebGLContext
*);
142 static bool IsSupported(const WebGLContext
*);
145 class WebGLExtensionEXTColorBufferFloat
: public WebGLExtensionBase
{
147 explicit WebGLExtensionEXTColorBufferFloat(WebGLContext
*);
148 static bool IsSupported(const WebGLContext
*);
151 class WebGLExtensionFBORenderMipmap
: public WebGLExtensionBase
{
153 explicit WebGLExtensionFBORenderMipmap(WebGLContext
* webgl
);
154 static bool IsSupported(const WebGLContext
*);
157 class WebGLExtensionFloatBlend
: public WebGLExtensionBase
{
159 explicit WebGLExtensionFloatBlend(WebGLContext
* webgl
);
160 static bool IsSupported(const WebGLContext
*);
163 class WebGLExtensionFragDepth
: public WebGLExtensionBase
{
165 explicit WebGLExtensionFragDepth(WebGLContext
*);
166 static bool IsSupported(const WebGLContext
* context
);
169 class WebGLExtensionLoseContext
: public WebGLExtensionBase
{
171 explicit WebGLExtensionLoseContext(WebGLContext
* webgl
)
172 : WebGLExtensionBase(webgl
) {}
175 class WebGLExtensionMultiview
: public WebGLExtensionBase
{
177 explicit WebGLExtensionMultiview(WebGLContext
*);
178 static bool IsSupported(const WebGLContext
*);
181 class WebGLExtensionSRGB
: public WebGLExtensionBase
{
183 explicit WebGLExtensionSRGB(WebGLContext
*);
184 static bool IsSupported(const WebGLContext
* context
);
187 class WebGLExtensionStandardDerivatives
: public WebGLExtensionBase
{
189 explicit WebGLExtensionStandardDerivatives(WebGLContext
* webgl
)
190 : WebGLExtensionBase(webgl
) {}
193 class WebGLExtensionShaderTextureLod
: public WebGLExtensionBase
{
195 explicit WebGLExtensionShaderTextureLod(WebGLContext
*);
196 static bool IsSupported(const WebGLContext
* context
);
199 class WebGLExtensionTextureFilterAnisotropic
: public WebGLExtensionBase
{
201 explicit WebGLExtensionTextureFilterAnisotropic(WebGLContext
* webgl
)
202 : WebGLExtensionBase(webgl
) {}
205 class WebGLExtensionTextureFloat
: public WebGLExtensionBase
{
207 static void InitWebGLFormats(webgl::FormatUsageAuthority
* authority
);
209 explicit WebGLExtensionTextureFloat(WebGLContext
*);
210 static bool IsSupported(const WebGLContext
*);
213 class WebGLExtensionTextureFloatLinear
: public WebGLExtensionBase
{
215 explicit WebGLExtensionTextureFloatLinear(WebGLContext
*);
218 class WebGLExtensionTextureHalfFloat
: public WebGLExtensionBase
{
220 static void InitWebGLFormats(webgl::FormatUsageAuthority
* authority
);
222 explicit WebGLExtensionTextureHalfFloat(WebGLContext
*);
223 static bool IsSupported(const WebGLContext
*);
226 class WebGLExtensionTextureHalfFloatLinear
: public WebGLExtensionBase
{
228 explicit WebGLExtensionTextureHalfFloatLinear(WebGLContext
*);
231 class WebGLExtensionTextureNorm16
: public WebGLExtensionBase
{
233 static bool IsSupported(const WebGLContext
*);
234 explicit WebGLExtensionTextureNorm16(WebGLContext
*);
237 class WebGLExtensionColorBufferFloat
: public WebGLExtensionBase
{
239 explicit WebGLExtensionColorBufferFloat(WebGLContext
*);
240 static bool IsSupported(const WebGLContext
*);
242 void SetRenderable(const webgl::FormatRenderableState
);
243 void OnSetExplicit() override
;
246 class WebGLExtensionColorBufferHalfFloat
: public WebGLExtensionBase
{
248 explicit WebGLExtensionColorBufferHalfFloat(WebGLContext
*);
249 static bool IsSupported(const WebGLContext
*);
251 void SetRenderable(const webgl::FormatRenderableState
);
252 void OnSetExplicit() override
;
255 class WebGLExtensionDrawBuffers
: public WebGLExtensionBase
{
257 explicit WebGLExtensionDrawBuffers(WebGLContext
*);
258 static bool IsSupported(const WebGLContext
*);
261 class WebGLExtensionVertexArray
: public WebGLExtensionBase
{
263 explicit WebGLExtensionVertexArray(WebGLContext
* webgl
)
264 : WebGLExtensionBase(webgl
) {}
267 class WebGLExtensionInstancedArrays
: public WebGLExtensionBase
{
269 explicit WebGLExtensionInstancedArrays(WebGLContext
* webgl
);
270 static bool IsSupported(const WebGLContext
* webgl
);
273 class WebGLExtensionBlendMinMax
: public WebGLExtensionBase
{
275 explicit WebGLExtensionBlendMinMax(WebGLContext
* webgl
);
276 static bool IsSupported(const WebGLContext
*);
279 class WebGLExtensionDisjointTimerQuery
: public WebGLExtensionBase
{
281 explicit WebGLExtensionDisjointTimerQuery(WebGLContext
* webgl
);
282 static bool IsSupported(const WebGLContext
*);
285 class WebGLExtensionMOZDebug final
: public WebGLExtensionBase
{
287 explicit WebGLExtensionMOZDebug(WebGLContext
* webgl
)
288 : WebGLExtensionBase(webgl
) {}
291 } // namespace mozilla
293 #endif // WEBGL_EXTENSIONS_H_