Bumping manifests a=b2g-bump
[gecko.git] / dom / canvas / WebGLExtensions.h
blobaf2d81a4d488772a26f3eea074c0ac6abde82951
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 WEBGLEXTENSIONS_H_
7 #define WEBGLEXTENSIONS_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 WebGLExtensionBase(WebGLContext*);
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 WebGLExtensionCompressedTextureATC(WebGLContext*);
57 virtual ~WebGLExtensionCompressedTextureATC();
59 DECL_WEBGL_EXTENSION_GOOP
62 class WebGLExtensionCompressedTextureETC1
63 : public WebGLExtensionBase
65 public:
66 WebGLExtensionCompressedTextureETC1(WebGLContext*);
67 virtual ~WebGLExtensionCompressedTextureETC1();
69 DECL_WEBGL_EXTENSION_GOOP
72 class WebGLExtensionCompressedTexturePVRTC
73 : public WebGLExtensionBase
75 public:
76 WebGLExtensionCompressedTexturePVRTC(WebGLContext*);
77 virtual ~WebGLExtensionCompressedTexturePVRTC();
79 DECL_WEBGL_EXTENSION_GOOP
82 class WebGLExtensionCompressedTextureS3TC
83 : public WebGLExtensionBase
85 public:
86 WebGLExtensionCompressedTextureS3TC(WebGLContext*);
87 virtual ~WebGLExtensionCompressedTextureS3TC();
89 DECL_WEBGL_EXTENSION_GOOP
92 class WebGLExtensionDebugRendererInfo
93 : public WebGLExtensionBase
95 public:
96 WebGLExtensionDebugRendererInfo(WebGLContext*);
97 virtual ~WebGLExtensionDebugRendererInfo();
99 DECL_WEBGL_EXTENSION_GOOP
102 class WebGLExtensionDebugShaders
103 : public WebGLExtensionBase
105 public:
106 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 WebGLExtensionDepthTexture(WebGLContext*);
119 virtual ~WebGLExtensionDepthTexture();
121 DECL_WEBGL_EXTENSION_GOOP
124 class WebGLExtensionElementIndexUint
125 : public WebGLExtensionBase
127 public:
128 WebGLExtensionElementIndexUint(WebGLContext*);
129 virtual ~WebGLExtensionElementIndexUint();
131 DECL_WEBGL_EXTENSION_GOOP
134 class WebGLExtensionFragDepth
135 : public WebGLExtensionBase
137 public:
138 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 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 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 WebGLExtensionStandardDerivatives(WebGLContext*);
176 virtual ~WebGLExtensionStandardDerivatives();
178 DECL_WEBGL_EXTENSION_GOOP
181 class WebGLExtensionShaderTextureLod
182 : public WebGLExtensionBase
184 public:
185 WebGLExtensionShaderTextureLod(WebGLContext*);
186 virtual ~WebGLExtensionShaderTextureLod();
188 DECL_WEBGL_EXTENSION_GOOP
191 class WebGLExtensionTextureFilterAnisotropic
192 : public WebGLExtensionBase
194 public:
195 WebGLExtensionTextureFilterAnisotropic(WebGLContext*);
196 virtual ~WebGLExtensionTextureFilterAnisotropic();
198 DECL_WEBGL_EXTENSION_GOOP
201 class WebGLExtensionTextureFloat
202 : public WebGLExtensionBase
204 public:
205 WebGLExtensionTextureFloat(WebGLContext*);
206 virtual ~WebGLExtensionTextureFloat();
208 DECL_WEBGL_EXTENSION_GOOP
211 class WebGLExtensionTextureFloatLinear
212 : public WebGLExtensionBase
214 public:
215 WebGLExtensionTextureFloatLinear(WebGLContext*);
216 virtual ~WebGLExtensionTextureFloatLinear();
218 DECL_WEBGL_EXTENSION_GOOP
221 class WebGLExtensionTextureHalfFloat
222 : public WebGLExtensionBase
224 public:
225 WebGLExtensionTextureHalfFloat(WebGLContext*);
226 virtual ~WebGLExtensionTextureHalfFloat();
228 DECL_WEBGL_EXTENSION_GOOP
231 class WebGLExtensionTextureHalfFloatLinear
232 : public WebGLExtensionBase
234 public:
235 WebGLExtensionTextureHalfFloatLinear(WebGLContext*);
236 virtual ~WebGLExtensionTextureHalfFloatLinear();
238 DECL_WEBGL_EXTENSION_GOOP
241 class WebGLExtensionColorBufferFloat
242 : public WebGLExtensionBase
244 public:
245 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 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 WebGLExtensionDrawBuffers(WebGLContext*);
270 virtual ~WebGLExtensionDrawBuffers();
272 void DrawBuffersWEBGL(const dom::Sequence<GLenum>& buffers);
274 static bool IsSupported(const WebGLContext*);
276 static const size_t sMinColorAttachments = 4;
277 static const size_t sMinDrawBuffers = 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 WebGLExtensionVertexArray(WebGLContext*);
292 virtual ~WebGLExtensionVertexArray();
294 already_AddRefed<WebGLVertexArray> CreateVertexArrayOES();
295 void DeleteVertexArrayOES(WebGLVertexArray* array);
296 bool IsVertexArrayOES(WebGLVertexArray* array);
297 void BindVertexArrayOES(WebGLVertexArray* array);
299 static bool IsSupported(const WebGLContext* context);
301 DECL_WEBGL_EXTENSION_GOOP
304 class WebGLExtensionInstancedArrays
305 : public WebGLExtensionBase
307 public:
308 WebGLExtensionInstancedArrays(WebGLContext* context);
309 virtual ~WebGLExtensionInstancedArrays();
311 void DrawArraysInstancedANGLE(GLenum mode, GLint first,
312 GLsizei count, GLsizei primcount);
313 void DrawElementsInstancedANGLE(GLenum mode, GLsizei count,
314 GLenum type, WebGLintptr offset,
315 GLsizei primcount);
316 void VertexAttribDivisorANGLE(GLuint index, GLuint divisor);
318 static bool IsSupported(const WebGLContext* context);
320 DECL_WEBGL_EXTENSION_GOOP
323 class WebGLExtensionBlendMinMax
324 : public WebGLExtensionBase
326 public:
327 WebGLExtensionBlendMinMax(WebGLContext*);
328 virtual ~WebGLExtensionBlendMinMax();
330 static bool IsSupported(const WebGLContext*);
332 DECL_WEBGL_EXTENSION_GOOP
335 } // namespace mozilla
337 #endif // WEBGLEXTENSIONS_H_