1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/content/canvas/src/WebGLExtensions.h Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,314 @@ 1.4 +/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 1.5 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.6 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.7 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.8 + 1.9 +#ifndef WEBGLEXTENSIONS_H_ 1.10 +#define WEBGLEXTENSIONS_H_ 1.11 + 1.12 +#include "jsapi.h" 1.13 +#include "mozilla/Attributes.h" 1.14 +#include "nsWrapperCache.h" 1.15 +#include "WebGLObjectModel.h" 1.16 +#include "WebGLTypes.h" 1.17 + 1.18 +namespace mozilla { 1.19 + 1.20 +class WebGLContext; 1.21 +class WebGLShader; 1.22 +class WebGLVertexArray; 1.23 + 1.24 +class WebGLExtensionBase 1.25 + : public nsWrapperCache 1.26 + , public WebGLContextBoundObject 1.27 +{ 1.28 +public: 1.29 + WebGLExtensionBase(WebGLContext*); 1.30 + virtual ~WebGLExtensionBase(); 1.31 + 1.32 + WebGLContext *GetParentObject() const { 1.33 + return Context(); 1.34 + } 1.35 + 1.36 + void MarkLost(); 1.37 + 1.38 + NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(WebGLExtensionBase) 1.39 + NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(WebGLExtensionBase) 1.40 + 1.41 +protected: 1.42 + bool mIsLost; 1.43 +}; 1.44 + 1.45 +#define DECL_WEBGL_EXTENSION_GOOP \ 1.46 + virtual JSObject* WrapObject(JSContext *cx) MOZ_OVERRIDE; 1.47 + 1.48 +#define IMPL_WEBGL_EXTENSION_GOOP(WebGLExtensionType) \ 1.49 + JSObject* \ 1.50 + WebGLExtensionType::WrapObject(JSContext *cx) { \ 1.51 + return dom::WebGLExtensionType##Binding::Wrap(cx, this); \ 1.52 + } 1.53 + 1.54 +class WebGLExtensionCompressedTextureATC 1.55 + : public WebGLExtensionBase 1.56 +{ 1.57 +public: 1.58 + WebGLExtensionCompressedTextureATC(WebGLContext*); 1.59 + virtual ~WebGLExtensionCompressedTextureATC(); 1.60 + 1.61 + DECL_WEBGL_EXTENSION_GOOP 1.62 +}; 1.63 + 1.64 +class WebGLExtensionCompressedTextureETC1 1.65 + : public WebGLExtensionBase 1.66 +{ 1.67 +public: 1.68 + WebGLExtensionCompressedTextureETC1(WebGLContext*); 1.69 + virtual ~WebGLExtensionCompressedTextureETC1(); 1.70 + 1.71 + DECL_WEBGL_EXTENSION_GOOP 1.72 +}; 1.73 + 1.74 +class WebGLExtensionCompressedTexturePVRTC 1.75 + : public WebGLExtensionBase 1.76 +{ 1.77 +public: 1.78 + WebGLExtensionCompressedTexturePVRTC(WebGLContext*); 1.79 + virtual ~WebGLExtensionCompressedTexturePVRTC(); 1.80 + 1.81 + DECL_WEBGL_EXTENSION_GOOP 1.82 +}; 1.83 + 1.84 +class WebGLExtensionCompressedTextureS3TC 1.85 + : public WebGLExtensionBase 1.86 +{ 1.87 +public: 1.88 + WebGLExtensionCompressedTextureS3TC(WebGLContext*); 1.89 + virtual ~WebGLExtensionCompressedTextureS3TC(); 1.90 + 1.91 + DECL_WEBGL_EXTENSION_GOOP 1.92 +}; 1.93 + 1.94 +class WebGLExtensionDebugRendererInfo 1.95 + : public WebGLExtensionBase 1.96 +{ 1.97 +public: 1.98 + WebGLExtensionDebugRendererInfo(WebGLContext*); 1.99 + virtual ~WebGLExtensionDebugRendererInfo(); 1.100 + 1.101 + DECL_WEBGL_EXTENSION_GOOP 1.102 +}; 1.103 + 1.104 +class WebGLExtensionDebugShaders 1.105 + : public WebGLExtensionBase 1.106 +{ 1.107 +public: 1.108 + WebGLExtensionDebugShaders(WebGLContext*); 1.109 + virtual ~WebGLExtensionDebugShaders(); 1.110 + 1.111 + void GetTranslatedShaderSource(WebGLShader* shader, nsAString& retval); 1.112 + 1.113 + DECL_WEBGL_EXTENSION_GOOP 1.114 +}; 1.115 + 1.116 +class WebGLExtensionDepthTexture 1.117 + : public WebGLExtensionBase 1.118 +{ 1.119 +public: 1.120 + WebGLExtensionDepthTexture(WebGLContext*); 1.121 + virtual ~WebGLExtensionDepthTexture(); 1.122 + 1.123 + DECL_WEBGL_EXTENSION_GOOP 1.124 +}; 1.125 + 1.126 +class WebGLExtensionElementIndexUint 1.127 + : public WebGLExtensionBase 1.128 +{ 1.129 +public: 1.130 + WebGLExtensionElementIndexUint(WebGLContext*); 1.131 + virtual ~WebGLExtensionElementIndexUint(); 1.132 + 1.133 + DECL_WEBGL_EXTENSION_GOOP 1.134 +}; 1.135 + 1.136 +class WebGLExtensionFragDepth 1.137 + : public WebGLExtensionBase 1.138 +{ 1.139 +public: 1.140 + WebGLExtensionFragDepth(WebGLContext*); 1.141 + virtual ~WebGLExtensionFragDepth(); 1.142 + 1.143 + static bool IsSupported(const WebGLContext* context); 1.144 + 1.145 + DECL_WEBGL_EXTENSION_GOOP 1.146 +}; 1.147 + 1.148 +class WebGLExtensionLoseContext 1.149 + : public WebGLExtensionBase 1.150 +{ 1.151 +public: 1.152 + WebGLExtensionLoseContext(WebGLContext*); 1.153 + virtual ~WebGLExtensionLoseContext(); 1.154 + 1.155 + void LoseContext(); 1.156 + void RestoreContext(); 1.157 + 1.158 + DECL_WEBGL_EXTENSION_GOOP 1.159 +}; 1.160 + 1.161 +class WebGLExtensionSRGB 1.162 + : public WebGLExtensionBase 1.163 +{ 1.164 +public: 1.165 + WebGLExtensionSRGB(WebGLContext*); 1.166 + virtual ~WebGLExtensionSRGB(); 1.167 + 1.168 + static bool IsSupported(const WebGLContext* context); 1.169 + 1.170 + DECL_WEBGL_EXTENSION_GOOP 1.171 +}; 1.172 + 1.173 +class WebGLExtensionStandardDerivatives 1.174 + : public WebGLExtensionBase 1.175 +{ 1.176 +public: 1.177 + WebGLExtensionStandardDerivatives(WebGLContext*); 1.178 + virtual ~WebGLExtensionStandardDerivatives(); 1.179 + 1.180 + DECL_WEBGL_EXTENSION_GOOP 1.181 +}; 1.182 + 1.183 +class WebGLExtensionTextureFilterAnisotropic 1.184 + : public WebGLExtensionBase 1.185 +{ 1.186 +public: 1.187 + WebGLExtensionTextureFilterAnisotropic(WebGLContext*); 1.188 + virtual ~WebGLExtensionTextureFilterAnisotropic(); 1.189 + 1.190 + DECL_WEBGL_EXTENSION_GOOP 1.191 +}; 1.192 + 1.193 +class WebGLExtensionTextureFloat 1.194 + : public WebGLExtensionBase 1.195 +{ 1.196 +public: 1.197 + WebGLExtensionTextureFloat(WebGLContext*); 1.198 + virtual ~WebGLExtensionTextureFloat(); 1.199 + 1.200 + DECL_WEBGL_EXTENSION_GOOP 1.201 +}; 1.202 + 1.203 +class WebGLExtensionTextureFloatLinear 1.204 + : public WebGLExtensionBase 1.205 +{ 1.206 +public: 1.207 + WebGLExtensionTextureFloatLinear(WebGLContext*); 1.208 + virtual ~WebGLExtensionTextureFloatLinear(); 1.209 + 1.210 + DECL_WEBGL_EXTENSION_GOOP 1.211 +}; 1.212 + 1.213 +class WebGLExtensionTextureHalfFloat 1.214 + : public WebGLExtensionBase 1.215 +{ 1.216 +public: 1.217 + WebGLExtensionTextureHalfFloat(WebGLContext*); 1.218 + virtual ~WebGLExtensionTextureHalfFloat(); 1.219 + 1.220 + DECL_WEBGL_EXTENSION_GOOP 1.221 +}; 1.222 + 1.223 +class WebGLExtensionTextureHalfFloatLinear 1.224 + : public WebGLExtensionBase 1.225 +{ 1.226 +public: 1.227 + WebGLExtensionTextureHalfFloatLinear(WebGLContext*); 1.228 + virtual ~WebGLExtensionTextureHalfFloatLinear(); 1.229 + 1.230 + DECL_WEBGL_EXTENSION_GOOP 1.231 +}; 1.232 + 1.233 +class WebGLExtensionColorBufferFloat 1.234 + : public WebGLExtensionBase 1.235 +{ 1.236 +public: 1.237 + WebGLExtensionColorBufferFloat(WebGLContext*); 1.238 + virtual ~WebGLExtensionColorBufferFloat(); 1.239 + 1.240 + static bool IsSupported(const WebGLContext*); 1.241 + 1.242 + DECL_WEBGL_EXTENSION_GOOP 1.243 +}; 1.244 + 1.245 +class WebGLExtensionColorBufferHalfFloat 1.246 + : public WebGLExtensionBase 1.247 +{ 1.248 +public: 1.249 + WebGLExtensionColorBufferHalfFloat(WebGLContext*); 1.250 + virtual ~WebGLExtensionColorBufferHalfFloat(); 1.251 + 1.252 + static bool IsSupported(const WebGLContext*); 1.253 + 1.254 + DECL_WEBGL_EXTENSION_GOOP 1.255 +}; 1.256 + 1.257 +class WebGLExtensionDrawBuffers 1.258 + : public WebGLExtensionBase 1.259 +{ 1.260 +public: 1.261 + WebGLExtensionDrawBuffers(WebGLContext*); 1.262 + virtual ~WebGLExtensionDrawBuffers(); 1.263 + 1.264 + void DrawBuffersWEBGL(const dom::Sequence<GLenum>& buffers); 1.265 + 1.266 + static bool IsSupported(const WebGLContext*); 1.267 + 1.268 + static const size_t sMinColorAttachments = 4; 1.269 + static const size_t sMinDrawBuffers = 4; 1.270 + /* 1.271 + WEBGL_draw_buffers does not give a minal value for GL_MAX_DRAW_BUFFERS. But, we request 1.272 + for GL_MAX_DRAW_BUFFERS = 4 at least to be able to use all requested color attachments. 1.273 + See DrawBuffersWEBGL in WebGLExtensionDrawBuffers.cpp inner comments for more informations. 1.274 + */ 1.275 + 1.276 + DECL_WEBGL_EXTENSION_GOOP 1.277 +}; 1.278 + 1.279 +class WebGLExtensionVertexArray 1.280 + : public WebGLExtensionBase 1.281 +{ 1.282 +public: 1.283 + WebGLExtensionVertexArray(WebGLContext*); 1.284 + virtual ~WebGLExtensionVertexArray(); 1.285 + 1.286 + already_AddRefed<WebGLVertexArray> CreateVertexArrayOES(); 1.287 + void DeleteVertexArrayOES(WebGLVertexArray* array); 1.288 + bool IsVertexArrayOES(WebGLVertexArray* array); 1.289 + void BindVertexArrayOES(WebGLVertexArray* array); 1.290 + 1.291 + static bool IsSupported(const WebGLContext* context); 1.292 + 1.293 + DECL_WEBGL_EXTENSION_GOOP 1.294 +}; 1.295 + 1.296 +class WebGLExtensionInstancedArrays 1.297 + : public WebGLExtensionBase 1.298 +{ 1.299 +public: 1.300 + WebGLExtensionInstancedArrays(WebGLContext* context); 1.301 + virtual ~WebGLExtensionInstancedArrays(); 1.302 + 1.303 + void DrawArraysInstancedANGLE(GLenum mode, GLint first, 1.304 + GLsizei count, GLsizei primcount); 1.305 + void DrawElementsInstancedANGLE(GLenum mode, GLsizei count, 1.306 + GLenum type, WebGLintptr offset, 1.307 + GLsizei primcount); 1.308 + void VertexAttribDivisorANGLE(GLuint index, GLuint divisor); 1.309 + 1.310 + static bool IsSupported(const WebGLContext* context); 1.311 + 1.312 + DECL_WEBGL_EXTENSION_GOOP 1.313 +}; 1.314 + 1.315 +} // namespace mozilla 1.316 + 1.317 +#endif // WEBGLEXTENSIONS_H_