Bug 1732219 - Add API for fetching the preview image. r=geckoview-reviewers,agi,mconley
[gecko.git] / dom / canvas / WebGLExtensions.h
blob5d3656961d4124996c21733e57c1b78fefda2568
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"
10 #include "nsString.h"
11 #include "nsTArray.h"
12 #include "nsWrapperCache.h"
13 #include "WebGLObjectModel.h"
14 #include "WebGLTypes.h"
15 #include "WebGLFormats.h"
17 namespace mozilla {
18 class ErrorResult;
20 namespace dom {
21 template <typename>
22 struct Nullable;
23 template <typename>
24 class Sequence;
25 } // namespace dom
27 namespace webgl {
28 class FormatUsageAuthority;
29 } // namespace webgl
31 class WebGLContext;
32 class WebGLQuery;
33 class WebGLShader;
34 class WebGLTexture;
35 class WebGLVertexArray;
37 class WebGLExtensionBase {
38 protected:
39 WebGLContext* const mContext;
41 private:
42 bool mIsExplicit = false;
44 protected:
45 explicit WebGLExtensionBase(WebGLContext* context) : mContext(context) {}
47 public:
48 virtual ~WebGLExtensionBase() = default;
50 private:
51 virtual void OnSetExplicit() {}
53 public:
54 void SetExplicit() {
55 mIsExplicit = true;
56 OnSetExplicit();
59 bool IsExplicit() const { return mIsExplicit; }
62 ////
64 class WebGLExtensionCompressedTextureASTC : public WebGLExtensionBase {
65 public:
66 explicit WebGLExtensionCompressedTextureASTC(WebGLContext* webgl);
67 static bool IsSupported(const WebGLContext* webgl);
70 class WebGLExtensionCompressedTextureBPTC final : public WebGLExtensionBase {
71 public:
72 explicit WebGLExtensionCompressedTextureBPTC(WebGLContext* webgl);
73 static bool IsSupported(const WebGLContext* webgl);
76 class WebGLExtensionCompressedTextureES3 : public WebGLExtensionBase {
77 public:
78 explicit WebGLExtensionCompressedTextureES3(WebGLContext*);
81 class WebGLExtensionCompressedTextureETC1 : public WebGLExtensionBase {
82 public:
83 explicit WebGLExtensionCompressedTextureETC1(WebGLContext*);
86 class WebGLExtensionCompressedTexturePVRTC : public WebGLExtensionBase {
87 public:
88 explicit WebGLExtensionCompressedTexturePVRTC(WebGLContext*);
91 class WebGLExtensionCompressedTextureRGTC final : public WebGLExtensionBase {
92 public:
93 explicit WebGLExtensionCompressedTextureRGTC(WebGLContext* webgl);
94 static bool IsSupported(const WebGLContext* webgl);
97 class WebGLExtensionCompressedTextureS3TC : public WebGLExtensionBase {
98 public:
99 explicit WebGLExtensionCompressedTextureS3TC(WebGLContext*);
100 static bool IsSupported(const WebGLContext*);
103 class WebGLExtensionCompressedTextureS3TC_SRGB : public WebGLExtensionBase {
104 public:
105 explicit WebGLExtensionCompressedTextureS3TC_SRGB(WebGLContext*);
106 static bool IsSupported(const WebGLContext*);
109 class WebGLExtensionDebugRendererInfo : public WebGLExtensionBase {
110 public:
111 explicit WebGLExtensionDebugRendererInfo(WebGLContext* webgl)
112 : WebGLExtensionBase(webgl) {}
115 class WebGLExtensionDebugShaders : public WebGLExtensionBase {
116 public:
117 explicit WebGLExtensionDebugShaders(WebGLContext* webgl)
118 : WebGLExtensionBase(webgl) {}
121 class WebGLExtensionDepthTexture : public WebGLExtensionBase {
122 public:
123 explicit WebGLExtensionDepthTexture(WebGLContext*);
124 static bool IsSupported(const WebGLContext*);
127 class WebGLExtensionDrawBuffersIndexed : public WebGLExtensionBase {
128 public:
129 explicit WebGLExtensionDrawBuffersIndexed(WebGLContext* webgl)
130 : WebGLExtensionBase(webgl) {}
133 class WebGLExtensionElementIndexUint : public WebGLExtensionBase {
134 public:
135 explicit WebGLExtensionElementIndexUint(WebGLContext* webgl)
136 : WebGLExtensionBase(webgl) {}
139 class WebGLExtensionExplicitPresent : public WebGLExtensionBase {
140 public:
141 explicit WebGLExtensionExplicitPresent(WebGLContext*);
142 static bool IsSupported(const WebGLContext*);
145 class WebGLExtensionEXTColorBufferFloat : public WebGLExtensionBase {
146 public:
147 explicit WebGLExtensionEXTColorBufferFloat(WebGLContext*);
148 static bool IsSupported(const WebGLContext*);
151 class WebGLExtensionFBORenderMipmap : public WebGLExtensionBase {
152 public:
153 explicit WebGLExtensionFBORenderMipmap(WebGLContext* webgl);
154 static bool IsSupported(const WebGLContext*);
157 class WebGLExtensionFloatBlend : public WebGLExtensionBase {
158 public:
159 explicit WebGLExtensionFloatBlend(WebGLContext* webgl);
160 static bool IsSupported(const WebGLContext*);
163 class WebGLExtensionFragDepth : public WebGLExtensionBase {
164 public:
165 explicit WebGLExtensionFragDepth(WebGLContext*);
166 static bool IsSupported(const WebGLContext* context);
169 class WebGLExtensionLoseContext : public WebGLExtensionBase {
170 public:
171 explicit WebGLExtensionLoseContext(WebGLContext* webgl)
172 : WebGLExtensionBase(webgl) {}
175 class WebGLExtensionMultiview : public WebGLExtensionBase {
176 public:
177 explicit WebGLExtensionMultiview(WebGLContext*);
178 static bool IsSupported(const WebGLContext*);
181 class WebGLExtensionSRGB : public WebGLExtensionBase {
182 public:
183 explicit WebGLExtensionSRGB(WebGLContext*);
184 static bool IsSupported(const WebGLContext* context);
187 class WebGLExtensionStandardDerivatives : public WebGLExtensionBase {
188 public:
189 explicit WebGLExtensionStandardDerivatives(WebGLContext* webgl)
190 : WebGLExtensionBase(webgl) {}
193 class WebGLExtensionShaderTextureLod : public WebGLExtensionBase {
194 public:
195 explicit WebGLExtensionShaderTextureLod(WebGLContext*);
196 static bool IsSupported(const WebGLContext* context);
199 class WebGLExtensionTextureFilterAnisotropic : public WebGLExtensionBase {
200 public:
201 explicit WebGLExtensionTextureFilterAnisotropic(WebGLContext* webgl)
202 : WebGLExtensionBase(webgl) {}
205 class WebGLExtensionTextureFloat : public WebGLExtensionBase {
206 public:
207 static void InitWebGLFormats(webgl::FormatUsageAuthority* authority);
209 explicit WebGLExtensionTextureFloat(WebGLContext*);
210 static bool IsSupported(const WebGLContext*);
213 class WebGLExtensionTextureFloatLinear : public WebGLExtensionBase {
214 public:
215 explicit WebGLExtensionTextureFloatLinear(WebGLContext*);
218 class WebGLExtensionTextureHalfFloat : public WebGLExtensionBase {
219 public:
220 static void InitWebGLFormats(webgl::FormatUsageAuthority* authority);
222 explicit WebGLExtensionTextureHalfFloat(WebGLContext*);
223 static bool IsSupported(const WebGLContext*);
226 class WebGLExtensionTextureHalfFloatLinear : public WebGLExtensionBase {
227 public:
228 explicit WebGLExtensionTextureHalfFloatLinear(WebGLContext*);
231 class WebGLExtensionTextureNorm16 : public WebGLExtensionBase {
232 public:
233 static bool IsSupported(const WebGLContext*);
234 explicit WebGLExtensionTextureNorm16(WebGLContext*);
237 class WebGLExtensionColorBufferFloat : public WebGLExtensionBase {
238 public:
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 {
247 public:
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 {
256 public:
257 explicit WebGLExtensionDrawBuffers(WebGLContext*);
258 static bool IsSupported(const WebGLContext*);
261 class WebGLExtensionVertexArray : public WebGLExtensionBase {
262 public:
263 explicit WebGLExtensionVertexArray(WebGLContext* webgl)
264 : WebGLExtensionBase(webgl) {}
267 class WebGLExtensionInstancedArrays : public WebGLExtensionBase {
268 public:
269 explicit WebGLExtensionInstancedArrays(WebGLContext* webgl);
270 static bool IsSupported(const WebGLContext* webgl);
273 class WebGLExtensionBlendMinMax : public WebGLExtensionBase {
274 public:
275 explicit WebGLExtensionBlendMinMax(WebGLContext* webgl);
276 static bool IsSupported(const WebGLContext*);
279 class WebGLExtensionDisjointTimerQuery : public WebGLExtensionBase {
280 public:
281 explicit WebGLExtensionDisjointTimerQuery(WebGLContext* webgl);
282 static bool IsSupported(const WebGLContext*);
285 class WebGLExtensionMOZDebug final : public WebGLExtensionBase {
286 public:
287 explicit WebGLExtensionMOZDebug(WebGLContext* webgl)
288 : WebGLExtensionBase(webgl) {}
291 } // namespace mozilla
293 #endif // WEBGL_EXTENSIONS_H_