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