123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405 |
- /* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
- /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- #ifndef WEBGL_EXTENSIONS_H_
- #define WEBGL_EXTENSIONS_H_
- #include "mozilla/AlreadyAddRefed.h"
- #include "nsWrapperCache.h"
- #include "WebGLContext.h"
- #include "WebGLTypes.h"
- namespace mozilla {
- class ErrorResult;
- namespace dom {
- template<typename T>
- class Sequence;
- } // namespace dom
- namespace webgl {
- class FormatUsageAuthority;
- } // namespace webgl
- class WebGLContext;
- class WebGLShader;
- class WebGLQuery;
- class WebGLVertexArray;
- class WebGLExtensionBase
- : public nsWrapperCache
- , public WebGLContextBoundObject
- {
- public:
- explicit WebGLExtensionBase(WebGLContext* webgl);
- WebGLContext* GetParentObject() const {
- return mContext;
- }
- void MarkLost();
- NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(WebGLExtensionBase)
- NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(WebGLExtensionBase)
- protected:
- virtual ~WebGLExtensionBase();
- virtual void OnMarkLost() { }
- bool mIsLost;
- };
- #define DECL_WEBGL_EXTENSION_GOOP \
- virtual JSObject* WrapObject(JSContext* cx, JS::Handle<JSObject*> givenProto) override;
- #define IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionType, WebGLBindingType)\
- JSObject* \
- WebGLExtensionType::WrapObject(JSContext* cx, JS::Handle<JSObject*> givenProto) { \
- return dom::WebGLBindingType##Binding::Wrap(cx, this, givenProto); \
- }
- class WebGLExtensionCompressedTextureATC
- : public WebGLExtensionBase
- {
- public:
- explicit WebGLExtensionCompressedTextureATC(WebGLContext*);
- virtual ~WebGLExtensionCompressedTextureATC();
- DECL_WEBGL_EXTENSION_GOOP
- };
- class WebGLExtensionCompressedTextureES3
- : public WebGLExtensionBase
- {
- public:
- explicit WebGLExtensionCompressedTextureES3(WebGLContext*);
- virtual ~WebGLExtensionCompressedTextureES3();
- DECL_WEBGL_EXTENSION_GOOP
- };
- class WebGLExtensionCompressedTextureETC1
- : public WebGLExtensionBase
- {
- public:
- explicit WebGLExtensionCompressedTextureETC1(WebGLContext*);
- virtual ~WebGLExtensionCompressedTextureETC1();
- DECL_WEBGL_EXTENSION_GOOP
- };
- class WebGLExtensionCompressedTexturePVRTC
- : public WebGLExtensionBase
- {
- public:
- explicit WebGLExtensionCompressedTexturePVRTC(WebGLContext*);
- virtual ~WebGLExtensionCompressedTexturePVRTC();
- DECL_WEBGL_EXTENSION_GOOP
- };
- class WebGLExtensionCompressedTextureS3TC
- : public WebGLExtensionBase
- {
- public:
- explicit WebGLExtensionCompressedTextureS3TC(WebGLContext*);
- virtual ~WebGLExtensionCompressedTextureS3TC();
- DECL_WEBGL_EXTENSION_GOOP
- };
- class WebGLExtensionDebugRendererInfo
- : public WebGLExtensionBase
- {
- public:
- explicit WebGLExtensionDebugRendererInfo(WebGLContext*);
- virtual ~WebGLExtensionDebugRendererInfo();
- DECL_WEBGL_EXTENSION_GOOP
- };
- class WebGLExtensionDebugShaders
- : public WebGLExtensionBase
- {
- public:
- explicit WebGLExtensionDebugShaders(WebGLContext*);
- virtual ~WebGLExtensionDebugShaders();
- void GetTranslatedShaderSource(const WebGLShader& shader, nsAString& retval) const;
- DECL_WEBGL_EXTENSION_GOOP
- };
- class WebGLExtensionDepthTexture
- : public WebGLExtensionBase
- {
- public:
- explicit WebGLExtensionDepthTexture(WebGLContext*);
- virtual ~WebGLExtensionDepthTexture();
- DECL_WEBGL_EXTENSION_GOOP
- };
- class WebGLExtensionElementIndexUint
- : public WebGLExtensionBase
- {
- public:
- explicit WebGLExtensionElementIndexUint(WebGLContext*);
- virtual ~WebGLExtensionElementIndexUint();
- DECL_WEBGL_EXTENSION_GOOP
- };
- class WebGLExtensionEXTColorBufferFloat
- : public WebGLExtensionBase
- {
- public:
- explicit WebGLExtensionEXTColorBufferFloat(WebGLContext*);
- virtual ~WebGLExtensionEXTColorBufferFloat() { }
- static bool IsSupported(const WebGLContext*);
- DECL_WEBGL_EXTENSION_GOOP
- };
- class WebGLExtensionFragDepth
- : public WebGLExtensionBase
- {
- public:
- explicit WebGLExtensionFragDepth(WebGLContext*);
- virtual ~WebGLExtensionFragDepth();
- static bool IsSupported(const WebGLContext* context);
- DECL_WEBGL_EXTENSION_GOOP
- };
- class WebGLExtensionLoseContext
- : public WebGLExtensionBase
- {
- public:
- explicit WebGLExtensionLoseContext(WebGLContext*);
- virtual ~WebGLExtensionLoseContext();
- void LoseContext();
- void RestoreContext();
- DECL_WEBGL_EXTENSION_GOOP
- };
- class WebGLExtensionSRGB
- : public WebGLExtensionBase
- {
- public:
- explicit WebGLExtensionSRGB(WebGLContext*);
- virtual ~WebGLExtensionSRGB();
- static bool IsSupported(const WebGLContext* context);
- DECL_WEBGL_EXTENSION_GOOP
- };
- class WebGLExtensionStandardDerivatives
- : public WebGLExtensionBase
- {
- public:
- explicit WebGLExtensionStandardDerivatives(WebGLContext*);
- virtual ~WebGLExtensionStandardDerivatives();
- DECL_WEBGL_EXTENSION_GOOP
- };
- class WebGLExtensionShaderTextureLod
- : public WebGLExtensionBase
- {
- public:
- explicit WebGLExtensionShaderTextureLod(WebGLContext*);
- virtual ~WebGLExtensionShaderTextureLod();
- DECL_WEBGL_EXTENSION_GOOP
- };
- class WebGLExtensionTextureFilterAnisotropic
- : public WebGLExtensionBase
- {
- public:
- explicit WebGLExtensionTextureFilterAnisotropic(WebGLContext*);
- virtual ~WebGLExtensionTextureFilterAnisotropic();
- DECL_WEBGL_EXTENSION_GOOP
- };
- class WebGLExtensionTextureFloat
- : public WebGLExtensionBase
- {
- public:
- static void InitWebGLFormats(webgl::FormatUsageAuthority* authority);
- explicit WebGLExtensionTextureFloat(WebGLContext*);
- virtual ~WebGLExtensionTextureFloat();
- static bool IsSupported(const WebGLContext*);
- DECL_WEBGL_EXTENSION_GOOP
- };
- class WebGLExtensionTextureFloatLinear
- : public WebGLExtensionBase
- {
- public:
- explicit WebGLExtensionTextureFloatLinear(WebGLContext*);
- virtual ~WebGLExtensionTextureFloatLinear();
- DECL_WEBGL_EXTENSION_GOOP
- };
- class WebGLExtensionTextureHalfFloat
- : public WebGLExtensionBase
- {
- public:
- static void InitWebGLFormats(webgl::FormatUsageAuthority* authority);
- explicit WebGLExtensionTextureHalfFloat(WebGLContext*);
- virtual ~WebGLExtensionTextureHalfFloat();
- static bool IsSupported(const WebGLContext*);
- DECL_WEBGL_EXTENSION_GOOP
- };
- class WebGLExtensionTextureHalfFloatLinear
- : public WebGLExtensionBase
- {
- public:
- explicit WebGLExtensionTextureHalfFloatLinear(WebGLContext*);
- virtual ~WebGLExtensionTextureHalfFloatLinear();
- DECL_WEBGL_EXTENSION_GOOP
- };
- class WebGLExtensionColorBufferFloat
- : public WebGLExtensionBase
- {
- public:
- explicit WebGLExtensionColorBufferFloat(WebGLContext*);
- virtual ~WebGLExtensionColorBufferFloat();
- static bool IsSupported(const WebGLContext*);
- DECL_WEBGL_EXTENSION_GOOP
- };
- class WebGLExtensionColorBufferHalfFloat
- : public WebGLExtensionBase
- {
- public:
- explicit WebGLExtensionColorBufferHalfFloat(WebGLContext*);
- virtual ~WebGLExtensionColorBufferHalfFloat();
- static bool IsSupported(const WebGLContext*);
- DECL_WEBGL_EXTENSION_GOOP
- };
- class WebGLExtensionDrawBuffers
- : public WebGLExtensionBase
- {
- public:
- explicit WebGLExtensionDrawBuffers(WebGLContext*);
- virtual ~WebGLExtensionDrawBuffers();
- void DrawBuffersWEBGL(const dom::Sequence<GLenum>& buffers);
- static bool IsSupported(const WebGLContext*);
- DECL_WEBGL_EXTENSION_GOOP
- };
- class WebGLExtensionVertexArray
- : public WebGLExtensionBase
- {
- public:
- explicit WebGLExtensionVertexArray(WebGLContext* webgl);
- virtual ~WebGLExtensionVertexArray();
- already_AddRefed<WebGLVertexArray> CreateVertexArrayOES();
- void DeleteVertexArrayOES(WebGLVertexArray* array);
- bool IsVertexArrayOES(const WebGLVertexArray* array);
- void BindVertexArrayOES(WebGLVertexArray* array);
- DECL_WEBGL_EXTENSION_GOOP
- };
- class WebGLExtensionInstancedArrays
- : public WebGLExtensionBase
- {
- public:
- explicit WebGLExtensionInstancedArrays(WebGLContext* webgl);
- virtual ~WebGLExtensionInstancedArrays();
- void DrawArraysInstancedANGLE(GLenum mode, GLint first, GLsizei count,
- GLsizei primcount);
- void DrawElementsInstancedANGLE(GLenum mode, GLsizei count, GLenum type,
- WebGLintptr offset, GLsizei primcount);
- void VertexAttribDivisorANGLE(GLuint index, GLuint divisor);
- static bool IsSupported(const WebGLContext* webgl);
- DECL_WEBGL_EXTENSION_GOOP
- };
- class WebGLExtensionBlendMinMax
- : public WebGLExtensionBase
- {
- public:
- explicit WebGLExtensionBlendMinMax(WebGLContext* webgl);
- virtual ~WebGLExtensionBlendMinMax();
- static bool IsSupported(const WebGLContext*);
- DECL_WEBGL_EXTENSION_GOOP
- };
- class WebGLExtensionDisjointTimerQuery
- : public WebGLExtensionBase
- {
- public:
- explicit WebGLExtensionDisjointTimerQuery(WebGLContext* webgl);
- virtual ~WebGLExtensionDisjointTimerQuery();
- already_AddRefed<WebGLQuery> CreateQueryEXT() const;
- void DeleteQueryEXT(WebGLQuery* query) const;
- bool IsQueryEXT(const WebGLQuery* query) const;
- void BeginQueryEXT(GLenum target, WebGLQuery& query) const;
- void EndQueryEXT(GLenum target) const;
- void QueryCounterEXT(WebGLQuery& query, GLenum target) const;
- void GetQueryEXT(JSContext* cx, GLenum target, GLenum pname,
- JS::MutableHandleValue retval) const;
- void GetQueryObjectEXT(JSContext* cx, const WebGLQuery& query,
- GLenum pname, JS::MutableHandleValue retval) const;
- static bool IsSupported(const WebGLContext*);
- DECL_WEBGL_EXTENSION_GOOP
- };
- class WebGLExtensionDebugGet final
- : public WebGLExtensionBase
- {
- public:
- explicit WebGLExtensionDebugGet(WebGLContext* webgl);
- virtual ~WebGLExtensionDebugGet();
- void GetParameter(JSContext* cx, GLenum pname,
- JS::MutableHandle<JS::Value> retval, ErrorResult& er) const;
- DECL_WEBGL_EXTENSION_GOOP
- };
- } // namespace mozilla
- #endif // WEBGL_EXTENSIONS_H_
|