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 WebGLExtensionProvokingVertex
: public WebGLExtensionBase
{
183 explicit WebGLExtensionProvokingVertex(WebGLContext
* webgl
)
184 : WebGLExtensionBase(webgl
) {}
187 class WebGLExtensionSRGB
: public WebGLExtensionBase
{
189 explicit WebGLExtensionSRGB(WebGLContext
*);
190 static bool IsSupported(const WebGLContext
* context
);
193 class WebGLExtensionStandardDerivatives
: public WebGLExtensionBase
{
195 explicit WebGLExtensionStandardDerivatives(WebGLContext
* webgl
)
196 : WebGLExtensionBase(webgl
) {}
199 class WebGLExtensionShaderTextureLod
: public WebGLExtensionBase
{
201 explicit WebGLExtensionShaderTextureLod(WebGLContext
*);
202 static bool IsSupported(const WebGLContext
* context
);
205 class WebGLExtensionTextureFilterAnisotropic
: public WebGLExtensionBase
{
207 explicit WebGLExtensionTextureFilterAnisotropic(WebGLContext
* webgl
)
208 : WebGLExtensionBase(webgl
) {}
211 class WebGLExtensionTextureFloat
: public WebGLExtensionBase
{
213 static void InitWebGLFormats(webgl::FormatUsageAuthority
* authority
);
215 explicit WebGLExtensionTextureFloat(WebGLContext
*);
216 static bool IsSupported(const WebGLContext
*);
219 class WebGLExtensionTextureFloatLinear
: public WebGLExtensionBase
{
221 explicit WebGLExtensionTextureFloatLinear(WebGLContext
*);
224 class WebGLExtensionTextureHalfFloat
: public WebGLExtensionBase
{
226 static void InitWebGLFormats(webgl::FormatUsageAuthority
* authority
);
228 explicit WebGLExtensionTextureHalfFloat(WebGLContext
*);
229 static bool IsSupported(const WebGLContext
*);
232 class WebGLExtensionTextureHalfFloatLinear
: public WebGLExtensionBase
{
234 explicit WebGLExtensionTextureHalfFloatLinear(WebGLContext
*);
237 class WebGLExtensionTextureNorm16
: public WebGLExtensionBase
{
239 static bool IsSupported(const WebGLContext
*);
240 explicit WebGLExtensionTextureNorm16(WebGLContext
*);
243 class WebGLExtensionColorBufferFloat
: public WebGLExtensionBase
{
245 explicit WebGLExtensionColorBufferFloat(WebGLContext
*);
246 static bool IsSupported(const WebGLContext
*);
248 void SetRenderable(const webgl::FormatRenderableState
);
249 void OnSetExplicit() override
;
252 class WebGLExtensionColorBufferHalfFloat
: public WebGLExtensionBase
{
254 explicit WebGLExtensionColorBufferHalfFloat(WebGLContext
*);
255 static bool IsSupported(const WebGLContext
*);
257 void SetRenderable(const webgl::FormatRenderableState
);
258 void OnSetExplicit() override
;
261 class WebGLExtensionDrawBuffers
: public WebGLExtensionBase
{
263 explicit WebGLExtensionDrawBuffers(WebGLContext
*);
264 static bool IsSupported(const WebGLContext
*);
267 class WebGLExtensionVertexArray
: public WebGLExtensionBase
{
269 explicit WebGLExtensionVertexArray(WebGLContext
* webgl
)
270 : WebGLExtensionBase(webgl
) {}
273 class WebGLExtensionInstancedArrays
: public WebGLExtensionBase
{
275 explicit WebGLExtensionInstancedArrays(WebGLContext
* webgl
);
276 static bool IsSupported(const WebGLContext
* webgl
);
279 class WebGLExtensionBlendMinMax
: public WebGLExtensionBase
{
281 explicit WebGLExtensionBlendMinMax(WebGLContext
* webgl
);
282 static bool IsSupported(const WebGLContext
*);
285 class WebGLExtensionDisjointTimerQuery
: public WebGLExtensionBase
{
287 explicit WebGLExtensionDisjointTimerQuery(WebGLContext
* webgl
);
288 static bool IsSupported(const WebGLContext
*);
291 class WebGLExtensionMOZDebug final
: public WebGLExtensionBase
{
293 explicit WebGLExtensionMOZDebug(WebGLContext
* webgl
)
294 : WebGLExtensionBase(webgl
) {}
297 } // namespace mozilla
299 #endif // WEBGL_EXTENSIONS_H_