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_
10 #include "mozilla/Attributes.h"
11 #include "nsWrapperCache.h"
12 #include "WebGLObjectModel.h"
13 #include "WebGLTypes.h"
19 class WebGLVertexArray
;
21 class WebGLExtensionBase
22 : public nsWrapperCache
23 , public WebGLContextBoundObject
26 WebGLExtensionBase(WebGLContext
*);
28 WebGLContext
*GetParentObject() const {
34 NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(WebGLExtensionBase
)
35 NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(WebGLExtensionBase
)
38 virtual ~WebGLExtensionBase();
43 #define DECL_WEBGL_EXTENSION_GOOP \
44 virtual JSObject* WrapObject(JSContext *cx) MOZ_OVERRIDE;
46 #define IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionType) \
48 WebGLExtensionType::WrapObject(JSContext *cx) { \
49 return dom::WebGLExtensionType##Binding::Wrap(cx, this); \
52 class WebGLExtensionCompressedTextureATC
53 : public WebGLExtensionBase
56 WebGLExtensionCompressedTextureATC(WebGLContext
*);
57 virtual ~WebGLExtensionCompressedTextureATC();
59 DECL_WEBGL_EXTENSION_GOOP
62 class WebGLExtensionCompressedTextureETC1
63 : public WebGLExtensionBase
66 WebGLExtensionCompressedTextureETC1(WebGLContext
*);
67 virtual ~WebGLExtensionCompressedTextureETC1();
69 DECL_WEBGL_EXTENSION_GOOP
72 class WebGLExtensionCompressedTexturePVRTC
73 : public WebGLExtensionBase
76 WebGLExtensionCompressedTexturePVRTC(WebGLContext
*);
77 virtual ~WebGLExtensionCompressedTexturePVRTC();
79 DECL_WEBGL_EXTENSION_GOOP
82 class WebGLExtensionCompressedTextureS3TC
83 : public WebGLExtensionBase
86 WebGLExtensionCompressedTextureS3TC(WebGLContext
*);
87 virtual ~WebGLExtensionCompressedTextureS3TC();
89 DECL_WEBGL_EXTENSION_GOOP
92 class WebGLExtensionDebugRendererInfo
93 : public WebGLExtensionBase
96 WebGLExtensionDebugRendererInfo(WebGLContext
*);
97 virtual ~WebGLExtensionDebugRendererInfo();
99 DECL_WEBGL_EXTENSION_GOOP
102 class WebGLExtensionDebugShaders
103 : public WebGLExtensionBase
106 WebGLExtensionDebugShaders(WebGLContext
*);
107 virtual ~WebGLExtensionDebugShaders();
109 void GetTranslatedShaderSource(WebGLShader
* shader
, nsAString
& retval
);
111 DECL_WEBGL_EXTENSION_GOOP
114 class WebGLExtensionDepthTexture
115 : public WebGLExtensionBase
118 WebGLExtensionDepthTexture(WebGLContext
*);
119 virtual ~WebGLExtensionDepthTexture();
121 DECL_WEBGL_EXTENSION_GOOP
124 class WebGLExtensionElementIndexUint
125 : public WebGLExtensionBase
128 WebGLExtensionElementIndexUint(WebGLContext
*);
129 virtual ~WebGLExtensionElementIndexUint();
131 DECL_WEBGL_EXTENSION_GOOP
134 class WebGLExtensionFragDepth
135 : public WebGLExtensionBase
138 WebGLExtensionFragDepth(WebGLContext
*);
139 virtual ~WebGLExtensionFragDepth();
141 static bool IsSupported(const WebGLContext
* context
);
143 DECL_WEBGL_EXTENSION_GOOP
146 class WebGLExtensionLoseContext
147 : public WebGLExtensionBase
150 WebGLExtensionLoseContext(WebGLContext
*);
151 virtual ~WebGLExtensionLoseContext();
154 void RestoreContext();
156 DECL_WEBGL_EXTENSION_GOOP
159 class WebGLExtensionSRGB
160 : public WebGLExtensionBase
163 WebGLExtensionSRGB(WebGLContext
*);
164 virtual ~WebGLExtensionSRGB();
166 static bool IsSupported(const WebGLContext
* context
);
168 DECL_WEBGL_EXTENSION_GOOP
171 class WebGLExtensionStandardDerivatives
172 : public WebGLExtensionBase
175 WebGLExtensionStandardDerivatives(WebGLContext
*);
176 virtual ~WebGLExtensionStandardDerivatives();
178 DECL_WEBGL_EXTENSION_GOOP
181 class WebGLExtensionShaderTextureLod
182 : public WebGLExtensionBase
185 WebGLExtensionShaderTextureLod(WebGLContext
*);
186 virtual ~WebGLExtensionShaderTextureLod();
188 DECL_WEBGL_EXTENSION_GOOP
191 class WebGLExtensionTextureFilterAnisotropic
192 : public WebGLExtensionBase
195 WebGLExtensionTextureFilterAnisotropic(WebGLContext
*);
196 virtual ~WebGLExtensionTextureFilterAnisotropic();
198 DECL_WEBGL_EXTENSION_GOOP
201 class WebGLExtensionTextureFloat
202 : public WebGLExtensionBase
205 WebGLExtensionTextureFloat(WebGLContext
*);
206 virtual ~WebGLExtensionTextureFloat();
208 DECL_WEBGL_EXTENSION_GOOP
211 class WebGLExtensionTextureFloatLinear
212 : public WebGLExtensionBase
215 WebGLExtensionTextureFloatLinear(WebGLContext
*);
216 virtual ~WebGLExtensionTextureFloatLinear();
218 DECL_WEBGL_EXTENSION_GOOP
221 class WebGLExtensionTextureHalfFloat
222 : public WebGLExtensionBase
225 WebGLExtensionTextureHalfFloat(WebGLContext
*);
226 virtual ~WebGLExtensionTextureHalfFloat();
228 DECL_WEBGL_EXTENSION_GOOP
231 class WebGLExtensionTextureHalfFloatLinear
232 : public WebGLExtensionBase
235 WebGLExtensionTextureHalfFloatLinear(WebGLContext
*);
236 virtual ~WebGLExtensionTextureHalfFloatLinear();
238 DECL_WEBGL_EXTENSION_GOOP
241 class WebGLExtensionColorBufferFloat
242 : public WebGLExtensionBase
245 WebGLExtensionColorBufferFloat(WebGLContext
*);
246 virtual ~WebGLExtensionColorBufferFloat();
248 static bool IsSupported(const WebGLContext
*);
250 DECL_WEBGL_EXTENSION_GOOP
253 class WebGLExtensionColorBufferHalfFloat
254 : public WebGLExtensionBase
257 WebGLExtensionColorBufferHalfFloat(WebGLContext
*);
258 virtual ~WebGLExtensionColorBufferHalfFloat();
260 static bool IsSupported(const WebGLContext
*);
262 DECL_WEBGL_EXTENSION_GOOP
265 class WebGLExtensionDrawBuffers
266 : public WebGLExtensionBase
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
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
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
,
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
327 WebGLExtensionBlendMinMax(WebGLContext
*);
328 virtual ~WebGLExtensionBlendMinMax();
330 static bool IsSupported(const WebGLContext
*);
332 DECL_WEBGL_EXTENSION_GOOP
335 } // namespace mozilla
337 #endif // WEBGLEXTENSIONS_H_