2018-11-30 22:52:05 +03:00
|
|
|
/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
2012-05-21 15:12:37 +04:00
|
|
|
/* 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/. */
|
2011-10-01 08:45:50 +04:00
|
|
|
|
2014-11-14 07:03:50 +03:00
|
|
|
#ifndef WEBGL_EXTENSIONS_H_
|
|
|
|
#define WEBGL_EXTENSIONS_H_
|
2011-10-01 08:45:50 +04:00
|
|
|
|
2015-07-15 03:37:28 +03:00
|
|
|
#include "mozilla/AlreadyAddRefed.h"
|
2016-11-23 05:59:35 +03:00
|
|
|
#include "nsString.h"
|
|
|
|
#include "nsTArray.h"
|
2014-03-08 01:25:27 +04:00
|
|
|
#include "nsWrapperCache.h"
|
|
|
|
#include "WebGLObjectModel.h"
|
|
|
|
#include "WebGLTypes.h"
|
2019-07-09 08:21:30 +03:00
|
|
|
#include "WebGLFormats.h"
|
2014-03-08 01:25:27 +04:00
|
|
|
|
2011-10-01 08:45:50 +04:00
|
|
|
namespace mozilla {
|
2017-01-31 05:58:52 +03:00
|
|
|
class ErrorResult;
|
2011-10-01 08:45:50 +04:00
|
|
|
|
2015-07-15 03:37:28 +03:00
|
|
|
namespace dom {
|
2016-11-23 05:59:35 +03:00
|
|
|
template <typename>
|
|
|
|
struct Nullable;
|
|
|
|
template <typename>
|
|
|
|
class Sequence;
|
2015-07-15 03:37:28 +03:00
|
|
|
} // namespace dom
|
|
|
|
|
2015-07-17 03:27:26 +03:00
|
|
|
namespace webgl {
|
|
|
|
class FormatUsageAuthority;
|
|
|
|
} // namespace webgl
|
|
|
|
|
2013-06-11 00:00:35 +04:00
|
|
|
class WebGLContext;
|
2019-05-23 10:57:29 +03:00
|
|
|
class WebGLQuery;
|
2019-05-23 23:48:21 +03:00
|
|
|
class WebGLShader;
|
|
|
|
class WebGLTexture;
|
2014-03-08 01:25:27 +04:00
|
|
|
class WebGLVertexArray;
|
2013-06-11 00:00:35 +04:00
|
|
|
|
2020-01-09 01:19:16 +03:00
|
|
|
class WebGLExtensionBase {
|
|
|
|
protected:
|
|
|
|
WebGLContext* const mContext;
|
|
|
|
|
|
|
|
private:
|
|
|
|
bool mIsExplicit = false;
|
|
|
|
|
|
|
|
protected:
|
|
|
|
explicit WebGLExtensionBase(WebGLContext* context) : mContext(context) {}
|
|
|
|
|
2011-10-27 00:00:44 +04:00
|
|
|
public:
|
2020-01-09 01:19:16 +03:00
|
|
|
virtual ~WebGLExtensionBase() = default;
|
2012-10-04 01:13:05 +04:00
|
|
|
|
2020-01-09 01:19:16 +03:00
|
|
|
private:
|
|
|
|
virtual void OnSetExplicit() {}
|
2014-03-12 06:51:39 +04:00
|
|
|
|
2020-01-09 01:19:16 +03:00
|
|
|
public:
|
2019-07-09 08:21:30 +03:00
|
|
|
void SetExplicit() {
|
|
|
|
mIsExplicit = true;
|
|
|
|
OnSetExplicit();
|
|
|
|
}
|
|
|
|
|
2020-01-09 01:19:16 +03:00
|
|
|
bool IsExplicit() const { return mIsExplicit; }
|
2011-10-27 00:00:44 +04:00
|
|
|
};
|
|
|
|
|
2016-11-23 05:59:35 +03:00
|
|
|
////
|
|
|
|
|
|
|
|
class WebGLExtensionCompressedTextureASTC : public WebGLExtensionBase {
|
|
|
|
public:
|
|
|
|
explicit WebGLExtensionCompressedTextureASTC(WebGLContext* webgl);
|
|
|
|
static bool IsSupported(const WebGLContext* webgl);
|
2018-09-28 02:37:40 +03:00
|
|
|
};
|
|
|
|
|
2018-09-28 02:37:40 +03:00
|
|
|
class WebGLExtensionCompressedTextureBPTC final : public WebGLExtensionBase {
|
|
|
|
public:
|
|
|
|
explicit WebGLExtensionCompressedTextureBPTC(WebGLContext* webgl);
|
|
|
|
static bool IsSupported(const WebGLContext* webgl);
|
|
|
|
};
|
|
|
|
|
2016-01-08 05:12:22 +03:00
|
|
|
class WebGLExtensionCompressedTextureES3 : public WebGLExtensionBase {
|
|
|
|
public:
|
|
|
|
explicit WebGLExtensionCompressedTextureES3(WebGLContext*);
|
|
|
|
};
|
|
|
|
|
2014-03-11 02:42:58 +04:00
|
|
|
class WebGLExtensionCompressedTextureETC1 : public WebGLExtensionBase {
|
|
|
|
public:
|
2014-09-03 07:21:31 +04:00
|
|
|
explicit WebGLExtensionCompressedTextureETC1(WebGLContext*);
|
2014-03-11 02:42:58 +04:00
|
|
|
};
|
|
|
|
|
2012-10-04 01:13:05 +04:00
|
|
|
class WebGLExtensionCompressedTexturePVRTC : public WebGLExtensionBase {
|
2012-02-23 17:43:57 +04:00
|
|
|
public:
|
2014-09-03 07:21:31 +04:00
|
|
|
explicit WebGLExtensionCompressedTexturePVRTC(WebGLContext*);
|
2012-02-23 17:43:57 +04:00
|
|
|
};
|
|
|
|
|
2018-09-28 02:37:40 +03:00
|
|
|
class WebGLExtensionCompressedTextureRGTC final : public WebGLExtensionBase {
|
|
|
|
public:
|
|
|
|
explicit WebGLExtensionCompressedTextureRGTC(WebGLContext* webgl);
|
|
|
|
static bool IsSupported(const WebGLContext* webgl);
|
|
|
|
};
|
|
|
|
|
2012-10-04 01:13:05 +04:00
|
|
|
class WebGLExtensionCompressedTextureS3TC : public WebGLExtensionBase {
|
2012-05-08 21:29:31 +04:00
|
|
|
public:
|
2014-09-03 07:21:31 +04:00
|
|
|
explicit WebGLExtensionCompressedTextureS3TC(WebGLContext*);
|
2017-05-30 18:21:33 +03:00
|
|
|
static bool IsSupported(const WebGLContext*);
|
|
|
|
};
|
|
|
|
|
|
|
|
class WebGLExtensionCompressedTextureS3TC_SRGB : public WebGLExtensionBase {
|
|
|
|
public:
|
|
|
|
explicit WebGLExtensionCompressedTextureS3TC_SRGB(WebGLContext*);
|
2017-08-09 02:32:23 +03:00
|
|
|
static bool IsSupported(const WebGLContext*);
|
2012-05-08 21:29:31 +04:00
|
|
|
};
|
|
|
|
|
2012-10-17 23:11:51 +04:00
|
|
|
class WebGLExtensionDebugRendererInfo : public WebGLExtensionBase {
|
|
|
|
public:
|
2020-01-09 01:19:16 +03:00
|
|
|
explicit WebGLExtensionDebugRendererInfo(WebGLContext* webgl)
|
|
|
|
: WebGLExtensionBase(webgl) {}
|
2012-10-17 23:11:51 +04:00
|
|
|
};
|
|
|
|
|
2014-02-12 02:37:06 +04:00
|
|
|
class WebGLExtensionDebugShaders : public WebGLExtensionBase {
|
|
|
|
public:
|
2020-01-09 01:19:16 +03:00
|
|
|
explicit WebGLExtensionDebugShaders(WebGLContext* webgl)
|
|
|
|
: WebGLExtensionBase(webgl) {}
|
2014-02-12 02:37:06 +04:00
|
|
|
};
|
|
|
|
|
2012-10-04 01:13:05 +04:00
|
|
|
class WebGLExtensionDepthTexture : public WebGLExtensionBase {
|
2012-09-25 16:49:28 +04:00
|
|
|
public:
|
2014-09-03 07:21:31 +04:00
|
|
|
explicit WebGLExtensionDepthTexture(WebGLContext*);
|
2019-02-05 06:34:49 +03:00
|
|
|
static bool IsSupported(const WebGLContext*);
|
2012-09-25 16:49:28 +04:00
|
|
|
};
|
|
|
|
|
2013-05-13 17:22:30 +04:00
|
|
|
class WebGLExtensionElementIndexUint : public WebGLExtensionBase {
|
|
|
|
public:
|
2020-01-09 01:19:16 +03:00
|
|
|
explicit WebGLExtensionElementIndexUint(WebGLContext* webgl)
|
|
|
|
: WebGLExtensionBase(webgl) {}
|
2013-05-13 17:22:30 +04:00
|
|
|
};
|
|
|
|
|
2019-06-25 22:48:24 +03:00
|
|
|
class WebGLExtensionExplicitPresent : public WebGLExtensionBase {
|
|
|
|
public:
|
|
|
|
explicit WebGLExtensionExplicitPresent(WebGLContext*);
|
|
|
|
static bool IsSupported(const WebGLContext*);
|
|
|
|
};
|
|
|
|
|
2016-05-05 02:39:02 +03:00
|
|
|
class WebGLExtensionEXTColorBufferFloat : public WebGLExtensionBase {
|
|
|
|
public:
|
|
|
|
explicit WebGLExtensionEXTColorBufferFloat(WebGLContext*);
|
|
|
|
static bool IsSupported(const WebGLContext*);
|
|
|
|
};
|
|
|
|
|
2019-02-22 22:25:20 +03:00
|
|
|
class WebGLExtensionFBORenderMipmap : public WebGLExtensionBase {
|
|
|
|
public:
|
|
|
|
explicit WebGLExtensionFBORenderMipmap(WebGLContext* webgl);
|
|
|
|
static bool IsSupported(const WebGLContext*);
|
|
|
|
};
|
|
|
|
|
2019-02-01 02:39:12 +03:00
|
|
|
class WebGLExtensionFloatBlend : public WebGLExtensionBase {
|
|
|
|
public:
|
|
|
|
explicit WebGLExtensionFloatBlend(WebGLContext* webgl);
|
|
|
|
static bool IsSupported(const WebGLContext*);
|
|
|
|
};
|
|
|
|
|
2014-02-14 03:00:12 +04:00
|
|
|
class WebGLExtensionFragDepth : public WebGLExtensionBase {
|
|
|
|
public:
|
2014-09-03 07:21:31 +04:00
|
|
|
explicit WebGLExtensionFragDepth(WebGLContext*);
|
2014-02-14 03:00:12 +04:00
|
|
|
static bool IsSupported(const WebGLContext* context);
|
|
|
|
};
|
|
|
|
|
2012-10-04 01:13:05 +04:00
|
|
|
class WebGLExtensionLoseContext : public WebGLExtensionBase {
|
2012-09-25 16:49:28 +04:00
|
|
|
public:
|
2020-01-09 01:19:16 +03:00
|
|
|
explicit WebGLExtensionLoseContext(WebGLContext* webgl)
|
|
|
|
: WebGLExtensionBase(webgl) {}
|
|
|
|
};
|
2012-09-25 16:49:28 +04:00
|
|
|
|
2020-01-09 01:19:16 +03:00
|
|
|
class WebGLExtensionMultiview : public WebGLExtensionBase {
|
|
|
|
public:
|
|
|
|
explicit WebGLExtensionMultiview(WebGLContext*);
|
|
|
|
static bool IsSupported(const WebGLContext*);
|
2012-09-25 16:49:28 +04:00
|
|
|
};
|
|
|
|
|
2013-11-05 01:05:04 +04:00
|
|
|
class WebGLExtensionSRGB : public WebGLExtensionBase {
|
|
|
|
public:
|
2014-09-03 07:21:31 +04:00
|
|
|
explicit WebGLExtensionSRGB(WebGLContext*);
|
2013-11-05 01:05:04 +04:00
|
|
|
static bool IsSupported(const WebGLContext* context);
|
|
|
|
};
|
|
|
|
|
2012-10-04 01:13:05 +04:00
|
|
|
class WebGLExtensionStandardDerivatives : public WebGLExtensionBase {
|
2012-08-14 05:17:55 +04:00
|
|
|
public:
|
2020-01-09 01:19:16 +03:00
|
|
|
explicit WebGLExtensionStandardDerivatives(WebGLContext* webgl)
|
|
|
|
: WebGLExtensionBase(webgl) {}
|
2012-10-04 01:13:05 +04:00
|
|
|
};
|
|
|
|
|
2014-07-24 19:58:43 +04:00
|
|
|
class WebGLExtensionShaderTextureLod : public WebGLExtensionBase {
|
|
|
|
public:
|
2014-09-03 07:21:31 +04:00
|
|
|
explicit WebGLExtensionShaderTextureLod(WebGLContext*);
|
2018-09-26 07:48:17 +03:00
|
|
|
static bool IsSupported(const WebGLContext* context);
|
2014-07-24 19:58:43 +04:00
|
|
|
};
|
|
|
|
|
2012-10-04 01:13:05 +04:00
|
|
|
class WebGLExtensionTextureFilterAnisotropic : public WebGLExtensionBase {
|
|
|
|
public:
|
2020-01-09 01:19:16 +03:00
|
|
|
explicit WebGLExtensionTextureFilterAnisotropic(WebGLContext* webgl)
|
|
|
|
: WebGLExtensionBase(webgl) {}
|
2012-10-04 01:13:05 +04:00
|
|
|
};
|
|
|
|
|
|
|
|
class WebGLExtensionTextureFloat : public WebGLExtensionBase {
|
|
|
|
public:
|
2015-07-17 03:27:26 +03:00
|
|
|
static void InitWebGLFormats(webgl::FormatUsageAuthority* authority);
|
|
|
|
|
2014-09-03 07:21:31 +04:00
|
|
|
explicit WebGLExtensionTextureFloat(WebGLContext*);
|
2015-11-25 07:15:29 +03:00
|
|
|
static bool IsSupported(const WebGLContext*);
|
2012-08-14 05:17:55 +04:00
|
|
|
};
|
|
|
|
|
2013-06-11 00:00:52 +04:00
|
|
|
class WebGLExtensionTextureFloatLinear : public WebGLExtensionBase {
|
|
|
|
public:
|
2014-09-03 07:21:31 +04:00
|
|
|
explicit WebGLExtensionTextureFloatLinear(WebGLContext*);
|
2013-06-11 00:00:52 +04:00
|
|
|
};
|
|
|
|
|
2014-01-24 01:47:37 +04:00
|
|
|
class WebGLExtensionTextureHalfFloat : public WebGLExtensionBase {
|
|
|
|
public:
|
2015-07-17 03:27:26 +03:00
|
|
|
static void InitWebGLFormats(webgl::FormatUsageAuthority* authority);
|
|
|
|
|
2014-09-03 07:21:31 +04:00
|
|
|
explicit WebGLExtensionTextureHalfFloat(WebGLContext*);
|
2015-11-25 07:15:29 +03:00
|
|
|
static bool IsSupported(const WebGLContext*);
|
2014-01-24 01:47:37 +04:00
|
|
|
};
|
|
|
|
|
2014-02-13 18:53:53 +04:00
|
|
|
class WebGLExtensionTextureHalfFloatLinear : public WebGLExtensionBase {
|
|
|
|
public:
|
2014-09-03 07:21:31 +04:00
|
|
|
explicit WebGLExtensionTextureHalfFloatLinear(WebGLContext*);
|
2014-02-13 18:53:53 +04:00
|
|
|
};
|
|
|
|
|
2020-08-12 18:19:17 +03:00
|
|
|
class WebGLExtensionTextureNorm16 : public WebGLExtensionBase {
|
|
|
|
public:
|
|
|
|
static bool IsSupported(const WebGLContext*);
|
|
|
|
explicit WebGLExtensionTextureNorm16(WebGLContext*);
|
|
|
|
};
|
|
|
|
|
2014-03-08 01:26:17 +04:00
|
|
|
class WebGLExtensionColorBufferFloat : public WebGLExtensionBase {
|
|
|
|
public:
|
2014-09-03 07:21:31 +04:00
|
|
|
explicit WebGLExtensionColorBufferFloat(WebGLContext*);
|
2014-03-08 01:26:17 +04:00
|
|
|
static bool IsSupported(const WebGLContext*);
|
|
|
|
|
2019-07-09 08:21:30 +03:00
|
|
|
void SetRenderable(const webgl::FormatRenderableState);
|
|
|
|
void OnSetExplicit() override;
|
2014-03-08 01:26:17 +04:00
|
|
|
};
|
|
|
|
|
|
|
|
class WebGLExtensionColorBufferHalfFloat : public WebGLExtensionBase {
|
|
|
|
public:
|
2014-09-03 07:21:31 +04:00
|
|
|
explicit WebGLExtensionColorBufferHalfFloat(WebGLContext*);
|
2014-03-08 01:26:17 +04:00
|
|
|
static bool IsSupported(const WebGLContext*);
|
|
|
|
|
2019-07-09 08:21:30 +03:00
|
|
|
void SetRenderable(const webgl::FormatRenderableState);
|
|
|
|
void OnSetExplicit() override;
|
2014-03-08 01:26:17 +04:00
|
|
|
};
|
|
|
|
|
2013-06-22 03:44:17 +04:00
|
|
|
class WebGLExtensionDrawBuffers : public WebGLExtensionBase {
|
|
|
|
public:
|
2014-09-03 07:21:31 +04:00
|
|
|
explicit WebGLExtensionDrawBuffers(WebGLContext*);
|
2013-06-22 03:44:17 +04:00
|
|
|
static bool IsSupported(const WebGLContext*);
|
|
|
|
};
|
|
|
|
|
2013-06-28 01:07:21 +04:00
|
|
|
class WebGLExtensionVertexArray : public WebGLExtensionBase {
|
|
|
|
public:
|
2020-01-09 01:19:16 +03:00
|
|
|
explicit WebGLExtensionVertexArray(WebGLContext* webgl)
|
|
|
|
: WebGLExtensionBase(webgl) {}
|
2013-06-28 01:07:21 +04:00
|
|
|
};
|
|
|
|
|
2013-08-14 02:11:01 +04:00
|
|
|
class WebGLExtensionInstancedArrays : public WebGLExtensionBase {
|
|
|
|
public:
|
2014-11-14 07:03:50 +03:00
|
|
|
explicit WebGLExtensionInstancedArrays(WebGLContext* webgl);
|
|
|
|
static bool IsSupported(const WebGLContext* webgl);
|
2013-08-14 02:11:01 +04:00
|
|
|
};
|
|
|
|
|
2014-06-14 20:07:53 +04:00
|
|
|
class WebGLExtensionBlendMinMax : public WebGLExtensionBase {
|
|
|
|
public:
|
2014-11-14 07:03:50 +03:00
|
|
|
explicit WebGLExtensionBlendMinMax(WebGLContext* webgl);
|
2014-06-14 20:07:53 +04:00
|
|
|
static bool IsSupported(const WebGLContext*);
|
|
|
|
};
|
|
|
|
|
2015-05-27 14:12:00 +03:00
|
|
|
class WebGLExtensionDisjointTimerQuery : public WebGLExtensionBase {
|
|
|
|
public:
|
|
|
|
explicit WebGLExtensionDisjointTimerQuery(WebGLContext* webgl);
|
|
|
|
static bool IsSupported(const WebGLContext*);
|
|
|
|
};
|
|
|
|
|
2017-04-11 11:50:59 +03:00
|
|
|
class WebGLExtensionMOZDebug final : public WebGLExtensionBase {
|
2017-01-31 05:58:52 +03:00
|
|
|
public:
|
2020-01-09 01:19:16 +03:00
|
|
|
explicit WebGLExtensionMOZDebug(WebGLContext* webgl)
|
|
|
|
: WebGLExtensionBase(webgl) {}
|
2019-05-23 23:48:21 +03:00
|
|
|
};
|
|
|
|
|
2012-10-04 01:13:05 +04:00
|
|
|
} // namespace mozilla
|
2011-10-01 08:45:50 +04:00
|
|
|
|
2014-11-14 07:03:50 +03:00
|
|
|
#endif // WEBGL_EXTENSIONS_H_
|