Bumping manifests a=b2g-bump
[gecko.git] / dom / canvas / WebGLExtensions.h
blob4fa432602d6faf7c42a9c59eccac101b08cdf9c6
1 /* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
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 "jsapi.h"
10 #include "mozilla/Attributes.h"
11 #include "nsWrapperCache.h"
12 #include "WebGLObjectModel.h"
13 #include "WebGLTypes.h"
15 namespace mozilla {
17 class WebGLContext;
18 class WebGLShader;
19 class WebGLVertexArray;
21 class WebGLExtensionBase
22 : public nsWrapperCache
23 , public WebGLContextBoundObject
25 public:
26 explicit WebGLExtensionBase(WebGLContext* webgl);
28 WebGLContext* GetParentObject() const {
29 return Context();
32 void MarkLost();
34 NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(WebGLExtensionBase)
35 NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(WebGLExtensionBase)
37 protected:
38 virtual ~WebGLExtensionBase();
40 bool mIsLost;
43 #define DECL_WEBGL_EXTENSION_GOOP \
44 virtual JSObject* WrapObject(JSContext* cx) MOZ_OVERRIDE;
46 #define IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionType) \
47 JSObject* \
48 WebGLExtensionType::WrapObject(JSContext* cx) { \
49 return dom::WebGLExtensionType##Binding::Wrap(cx, this); \
52 class WebGLExtensionCompressedTextureATC
53 : public WebGLExtensionBase
55 public:
56 explicit WebGLExtensionCompressedTextureATC(WebGLContext*);
57 virtual ~WebGLExtensionCompressedTextureATC();
59 DECL_WEBGL_EXTENSION_GOOP
62 class WebGLExtensionCompressedTextureETC1
63 : public WebGLExtensionBase
65 public:
66 explicit WebGLExtensionCompressedTextureETC1(WebGLContext*);
67 virtual ~WebGLExtensionCompressedTextureETC1();
69 DECL_WEBGL_EXTENSION_GOOP
72 class WebGLExtensionCompressedTexturePVRTC
73 : public WebGLExtensionBase
75 public:
76 explicit WebGLExtensionCompressedTexturePVRTC(WebGLContext*);
77 virtual ~WebGLExtensionCompressedTexturePVRTC();
79 DECL_WEBGL_EXTENSION_GOOP
82 class WebGLExtensionCompressedTextureS3TC
83 : public WebGLExtensionBase
85 public:
86 explicit WebGLExtensionCompressedTextureS3TC(WebGLContext*);
87 virtual ~WebGLExtensionCompressedTextureS3TC();
89 DECL_WEBGL_EXTENSION_GOOP
92 class WebGLExtensionDebugRendererInfo
93 : public WebGLExtensionBase
95 public:
96 explicit WebGLExtensionDebugRendererInfo(WebGLContext*);
97 virtual ~WebGLExtensionDebugRendererInfo();
99 DECL_WEBGL_EXTENSION_GOOP
102 class WebGLExtensionDebugShaders
103 : public WebGLExtensionBase
105 public:
106 explicit WebGLExtensionDebugShaders(WebGLContext*);
107 virtual ~WebGLExtensionDebugShaders();
109 void GetTranslatedShaderSource(WebGLShader* shader, nsAString& retval);
111 DECL_WEBGL_EXTENSION_GOOP
114 class WebGLExtensionDepthTexture
115 : public WebGLExtensionBase
117 public:
118 explicit WebGLExtensionDepthTexture(WebGLContext*);
119 virtual ~WebGLExtensionDepthTexture();
121 DECL_WEBGL_EXTENSION_GOOP
124 class WebGLExtensionElementIndexUint
125 : public WebGLExtensionBase
127 public:
128 explicit WebGLExtensionElementIndexUint(WebGLContext*);
129 virtual ~WebGLExtensionElementIndexUint();
131 DECL_WEBGL_EXTENSION_GOOP
134 class WebGLExtensionFragDepth
135 : public WebGLExtensionBase
137 public:
138 explicit WebGLExtensionFragDepth(WebGLContext*);
139 virtual ~WebGLExtensionFragDepth();
141 static bool IsSupported(const WebGLContext* context);
143 DECL_WEBGL_EXTENSION_GOOP
146 class WebGLExtensionLoseContext
147 : public WebGLExtensionBase
149 public:
150 explicit WebGLExtensionLoseContext(WebGLContext*);
151 virtual ~WebGLExtensionLoseContext();
153 void LoseContext();
154 void RestoreContext();
156 DECL_WEBGL_EXTENSION_GOOP
159 class WebGLExtensionSRGB
160 : public WebGLExtensionBase
162 public:
163 explicit WebGLExtensionSRGB(WebGLContext*);
164 virtual ~WebGLExtensionSRGB();
166 static bool IsSupported(const WebGLContext* context);
168 DECL_WEBGL_EXTENSION_GOOP
171 class WebGLExtensionStandardDerivatives
172 : public WebGLExtensionBase
174 public:
175 explicit WebGLExtensionStandardDerivatives(WebGLContext*);
176 virtual ~WebGLExtensionStandardDerivatives();
178 DECL_WEBGL_EXTENSION_GOOP
181 class WebGLExtensionShaderTextureLod
182 : public WebGLExtensionBase
184 public:
185 explicit WebGLExtensionShaderTextureLod(WebGLContext*);
186 virtual ~WebGLExtensionShaderTextureLod();
188 DECL_WEBGL_EXTENSION_GOOP
191 class WebGLExtensionTextureFilterAnisotropic
192 : public WebGLExtensionBase
194 public:
195 explicit WebGLExtensionTextureFilterAnisotropic(WebGLContext*);
196 virtual ~WebGLExtensionTextureFilterAnisotropic();
198 DECL_WEBGL_EXTENSION_GOOP
201 class WebGLExtensionTextureFloat
202 : public WebGLExtensionBase
204 public:
205 explicit WebGLExtensionTextureFloat(WebGLContext*);
206 virtual ~WebGLExtensionTextureFloat();
208 DECL_WEBGL_EXTENSION_GOOP
211 class WebGLExtensionTextureFloatLinear
212 : public WebGLExtensionBase
214 public:
215 explicit WebGLExtensionTextureFloatLinear(WebGLContext*);
216 virtual ~WebGLExtensionTextureFloatLinear();
218 DECL_WEBGL_EXTENSION_GOOP
221 class WebGLExtensionTextureHalfFloat
222 : public WebGLExtensionBase
224 public:
225 explicit WebGLExtensionTextureHalfFloat(WebGLContext*);
226 virtual ~WebGLExtensionTextureHalfFloat();
228 DECL_WEBGL_EXTENSION_GOOP
231 class WebGLExtensionTextureHalfFloatLinear
232 : public WebGLExtensionBase
234 public:
235 explicit WebGLExtensionTextureHalfFloatLinear(WebGLContext*);
236 virtual ~WebGLExtensionTextureHalfFloatLinear();
238 DECL_WEBGL_EXTENSION_GOOP
241 class WebGLExtensionColorBufferFloat
242 : public WebGLExtensionBase
244 public:
245 explicit WebGLExtensionColorBufferFloat(WebGLContext*);
246 virtual ~WebGLExtensionColorBufferFloat();
248 static bool IsSupported(const WebGLContext*);
250 DECL_WEBGL_EXTENSION_GOOP
253 class WebGLExtensionColorBufferHalfFloat
254 : public WebGLExtensionBase
256 public:
257 explicit WebGLExtensionColorBufferHalfFloat(WebGLContext*);
258 virtual ~WebGLExtensionColorBufferHalfFloat();
260 static bool IsSupported(const WebGLContext*);
262 DECL_WEBGL_EXTENSION_GOOP
265 class WebGLExtensionDrawBuffers
266 : public WebGLExtensionBase
268 public:
269 explicit WebGLExtensionDrawBuffers(WebGLContext*);
270 virtual ~WebGLExtensionDrawBuffers();
272 void DrawBuffersWEBGL(const dom::Sequence<GLenum>& buffers);
274 static bool IsSupported(const WebGLContext*);
276 static const size_t kMinColorAttachments = 4;
277 static const size_t kMinDrawBuffers = 4;
279 WEBGL_draw_buffers does not give a minal value for GL_MAX_DRAW_BUFFERS. But, we request
280 for GL_MAX_DRAW_BUFFERS = 4 at least to be able to use all requested color attachments.
281 See DrawBuffersWEBGL in WebGLExtensionDrawBuffers.cpp inner comments for more informations.
284 DECL_WEBGL_EXTENSION_GOOP
287 class WebGLExtensionVertexArray
288 : public WebGLExtensionBase
290 public:
291 explicit WebGLExtensionVertexArray(WebGLContext* webgl);
292 virtual ~WebGLExtensionVertexArray();
294 already_AddRefed<WebGLVertexArray> CreateVertexArrayOES();
295 void DeleteVertexArrayOES(WebGLVertexArray* array);
296 bool IsVertexArrayOES(WebGLVertexArray* array);
297 void BindVertexArrayOES(WebGLVertexArray* array);
299 DECL_WEBGL_EXTENSION_GOOP
302 class WebGLExtensionInstancedArrays
303 : public WebGLExtensionBase
305 public:
306 explicit WebGLExtensionInstancedArrays(WebGLContext* webgl);
307 virtual ~WebGLExtensionInstancedArrays();
309 void DrawArraysInstancedANGLE(GLenum mode, GLint first, GLsizei count,
310 GLsizei primcount);
311 void DrawElementsInstancedANGLE(GLenum mode, GLsizei count, GLenum type,
312 WebGLintptr offset, GLsizei primcount);
313 void VertexAttribDivisorANGLE(GLuint index, GLuint divisor);
315 static bool IsSupported(const WebGLContext* webgl);
317 DECL_WEBGL_EXTENSION_GOOP
320 class WebGLExtensionBlendMinMax
321 : public WebGLExtensionBase
323 public:
324 explicit WebGLExtensionBlendMinMax(WebGLContext* webgl);
325 virtual ~WebGLExtensionBlendMinMax();
327 static bool IsSupported(const WebGLContext*);
329 DECL_WEBGL_EXTENSION_GOOP
332 } // namespace mozilla
334 #endif // WEBGL_EXTENSIONS_H_