content/canvas/src/WebGLExtensions.h

branch
TOR_BUG_9701
changeset 11
deefc01c0e14
equal deleted inserted replaced
-1:000000000000 0:1b3d36c9f412
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/. */
5
6 #ifndef WEBGLEXTENSIONS_H_
7 #define WEBGLEXTENSIONS_H_
8
9 #include "jsapi.h"
10 #include "mozilla/Attributes.h"
11 #include "nsWrapperCache.h"
12 #include "WebGLObjectModel.h"
13 #include "WebGLTypes.h"
14
15 namespace mozilla {
16
17 class WebGLContext;
18 class WebGLShader;
19 class WebGLVertexArray;
20
21 class WebGLExtensionBase
22 : public nsWrapperCache
23 , public WebGLContextBoundObject
24 {
25 public:
26 WebGLExtensionBase(WebGLContext*);
27 virtual ~WebGLExtensionBase();
28
29 WebGLContext *GetParentObject() const {
30 return Context();
31 }
32
33 void MarkLost();
34
35 NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(WebGLExtensionBase)
36 NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(WebGLExtensionBase)
37
38 protected:
39 bool mIsLost;
40 };
41
42 #define DECL_WEBGL_EXTENSION_GOOP \
43 virtual JSObject* WrapObject(JSContext *cx) MOZ_OVERRIDE;
44
45 #define IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionType) \
46 JSObject* \
47 WebGLExtensionType::WrapObject(JSContext *cx) { \
48 return dom::WebGLExtensionType##Binding::Wrap(cx, this); \
49 }
50
51 class WebGLExtensionCompressedTextureATC
52 : public WebGLExtensionBase
53 {
54 public:
55 WebGLExtensionCompressedTextureATC(WebGLContext*);
56 virtual ~WebGLExtensionCompressedTextureATC();
57
58 DECL_WEBGL_EXTENSION_GOOP
59 };
60
61 class WebGLExtensionCompressedTextureETC1
62 : public WebGLExtensionBase
63 {
64 public:
65 WebGLExtensionCompressedTextureETC1(WebGLContext*);
66 virtual ~WebGLExtensionCompressedTextureETC1();
67
68 DECL_WEBGL_EXTENSION_GOOP
69 };
70
71 class WebGLExtensionCompressedTexturePVRTC
72 : public WebGLExtensionBase
73 {
74 public:
75 WebGLExtensionCompressedTexturePVRTC(WebGLContext*);
76 virtual ~WebGLExtensionCompressedTexturePVRTC();
77
78 DECL_WEBGL_EXTENSION_GOOP
79 };
80
81 class WebGLExtensionCompressedTextureS3TC
82 : public WebGLExtensionBase
83 {
84 public:
85 WebGLExtensionCompressedTextureS3TC(WebGLContext*);
86 virtual ~WebGLExtensionCompressedTextureS3TC();
87
88 DECL_WEBGL_EXTENSION_GOOP
89 };
90
91 class WebGLExtensionDebugRendererInfo
92 : public WebGLExtensionBase
93 {
94 public:
95 WebGLExtensionDebugRendererInfo(WebGLContext*);
96 virtual ~WebGLExtensionDebugRendererInfo();
97
98 DECL_WEBGL_EXTENSION_GOOP
99 };
100
101 class WebGLExtensionDebugShaders
102 : public WebGLExtensionBase
103 {
104 public:
105 WebGLExtensionDebugShaders(WebGLContext*);
106 virtual ~WebGLExtensionDebugShaders();
107
108 void GetTranslatedShaderSource(WebGLShader* shader, nsAString& retval);
109
110 DECL_WEBGL_EXTENSION_GOOP
111 };
112
113 class WebGLExtensionDepthTexture
114 : public WebGLExtensionBase
115 {
116 public:
117 WebGLExtensionDepthTexture(WebGLContext*);
118 virtual ~WebGLExtensionDepthTexture();
119
120 DECL_WEBGL_EXTENSION_GOOP
121 };
122
123 class WebGLExtensionElementIndexUint
124 : public WebGLExtensionBase
125 {
126 public:
127 WebGLExtensionElementIndexUint(WebGLContext*);
128 virtual ~WebGLExtensionElementIndexUint();
129
130 DECL_WEBGL_EXTENSION_GOOP
131 };
132
133 class WebGLExtensionFragDepth
134 : public WebGLExtensionBase
135 {
136 public:
137 WebGLExtensionFragDepth(WebGLContext*);
138 virtual ~WebGLExtensionFragDepth();
139
140 static bool IsSupported(const WebGLContext* context);
141
142 DECL_WEBGL_EXTENSION_GOOP
143 };
144
145 class WebGLExtensionLoseContext
146 : public WebGLExtensionBase
147 {
148 public:
149 WebGLExtensionLoseContext(WebGLContext*);
150 virtual ~WebGLExtensionLoseContext();
151
152 void LoseContext();
153 void RestoreContext();
154
155 DECL_WEBGL_EXTENSION_GOOP
156 };
157
158 class WebGLExtensionSRGB
159 : public WebGLExtensionBase
160 {
161 public:
162 WebGLExtensionSRGB(WebGLContext*);
163 virtual ~WebGLExtensionSRGB();
164
165 static bool IsSupported(const WebGLContext* context);
166
167 DECL_WEBGL_EXTENSION_GOOP
168 };
169
170 class WebGLExtensionStandardDerivatives
171 : public WebGLExtensionBase
172 {
173 public:
174 WebGLExtensionStandardDerivatives(WebGLContext*);
175 virtual ~WebGLExtensionStandardDerivatives();
176
177 DECL_WEBGL_EXTENSION_GOOP
178 };
179
180 class WebGLExtensionTextureFilterAnisotropic
181 : public WebGLExtensionBase
182 {
183 public:
184 WebGLExtensionTextureFilterAnisotropic(WebGLContext*);
185 virtual ~WebGLExtensionTextureFilterAnisotropic();
186
187 DECL_WEBGL_EXTENSION_GOOP
188 };
189
190 class WebGLExtensionTextureFloat
191 : public WebGLExtensionBase
192 {
193 public:
194 WebGLExtensionTextureFloat(WebGLContext*);
195 virtual ~WebGLExtensionTextureFloat();
196
197 DECL_WEBGL_EXTENSION_GOOP
198 };
199
200 class WebGLExtensionTextureFloatLinear
201 : public WebGLExtensionBase
202 {
203 public:
204 WebGLExtensionTextureFloatLinear(WebGLContext*);
205 virtual ~WebGLExtensionTextureFloatLinear();
206
207 DECL_WEBGL_EXTENSION_GOOP
208 };
209
210 class WebGLExtensionTextureHalfFloat
211 : public WebGLExtensionBase
212 {
213 public:
214 WebGLExtensionTextureHalfFloat(WebGLContext*);
215 virtual ~WebGLExtensionTextureHalfFloat();
216
217 DECL_WEBGL_EXTENSION_GOOP
218 };
219
220 class WebGLExtensionTextureHalfFloatLinear
221 : public WebGLExtensionBase
222 {
223 public:
224 WebGLExtensionTextureHalfFloatLinear(WebGLContext*);
225 virtual ~WebGLExtensionTextureHalfFloatLinear();
226
227 DECL_WEBGL_EXTENSION_GOOP
228 };
229
230 class WebGLExtensionColorBufferFloat
231 : public WebGLExtensionBase
232 {
233 public:
234 WebGLExtensionColorBufferFloat(WebGLContext*);
235 virtual ~WebGLExtensionColorBufferFloat();
236
237 static bool IsSupported(const WebGLContext*);
238
239 DECL_WEBGL_EXTENSION_GOOP
240 };
241
242 class WebGLExtensionColorBufferHalfFloat
243 : public WebGLExtensionBase
244 {
245 public:
246 WebGLExtensionColorBufferHalfFloat(WebGLContext*);
247 virtual ~WebGLExtensionColorBufferHalfFloat();
248
249 static bool IsSupported(const WebGLContext*);
250
251 DECL_WEBGL_EXTENSION_GOOP
252 };
253
254 class WebGLExtensionDrawBuffers
255 : public WebGLExtensionBase
256 {
257 public:
258 WebGLExtensionDrawBuffers(WebGLContext*);
259 virtual ~WebGLExtensionDrawBuffers();
260
261 void DrawBuffersWEBGL(const dom::Sequence<GLenum>& buffers);
262
263 static bool IsSupported(const WebGLContext*);
264
265 static const size_t sMinColorAttachments = 4;
266 static const size_t sMinDrawBuffers = 4;
267 /*
268 WEBGL_draw_buffers does not give a minal value for GL_MAX_DRAW_BUFFERS. But, we request
269 for GL_MAX_DRAW_BUFFERS = 4 at least to be able to use all requested color attachments.
270 See DrawBuffersWEBGL in WebGLExtensionDrawBuffers.cpp inner comments for more informations.
271 */
272
273 DECL_WEBGL_EXTENSION_GOOP
274 };
275
276 class WebGLExtensionVertexArray
277 : public WebGLExtensionBase
278 {
279 public:
280 WebGLExtensionVertexArray(WebGLContext*);
281 virtual ~WebGLExtensionVertexArray();
282
283 already_AddRefed<WebGLVertexArray> CreateVertexArrayOES();
284 void DeleteVertexArrayOES(WebGLVertexArray* array);
285 bool IsVertexArrayOES(WebGLVertexArray* array);
286 void BindVertexArrayOES(WebGLVertexArray* array);
287
288 static bool IsSupported(const WebGLContext* context);
289
290 DECL_WEBGL_EXTENSION_GOOP
291 };
292
293 class WebGLExtensionInstancedArrays
294 : public WebGLExtensionBase
295 {
296 public:
297 WebGLExtensionInstancedArrays(WebGLContext* context);
298 virtual ~WebGLExtensionInstancedArrays();
299
300 void DrawArraysInstancedANGLE(GLenum mode, GLint first,
301 GLsizei count, GLsizei primcount);
302 void DrawElementsInstancedANGLE(GLenum mode, GLsizei count,
303 GLenum type, WebGLintptr offset,
304 GLsizei primcount);
305 void VertexAttribDivisorANGLE(GLuint index, GLuint divisor);
306
307 static bool IsSupported(const WebGLContext* context);
308
309 DECL_WEBGL_EXTENSION_GOOP
310 };
311
312 } // namespace mozilla
313
314 #endif // WEBGLEXTENSIONS_H_

mercurial