WebGLExtensions.h (8658B)
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/. */ 5 6 #ifndef WEBGL_EXTENSIONS_H_ 7 #define WEBGL_EXTENSIONS_H_ 8 9 #include "WebGLObjectModel.h" 10 #include "WebGLTypes.h" 11 #include "nsString.h" 12 #include "nsTArray.h" 13 #include "nsWrapperCache.h" 14 15 namespace mozilla { 16 class ErrorResult; 17 18 namespace dom { 19 template <typename> 20 struct Nullable; 21 template <typename> 22 class Sequence; 23 } // namespace dom 24 25 namespace webgl { 26 struct FormatRenderableState; 27 class FormatUsageAuthority; 28 } // namespace webgl 29 30 class WebGLContext; 31 class WebGLQuery; 32 class WebGLShader; 33 class WebGLTexture; 34 class WebGLVertexArray; 35 36 class WebGLExtensionBase { 37 protected: 38 WebGLContext* const mContext; 39 40 private: 41 bool mIsExplicit = false; 42 43 protected: 44 explicit WebGLExtensionBase(WebGLContext* context) : mContext(context) {} 45 46 public: 47 virtual ~WebGLExtensionBase() = default; 48 49 private: 50 virtual void OnSetExplicit() {} 51 52 public: 53 void SetExplicit() { 54 mIsExplicit = true; 55 OnSetExplicit(); 56 } 57 58 bool IsExplicit() const { return mIsExplicit; } 59 }; 60 61 //// 62 63 class WebGLExtensionCompressedTextureASTC : public WebGLExtensionBase { 64 public: 65 explicit WebGLExtensionCompressedTextureASTC(WebGLContext* webgl); 66 static bool IsSupported(const WebGLContext* webgl); 67 }; 68 69 class WebGLExtensionCompressedTextureBPTC final : public WebGLExtensionBase { 70 public: 71 explicit WebGLExtensionCompressedTextureBPTC(WebGLContext* webgl); 72 static bool IsSupported(const WebGLContext* webgl); 73 }; 74 75 class WebGLExtensionCompressedTextureES3 : public WebGLExtensionBase { 76 public: 77 explicit WebGLExtensionCompressedTextureES3(WebGLContext*); 78 }; 79 80 class WebGLExtensionCompressedTextureETC1 : public WebGLExtensionBase { 81 public: 82 explicit WebGLExtensionCompressedTextureETC1(WebGLContext*); 83 }; 84 85 class WebGLExtensionCompressedTexturePVRTC : public WebGLExtensionBase { 86 public: 87 explicit WebGLExtensionCompressedTexturePVRTC(WebGLContext*); 88 }; 89 90 class WebGLExtensionCompressedTextureRGTC final : public WebGLExtensionBase { 91 public: 92 explicit WebGLExtensionCompressedTextureRGTC(WebGLContext* webgl); 93 static bool IsSupported(const WebGLContext* webgl); 94 }; 95 96 class WebGLExtensionCompressedTextureS3TC : public WebGLExtensionBase { 97 public: 98 explicit WebGLExtensionCompressedTextureS3TC(WebGLContext*); 99 static bool IsSupported(const WebGLContext*); 100 }; 101 102 class WebGLExtensionCompressedTextureS3TC_SRGB : public WebGLExtensionBase { 103 public: 104 explicit WebGLExtensionCompressedTextureS3TC_SRGB(WebGLContext*); 105 static bool IsSupported(const WebGLContext*); 106 }; 107 108 class WebGLExtensionDebugRendererInfo : public WebGLExtensionBase { 109 public: 110 explicit WebGLExtensionDebugRendererInfo(WebGLContext* webgl) 111 : WebGLExtensionBase(webgl) {} 112 }; 113 114 class WebGLExtensionDebugShaders : public WebGLExtensionBase { 115 public: 116 explicit WebGLExtensionDebugShaders(WebGLContext* webgl) 117 : WebGLExtensionBase(webgl) {} 118 }; 119 120 class WebGLExtensionDepthClamp : public WebGLExtensionBase { 121 public: 122 explicit WebGLExtensionDepthClamp(WebGLContext* webgl); 123 }; 124 125 class WebGLExtensionDepthTexture : public WebGLExtensionBase { 126 public: 127 explicit WebGLExtensionDepthTexture(WebGLContext*); 128 static bool IsSupported(const WebGLContext*); 129 }; 130 131 class WebGLExtensionDrawBuffersIndexed : public WebGLExtensionBase { 132 public: 133 explicit WebGLExtensionDrawBuffersIndexed(WebGLContext* webgl) 134 : WebGLExtensionBase(webgl) {} 135 }; 136 137 class WebGLExtensionElementIndexUint : public WebGLExtensionBase { 138 public: 139 explicit WebGLExtensionElementIndexUint(WebGLContext* webgl) 140 : WebGLExtensionBase(webgl) {} 141 }; 142 143 class WebGLExtensionExplicitPresent : public WebGLExtensionBase { 144 public: 145 explicit WebGLExtensionExplicitPresent(WebGLContext*); 146 static bool IsSupported(const WebGLContext*); 147 }; 148 149 class WebGLExtensionEXTColorBufferFloat : public WebGLExtensionBase { 150 public: 151 explicit WebGLExtensionEXTColorBufferFloat(WebGLContext*); 152 static bool IsSupported(const WebGLContext*); 153 }; 154 155 class WebGLExtensionFBORenderMipmap : public WebGLExtensionBase { 156 public: 157 explicit WebGLExtensionFBORenderMipmap(WebGLContext* webgl); 158 static bool IsSupported(const WebGLContext*); 159 }; 160 161 class WebGLExtensionFloatBlend : public WebGLExtensionBase { 162 public: 163 explicit WebGLExtensionFloatBlend(WebGLContext* webgl); 164 static bool IsSupported(const WebGLContext*); 165 }; 166 167 class WebGLExtensionFragDepth : public WebGLExtensionBase { 168 public: 169 explicit WebGLExtensionFragDepth(WebGLContext*); 170 static bool IsSupported(const WebGLContext* context); 171 }; 172 173 class WebGLExtensionLoseContext : public WebGLExtensionBase { 174 public: 175 explicit WebGLExtensionLoseContext(WebGLContext* webgl) 176 : WebGLExtensionBase(webgl) {} 177 }; 178 179 class WebGLExtensionMultiview : public WebGLExtensionBase { 180 public: 181 explicit WebGLExtensionMultiview(WebGLContext*); 182 static bool IsSupported(const WebGLContext*); 183 }; 184 185 class WebGLExtensionProvokingVertex : public WebGLExtensionBase { 186 public: 187 explicit WebGLExtensionProvokingVertex(WebGLContext* webgl) 188 : WebGLExtensionBase(webgl) {} 189 }; 190 191 class WebGLExtensionSRGB : public WebGLExtensionBase { 192 public: 193 explicit WebGLExtensionSRGB(WebGLContext*); 194 static bool IsSupported(const WebGLContext* context); 195 }; 196 197 class WebGLExtensionStandardDerivatives : public WebGLExtensionBase { 198 public: 199 explicit WebGLExtensionStandardDerivatives(WebGLContext* webgl) 200 : WebGLExtensionBase(webgl) {} 201 }; 202 203 class WebGLExtensionShaderTextureLod : public WebGLExtensionBase { 204 public: 205 explicit WebGLExtensionShaderTextureLod(WebGLContext*); 206 static bool IsSupported(const WebGLContext* context); 207 }; 208 209 class WebGLExtensionTextureFilterAnisotropic : public WebGLExtensionBase { 210 public: 211 explicit WebGLExtensionTextureFilterAnisotropic(WebGLContext* webgl) 212 : WebGLExtensionBase(webgl) {} 213 }; 214 215 class WebGLExtensionTextureFloat : public WebGLExtensionBase { 216 public: 217 static void InitWebGLFormats(webgl::FormatUsageAuthority* authority); 218 219 explicit WebGLExtensionTextureFloat(WebGLContext*); 220 static bool IsSupported(const WebGLContext*); 221 }; 222 223 class WebGLExtensionTextureFloatLinear : public WebGLExtensionBase { 224 public: 225 explicit WebGLExtensionTextureFloatLinear(WebGLContext*); 226 }; 227 228 class WebGLExtensionTextureHalfFloat : public WebGLExtensionBase { 229 public: 230 static void InitWebGLFormats(webgl::FormatUsageAuthority* authority); 231 232 explicit WebGLExtensionTextureHalfFloat(WebGLContext*); 233 static bool IsSupported(const WebGLContext*); 234 }; 235 236 class WebGLExtensionTextureHalfFloatLinear : public WebGLExtensionBase { 237 public: 238 explicit WebGLExtensionTextureHalfFloatLinear(WebGLContext*); 239 }; 240 241 class WebGLExtensionTextureNorm16 : public WebGLExtensionBase { 242 public: 243 static bool IsSupported(const WebGLContext*); 244 explicit WebGLExtensionTextureNorm16(WebGLContext*); 245 }; 246 247 class WebGLExtensionColorBufferFloat : public WebGLExtensionBase { 248 public: 249 explicit WebGLExtensionColorBufferFloat(WebGLContext*); 250 static bool IsSupported(const WebGLContext*); 251 252 void SetRenderable(const webgl::FormatRenderableState&); 253 void OnSetExplicit() override; 254 }; 255 256 class WebGLExtensionColorBufferHalfFloat : public WebGLExtensionBase { 257 public: 258 explicit WebGLExtensionColorBufferHalfFloat(WebGLContext*); 259 static bool IsSupported(const WebGLContext*); 260 261 void SetRenderable(const webgl::FormatRenderableState&); 262 void OnSetExplicit() override; 263 }; 264 265 class WebGLExtensionDrawBuffers : public WebGLExtensionBase { 266 public: 267 explicit WebGLExtensionDrawBuffers(WebGLContext*); 268 static bool IsSupported(const WebGLContext*); 269 }; 270 271 class WebGLExtensionVertexArray : public WebGLExtensionBase { 272 public: 273 explicit WebGLExtensionVertexArray(WebGLContext* webgl) 274 : WebGLExtensionBase(webgl) {} 275 }; 276 277 class WebGLExtensionInstancedArrays : public WebGLExtensionBase { 278 public: 279 explicit WebGLExtensionInstancedArrays(WebGLContext* webgl); 280 static bool IsSupported(const WebGLContext* webgl); 281 }; 282 283 class WebGLExtensionBlendMinMax : public WebGLExtensionBase { 284 public: 285 explicit WebGLExtensionBlendMinMax(WebGLContext* webgl); 286 static bool IsSupported(const WebGLContext*); 287 }; 288 289 class WebGLExtensionDisjointTimerQuery : public WebGLExtensionBase { 290 public: 291 explicit WebGLExtensionDisjointTimerQuery(WebGLContext* webgl); 292 static bool IsSupported(const WebGLContext*); 293 }; 294 295 class WebGLExtensionMOZDebug final : public WebGLExtensionBase { 296 public: 297 explicit WebGLExtensionMOZDebug(WebGLContext* webgl) 298 : WebGLExtensionBase(webgl) {} 299 }; 300 301 } // namespace mozilla 302 303 #endif // WEBGL_EXTENSIONS_H_