Bug 1700051: part 26) Correct typo in comment of `mozInlineSpellWordUtil::BuildSoftTe...
[gecko.git] / dom / canvas / ClientWebGLExtensions.h
blob3a569e631714b5291d6f3b59a616053312a0de37
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 CLIENTWEBGLEXTENSIONS_H_
7 #define CLIENTWEBGLEXTENSIONS_H_
9 #include "WebGLExtensions.h"
10 #include "ClientWebGLContext.h"
12 namespace mozilla {
14 class ClientWebGLExtensionBase : public nsWrapperCache {
15 friend ClientWebGLContext;
17 protected:
18 WeakPtr<ClientWebGLContext> mContext;
20 public:
21 NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(ClientWebGLExtensionBase)
22 NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(ClientWebGLExtensionBase)
24 protected:
25 explicit ClientWebGLExtensionBase(ClientWebGLContext& context)
26 : mContext(&context) {}
27 virtual ~ClientWebGLExtensionBase() = default;
29 public:
30 ClientWebGLContext* GetParentObject() const { return mContext.get(); }
33 // -
35 // To be used for implementations of ClientWebGLExtensionBase
36 #define DEFINE_WEBGL_EXTENSION_GOOP(_WebGLBindingType, _Extension) \
37 JSObject* Client##_Extension::WrapObject(JSContext* cx, \
38 JS::Handle<JSObject*> givenProto) { \
39 return dom::_WebGLBindingType##_Binding::Wrap(cx, this, givenProto); \
40 } \
41 Client##_Extension::Client##_Extension(ClientWebGLContext& aClient) \
42 : ClientWebGLExtensionBase(aClient) {}
44 // Many extensions have no methods. This is a shorthand for declaring client
45 // versions of such classes.
46 #define DECLARE_SIMPLE_WEBGL_EXTENSION(_Extension) \
47 class Client##_Extension : public ClientWebGLExtensionBase { \
48 public: \
49 virtual JSObject* WrapObject(JSContext* cx, \
50 JS::Handle<JSObject*> givenProto) override; \
51 explicit Client##_Extension(ClientWebGLContext&); \
54 ////
56 class ClientWebGLExtensionCompressedTextureASTC
57 : public ClientWebGLExtensionBase {
58 public:
59 virtual JSObject* WrapObject(JSContext* cx,
60 JS::Handle<JSObject*> givenProto) override;
61 explicit ClientWebGLExtensionCompressedTextureASTC(ClientWebGLContext&);
63 void GetSupportedProfiles(dom::Nullable<nsTArray<nsString>>& retval) const {
64 if (MOZ_UNLIKELY(!mContext)) {
65 AutoJsWarning("getSupportedProfiles: Extension is `invalidated`.");
66 return;
68 mContext->GetSupportedProfilesASTC(retval);
72 DECLARE_SIMPLE_WEBGL_EXTENSION(WebGLExtensionFloatBlend)
74 DECLARE_SIMPLE_WEBGL_EXTENSION(WebGLExtensionCompressedTextureBPTC)
76 DECLARE_SIMPLE_WEBGL_EXTENSION(WebGLExtensionCompressedTextureES3)
78 DECLARE_SIMPLE_WEBGL_EXTENSION(WebGLExtensionCompressedTextureETC1)
80 DECLARE_SIMPLE_WEBGL_EXTENSION(WebGLExtensionCompressedTexturePVRTC)
82 DECLARE_SIMPLE_WEBGL_EXTENSION(WebGLExtensionCompressedTextureRGTC)
84 DECLARE_SIMPLE_WEBGL_EXTENSION(WebGLExtensionFBORenderMipmap)
86 DECLARE_SIMPLE_WEBGL_EXTENSION(WebGLExtensionCompressedTextureS3TC)
88 DECLARE_SIMPLE_WEBGL_EXTENSION(WebGLExtensionCompressedTextureS3TC_SRGB)
90 DECLARE_SIMPLE_WEBGL_EXTENSION(WebGLExtensionDebugRendererInfo)
92 class ClientWebGLExtensionDebugShaders : public ClientWebGLExtensionBase {
93 public:
94 virtual JSObject* WrapObject(JSContext* cx,
95 JS::Handle<JSObject*> givenProto) override;
96 explicit ClientWebGLExtensionDebugShaders(ClientWebGLContext&);
98 void GetTranslatedShaderSource(const WebGLShaderJS& shader,
99 nsAString& retval) const {
100 if (MOZ_UNLIKELY(!mContext)) {
101 AutoJsWarning("getTranslatedShaderSource: Extension is `invalidated`.");
102 return;
104 mContext->GetTranslatedShaderSource(shader, retval);
108 DECLARE_SIMPLE_WEBGL_EXTENSION(WebGLExtensionDepthTexture)
110 DECLARE_SIMPLE_WEBGL_EXTENSION(WebGLExtensionElementIndexUint)
112 DECLARE_SIMPLE_WEBGL_EXTENSION(WebGLExtensionEXTColorBufferFloat)
114 DECLARE_SIMPLE_WEBGL_EXTENSION(WebGLExtensionFragDepth)
116 class ClientWebGLExtensionLoseContext : public ClientWebGLExtensionBase {
117 public:
118 virtual JSObject* WrapObject(JSContext* cx,
119 JS::Handle<JSObject*> givenProto) override;
120 explicit ClientWebGLExtensionLoseContext(ClientWebGLContext&);
122 void LoseContext() {
123 if (MOZ_UNLIKELY(!mContext)) {
124 AutoJsWarning("loseContext: Extension is `invalidated`.");
125 return;
127 mContext->EmulateLoseContext();
129 void RestoreContext() {
130 if (MOZ_UNLIKELY(!mContext)) {
131 AutoJsWarning("restoreContext: Extension is `invalidated`.");
132 return;
134 mContext->RestoreContext(webgl::LossStatus::LostManually);
138 DECLARE_SIMPLE_WEBGL_EXTENSION(WebGLExtensionSRGB)
140 DECLARE_SIMPLE_WEBGL_EXTENSION(WebGLExtensionStandardDerivatives)
142 DECLARE_SIMPLE_WEBGL_EXTENSION(WebGLExtensionShaderTextureLod)
144 DECLARE_SIMPLE_WEBGL_EXTENSION(WebGLExtensionTextureFilterAnisotropic)
146 DECLARE_SIMPLE_WEBGL_EXTENSION(WebGLExtensionTextureFloat)
148 DECLARE_SIMPLE_WEBGL_EXTENSION(WebGLExtensionTextureFloatLinear)
150 DECLARE_SIMPLE_WEBGL_EXTENSION(WebGLExtensionTextureHalfFloat)
152 DECLARE_SIMPLE_WEBGL_EXTENSION(WebGLExtensionTextureHalfFloatLinear)
154 DECLARE_SIMPLE_WEBGL_EXTENSION(WebGLExtensionTextureNorm16)
156 DECLARE_SIMPLE_WEBGL_EXTENSION(WebGLExtensionColorBufferFloat)
158 DECLARE_SIMPLE_WEBGL_EXTENSION(WebGLExtensionColorBufferHalfFloat)
160 class ClientWebGLExtensionDrawBuffers : public ClientWebGLExtensionBase {
161 public:
162 virtual JSObject* WrapObject(JSContext* cx,
163 JS::Handle<JSObject*> givenProto) override;
164 explicit ClientWebGLExtensionDrawBuffers(ClientWebGLContext&);
166 void DrawBuffersWEBGL(const dom::Sequence<GLenum>& buffers) {
167 if (MOZ_UNLIKELY(!mContext)) {
168 AutoJsWarning("drawBuffersWEBGL: Extension is `invalidated`.");
169 return;
171 mContext->DrawBuffers(buffers);
175 class ClientWebGLExtensionVertexArray : public ClientWebGLExtensionBase {
176 public:
177 virtual JSObject* WrapObject(JSContext* cx,
178 JS::Handle<JSObject*> givenProto) override;
179 explicit ClientWebGLExtensionVertexArray(ClientWebGLContext&);
181 already_AddRefed<WebGLVertexArrayJS> CreateVertexArrayOES() {
182 if (MOZ_UNLIKELY(!mContext)) {
183 AutoJsWarning("createVertexArrayOES: Extension is `invalidated`.");
184 return nullptr;
186 return mContext->CreateVertexArray();
188 void DeleteVertexArrayOES(WebGLVertexArrayJS* array) {
189 if (MOZ_UNLIKELY(!mContext)) {
190 AutoJsWarning("deleteVertexArrayOES: Extension is `invalidated`.");
191 return;
193 mContext->DeleteVertexArray(array);
195 bool IsVertexArrayOES(const WebGLVertexArrayJS* array) {
196 if (MOZ_UNLIKELY(!mContext)) {
197 AutoJsWarning("isVertexArrayOES: Extension is `invalidated`.");
198 return false;
200 return mContext->IsVertexArray(array);
202 void BindVertexArrayOES(WebGLVertexArrayJS* array) {
203 if (MOZ_UNLIKELY(!mContext)) {
204 AutoJsWarning("bindVertexArrayOES: Extension is `invalidated`.");
205 return;
207 mContext->BindVertexArray(array);
211 class ClientWebGLExtensionInstancedArrays : public ClientWebGLExtensionBase {
212 public:
213 virtual JSObject* WrapObject(JSContext* cx,
214 JS::Handle<JSObject*> givenProto) override;
215 explicit ClientWebGLExtensionInstancedArrays(ClientWebGLContext&);
217 void DrawArraysInstancedANGLE(GLenum mode, GLint first, GLsizei count,
218 GLsizei primcount) {
219 if (MOZ_UNLIKELY(!mContext)) {
220 AutoJsWarning("drawArraysInstancedANGLE: Extension is `invalidated`.");
221 return;
223 mContext->DrawArraysInstanced(mode, first, count, primcount);
225 void DrawElementsInstancedANGLE(GLenum mode, GLsizei count, GLenum type,
226 WebGLintptr offset, GLsizei primcount) {
227 if (MOZ_UNLIKELY(!mContext)) {
228 AutoJsWarning("drawElementsInstancedANGLE: Extension is `invalidated`.");
229 return;
231 mContext->DrawElementsInstanced(mode, count, type, offset, primcount,
232 FuncScopeId::drawElementsInstanced);
234 void VertexAttribDivisorANGLE(GLuint index, GLuint divisor) {
235 if (MOZ_UNLIKELY(!mContext)) {
236 AutoJsWarning("vertexAttribDivisorANGLE: Extension is `invalidated`.");
237 return;
239 mContext->VertexAttribDivisor(index, divisor);
243 DECLARE_SIMPLE_WEBGL_EXTENSION(WebGLExtensionBlendMinMax)
245 class ClientWebGLExtensionDisjointTimerQuery : public ClientWebGLExtensionBase {
246 public:
247 virtual JSObject* WrapObject(JSContext* cx,
248 JS::Handle<JSObject*> givenProto) override;
249 explicit ClientWebGLExtensionDisjointTimerQuery(ClientWebGLContext&);
251 already_AddRefed<WebGLQueryJS> CreateQueryEXT() const {
252 if (MOZ_UNLIKELY(!mContext)) {
253 AutoJsWarning("createQueryEXT: Extension is `invalidated`.");
254 return nullptr;
256 return mContext->CreateQuery();
258 void DeleteQueryEXT(WebGLQueryJS* query) const {
259 if (MOZ_UNLIKELY(!mContext)) {
260 AutoJsWarning("deleteQueryEXT: Extension is `invalidated`.");
261 return;
263 mContext->DeleteQuery(query);
265 bool IsQueryEXT(const WebGLQueryJS* query) const {
266 if (MOZ_UNLIKELY(!mContext)) {
267 AutoJsWarning("isQueryEXT: Extension is `invalidated`.");
268 return false;
270 return mContext->IsQuery(query);
272 void BeginQueryEXT(GLenum target, WebGLQueryJS& query) const {
273 if (MOZ_UNLIKELY(!mContext)) {
274 AutoJsWarning("beginQueryEXT: Extension is `invalidated`.");
275 return;
277 mContext->BeginQuery(target, query);
279 void EndQueryEXT(GLenum target) const {
280 if (MOZ_UNLIKELY(!mContext)) {
281 AutoJsWarning("endQueryEXT: Extension is `invalidated`.");
282 return;
284 mContext->EndQuery(target);
286 void QueryCounterEXT(WebGLQueryJS& query, GLenum target) const {
287 if (MOZ_UNLIKELY(!mContext)) {
288 AutoJsWarning("queryCounterEXT: Extension is `invalidated`.");
289 return;
291 mContext->QueryCounter(query, target);
293 void GetQueryEXT(JSContext* cx, GLenum target, GLenum pname,
294 JS::MutableHandle<JS::Value> retval) const {
295 if (MOZ_UNLIKELY(!mContext)) {
296 AutoJsWarning("getQueryEXT: Extension is `invalidated`.");
297 return;
299 mContext->GetQuery(cx, target, pname, retval);
301 void GetQueryObjectEXT(JSContext* cx, WebGLQueryJS& query, GLenum pname,
302 JS::MutableHandle<JS::Value> retval) const {
303 if (MOZ_UNLIKELY(!mContext)) {
304 AutoJsWarning("getQueryObjectEXT: Extension is `invalidated`.");
305 return;
307 mContext->GetQueryParameter(cx, query, pname, retval);
311 class ClientWebGLExtensionExplicitPresent : public ClientWebGLExtensionBase {
312 public:
313 virtual JSObject* WrapObject(JSContext* cx,
314 JS::Handle<JSObject*> givenProto) override;
315 explicit ClientWebGLExtensionExplicitPresent(ClientWebGLContext&);
317 void Present() const {
318 if (MOZ_UNLIKELY(!mContext)) {
319 AutoJsWarning("present: Extension is `invalidated`.");
320 return;
322 mContext->OnBeforePaintTransaction();
326 class ClientWebGLExtensionMOZDebug : public ClientWebGLExtensionBase {
327 public:
328 virtual JSObject* WrapObject(JSContext* cx,
329 JS::Handle<JSObject*> givenProto) override;
330 explicit ClientWebGLExtensionMOZDebug(ClientWebGLContext&);
332 void GetParameter(JSContext* cx, GLenum pname,
333 JS::MutableHandle<JS::Value> retval,
334 ErrorResult& er) const {
335 if (MOZ_UNLIKELY(!mContext)) {
336 AutoJsWarning("getParameter: Extension is `invalidated`.");
337 return;
339 mContext->MOZDebugGetParameter(cx, pname, retval, er);
343 class ClientWebGLExtensionMultiview : public ClientWebGLExtensionBase {
344 public:
345 virtual JSObject* WrapObject(JSContext* cx,
346 JS::Handle<JSObject*> givenProto) override;
347 explicit ClientWebGLExtensionMultiview(ClientWebGLContext&);
349 void FramebufferTextureMultiviewOVR(const GLenum target,
350 const GLenum attachment,
351 WebGLTextureJS* const texture,
352 const GLint level,
353 const GLint baseViewIndex,
354 const GLsizei numViews) const {
355 if (MOZ_UNLIKELY(!mContext)) {
356 AutoJsWarning(
357 "framebufferTextureMultiviewOVR: Extension is `invalidated`.");
358 return;
360 mContext->FramebufferTextureMultiview(target, attachment, texture, level,
361 baseViewIndex, numViews);
365 } // namespace mozilla
367 #endif // CLIENTWEBGLEXTENSIONS_H_