Merge mozilla-central to autoland on a CLOSED TREE
[gecko.git] / dom / canvas / WebGLExtensions.h
blobc8b4fda22dbecc0cc1e6728d20404ca2a924b57e
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 WebGLExtensionProvokingVertex : public WebGLExtensionBase {
182 public:
183 explicit WebGLExtensionProvokingVertex(WebGLContext* webgl)
184 : WebGLExtensionBase(webgl) {}
187 class WebGLExtensionSRGB : public WebGLExtensionBase {
188 public:
189 explicit WebGLExtensionSRGB(WebGLContext*);
190 static bool IsSupported(const WebGLContext* context);
193 class WebGLExtensionStandardDerivatives : public WebGLExtensionBase {
194 public:
195 explicit WebGLExtensionStandardDerivatives(WebGLContext* webgl)
196 : WebGLExtensionBase(webgl) {}
199 class WebGLExtensionShaderTextureLod : public WebGLExtensionBase {
200 public:
201 explicit WebGLExtensionShaderTextureLod(WebGLContext*);
202 static bool IsSupported(const WebGLContext* context);
205 class WebGLExtensionTextureFilterAnisotropic : public WebGLExtensionBase {
206 public:
207 explicit WebGLExtensionTextureFilterAnisotropic(WebGLContext* webgl)
208 : WebGLExtensionBase(webgl) {}
211 class WebGLExtensionTextureFloat : public WebGLExtensionBase {
212 public:
213 static void InitWebGLFormats(webgl::FormatUsageAuthority* authority);
215 explicit WebGLExtensionTextureFloat(WebGLContext*);
216 static bool IsSupported(const WebGLContext*);
219 class WebGLExtensionTextureFloatLinear : public WebGLExtensionBase {
220 public:
221 explicit WebGLExtensionTextureFloatLinear(WebGLContext*);
224 class WebGLExtensionTextureHalfFloat : public WebGLExtensionBase {
225 public:
226 static void InitWebGLFormats(webgl::FormatUsageAuthority* authority);
228 explicit WebGLExtensionTextureHalfFloat(WebGLContext*);
229 static bool IsSupported(const WebGLContext*);
232 class WebGLExtensionTextureHalfFloatLinear : public WebGLExtensionBase {
233 public:
234 explicit WebGLExtensionTextureHalfFloatLinear(WebGLContext*);
237 class WebGLExtensionTextureNorm16 : public WebGLExtensionBase {
238 public:
239 static bool IsSupported(const WebGLContext*);
240 explicit WebGLExtensionTextureNorm16(WebGLContext*);
243 class WebGLExtensionColorBufferFloat : public WebGLExtensionBase {
244 public:
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 {
253 public:
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 {
262 public:
263 explicit WebGLExtensionDrawBuffers(WebGLContext*);
264 static bool IsSupported(const WebGLContext*);
267 class WebGLExtensionVertexArray : public WebGLExtensionBase {
268 public:
269 explicit WebGLExtensionVertexArray(WebGLContext* webgl)
270 : WebGLExtensionBase(webgl) {}
273 class WebGLExtensionInstancedArrays : public WebGLExtensionBase {
274 public:
275 explicit WebGLExtensionInstancedArrays(WebGLContext* webgl);
276 static bool IsSupported(const WebGLContext* webgl);
279 class WebGLExtensionBlendMinMax : public WebGLExtensionBase {
280 public:
281 explicit WebGLExtensionBlendMinMax(WebGLContext* webgl);
282 static bool IsSupported(const WebGLContext*);
285 class WebGLExtensionDisjointTimerQuery : public WebGLExtensionBase {
286 public:
287 explicit WebGLExtensionDisjointTimerQuery(WebGLContext* webgl);
288 static bool IsSupported(const WebGLContext*);
291 class WebGLExtensionMOZDebug final : public WebGLExtensionBase {
292 public:
293 explicit WebGLExtensionMOZDebug(WebGLContext* webgl)
294 : WebGLExtensionBase(webgl) {}
297 } // namespace mozilla
299 #endif // WEBGL_EXTENSIONS_H_