WebGLExtensions.h 10.0 KB

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