diff options
Diffstat (limited to 'dom/canvas/ClientWebGLExtensions.cpp')
-rw-r--r-- | dom/canvas/ClientWebGLExtensions.cpp | 254 |
1 files changed, 254 insertions, 0 deletions
diff --git a/dom/canvas/ClientWebGLExtensions.cpp b/dom/canvas/ClientWebGLExtensions.cpp new file mode 100644 index 0000000000..a7e2d7a70a --- /dev/null +++ b/dom/canvas/ClientWebGLExtensions.cpp @@ -0,0 +1,254 @@ +/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* 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/. */ + +#include "ClientWebGLExtensions.h" + +namespace mozilla { + +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_0(ClientWebGLExtensionBase) + +DEFINE_WEBGL_EXTENSION_GOOP(ANGLE_instanced_arrays, + WebGLExtensionInstancedArrays) +DEFINE_WEBGL_EXTENSION_GOOP(EXT_blend_minmax, WebGLExtensionBlendMinMax) +DEFINE_WEBGL_EXTENSION_GOOP(EXT_color_buffer_float, + WebGLExtensionEXTColorBufferFloat) +DEFINE_WEBGL_EXTENSION_GOOP(EXT_color_buffer_half_float, + WebGLExtensionColorBufferHalfFloat) +DEFINE_WEBGL_EXTENSION_GOOP(EXT_float_blend, WebGLExtensionFloatBlend) +DEFINE_WEBGL_EXTENSION_GOOP(EXT_frag_depth, WebGLExtensionFragDepth) +DEFINE_WEBGL_EXTENSION_GOOP(EXT_sRGB, WebGLExtensionSRGB) +DEFINE_WEBGL_EXTENSION_GOOP(EXT_shader_texture_lod, + WebGLExtensionShaderTextureLod) +DEFINE_WEBGL_EXTENSION_GOOP(EXT_texture_filter_anisotropic, + WebGLExtensionTextureFilterAnisotropic) +DEFINE_WEBGL_EXTENSION_GOOP(EXT_texture_norm16, WebGLExtensionTextureNorm16) +DEFINE_WEBGL_EXTENSION_GOOP(MOZ_debug, WebGLExtensionMOZDebug) +DEFINE_WEBGL_EXTENSION_GOOP(OES_draw_buffers_indexed, + WebGLExtensionDrawBuffersIndexed) +DEFINE_WEBGL_EXTENSION_GOOP(OES_element_index_uint, + WebGLExtensionElementIndexUint) +DEFINE_WEBGL_EXTENSION_GOOP(OES_fbo_render_mipmap, + WebGLExtensionFBORenderMipmap) +DEFINE_WEBGL_EXTENSION_GOOP(OES_standard_derivatives, + WebGLExtensionStandardDerivatives) +DEFINE_WEBGL_EXTENSION_GOOP(OES_texture_float, WebGLExtensionTextureFloat) +DEFINE_WEBGL_EXTENSION_GOOP(OES_texture_float_linear, + WebGLExtensionTextureFloatLinear) +DEFINE_WEBGL_EXTENSION_GOOP(OES_texture_half_float, + WebGLExtensionTextureHalfFloat) +DEFINE_WEBGL_EXTENSION_GOOP(OES_texture_half_float_linear, + WebGLExtensionTextureHalfFloatLinear) +DEFINE_WEBGL_EXTENSION_GOOP(OES_vertex_array_object, WebGLExtensionVertexArray) +DEFINE_WEBGL_EXTENSION_GOOP(OVR_multiview2, WebGLExtensionMultiview) +DEFINE_WEBGL_EXTENSION_GOOP(WEBGL_color_buffer_float, + WebGLExtensionColorBufferFloat) +DEFINE_WEBGL_EXTENSION_GOOP(WEBGL_debug_renderer_info, + WebGLExtensionDebugRendererInfo) +DEFINE_WEBGL_EXTENSION_GOOP(WEBGL_debug_shaders, WebGLExtensionDebugShaders) +DEFINE_WEBGL_EXTENSION_GOOP(WEBGL_depth_texture, WebGLExtensionDepthTexture) +DEFINE_WEBGL_EXTENSION_GOOP(WEBGL_draw_buffers, WebGLExtensionDrawBuffers) +DEFINE_WEBGL_EXTENSION_GOOP(WEBGL_explicit_present, + WebGLExtensionExplicitPresent) +DEFINE_WEBGL_EXTENSION_GOOP(WEBGL_lose_context, WebGLExtensionLoseContext) +DEFINE_WEBGL_EXTENSION_GOOP(WEBGL_provoking_vertex, + WebGLExtensionProvokingVertex) + +// -------------- + +JSObject* ClientWebGLExtensionDisjointTimerQuery::WrapObject( + JSContext* cx, JS::Handle<JSObject*> givenProto) { + return dom::EXT_disjoint_timer_query_Binding::Wrap(cx, this, givenProto); +} + +ClientWebGLExtensionDisjointTimerQuery::ClientWebGLExtensionDisjointTimerQuery( + ClientWebGLContext& webgl) + : ClientWebGLExtensionBase(webgl) { + auto& state = webgl.State(); + // Add slot for new key: + (void)state.mCurrentQueryByTarget[LOCAL_GL_TIME_ELAPSED]; +} + +// -------------- +// Compressed textures + +void ClientWebGLContext::AddCompressedFormat(const GLenum format) { + auto& state = State(); + state.mCompressedTextureFormats.push_back(format); +} + +// - + +JSObject* ClientWebGLExtensionCompressedTextureASTC::WrapObject( + JSContext* cx, JS::Handle<JSObject*> givenProto) { + return dom::WEBGL_compressed_texture_astc_Binding::Wrap(cx, this, givenProto); +} + +ClientWebGLExtensionCompressedTextureASTC:: + ClientWebGLExtensionCompressedTextureASTC(ClientWebGLContext& webgl) + : ClientWebGLExtensionBase(webgl) { +#define _(X) webgl.AddCompressedFormat(LOCAL_GL_##X); + + _(COMPRESSED_RGBA_ASTC_4x4_KHR) + _(COMPRESSED_RGBA_ASTC_5x4_KHR) + _(COMPRESSED_RGBA_ASTC_5x5_KHR) + _(COMPRESSED_RGBA_ASTC_6x5_KHR) + _(COMPRESSED_RGBA_ASTC_6x6_KHR) + _(COMPRESSED_RGBA_ASTC_8x5_KHR) + _(COMPRESSED_RGBA_ASTC_8x6_KHR) + _(COMPRESSED_RGBA_ASTC_8x8_KHR) + _(COMPRESSED_RGBA_ASTC_10x5_KHR) + _(COMPRESSED_RGBA_ASTC_10x6_KHR) + _(COMPRESSED_RGBA_ASTC_10x8_KHR) + _(COMPRESSED_RGBA_ASTC_10x10_KHR) + _(COMPRESSED_RGBA_ASTC_12x10_KHR) + _(COMPRESSED_RGBA_ASTC_12x12_KHR) + + _(COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR) + _(COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR) + _(COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR) + _(COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR) + _(COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR) + _(COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR) + _(COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR) + _(COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR) + _(COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR) + _(COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR) + _(COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR) + _(COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR) + _(COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR) + _(COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR) + +#undef _ +} + +// - + +JSObject* ClientWebGLExtensionCompressedTextureBPTC::WrapObject( + JSContext* cx, JS::Handle<JSObject*> givenProto) { + return dom::EXT_texture_compression_bptc_Binding::Wrap(cx, this, givenProto); +} + +ClientWebGLExtensionCompressedTextureBPTC:: + ClientWebGLExtensionCompressedTextureBPTC(ClientWebGLContext& webgl) + : ClientWebGLExtensionBase(webgl) { +#define _(X) webgl.AddCompressedFormat(LOCAL_GL_##X); + _(COMPRESSED_RGBA_BPTC_UNORM) + _(COMPRESSED_SRGB_ALPHA_BPTC_UNORM) + _(COMPRESSED_RGB_BPTC_SIGNED_FLOAT) + _(COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT) +#undef _ +} + +// - + +JSObject* ClientWebGLExtensionCompressedTextureRGTC::WrapObject( + JSContext* cx, JS::Handle<JSObject*> givenProto) { + return dom::EXT_texture_compression_rgtc_Binding::Wrap(cx, this, givenProto); +} + +ClientWebGLExtensionCompressedTextureRGTC:: + ClientWebGLExtensionCompressedTextureRGTC(ClientWebGLContext& webgl) + : ClientWebGLExtensionBase(webgl) { +#define _(X) webgl.AddCompressedFormat(LOCAL_GL_##X); + _(COMPRESSED_RED_RGTC1) + _(COMPRESSED_SIGNED_RED_RGTC1) + _(COMPRESSED_RG_RGTC2) + _(COMPRESSED_SIGNED_RG_RGTC2) +#undef _ +} + +// - + +JSObject* ClientWebGLExtensionCompressedTextureES3::WrapObject( + JSContext* cx, JS::Handle<JSObject*> givenProto) { + return dom::WEBGL_compressed_texture_etc_Binding::Wrap(cx, this, givenProto); +} +ClientWebGLExtensionCompressedTextureES3:: + ClientWebGLExtensionCompressedTextureES3(ClientWebGLContext& webgl) + : ClientWebGLExtensionBase(webgl) { +#define _(X) webgl.AddCompressedFormat(LOCAL_GL_##X); + _(COMPRESSED_R11_EAC) + _(COMPRESSED_SIGNED_R11_EAC) + _(COMPRESSED_RG11_EAC) + _(COMPRESSED_SIGNED_RG11_EAC) + _(COMPRESSED_RGB8_ETC2) + _(COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2) + _(COMPRESSED_RGBA8_ETC2_EAC) + + // sRGB support is manadatory in GL 4.3 and GL ES 3.0, which are the only + // versions to support ETC2. + _(COMPRESSED_SRGB8_ALPHA8_ETC2_EAC) + _(COMPRESSED_SRGB8_ETC2) + _(COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2) +#undef _ +} + +// - + +JSObject* ClientWebGLExtensionCompressedTextureETC1::WrapObject( + JSContext* cx, JS::Handle<JSObject*> givenProto) { + return dom::WEBGL_compressed_texture_etc1_Binding::Wrap(cx, this, givenProto); +} +ClientWebGLExtensionCompressedTextureETC1:: + ClientWebGLExtensionCompressedTextureETC1(ClientWebGLContext& webgl) + : ClientWebGLExtensionBase(webgl) { + webgl.AddCompressedFormat(LOCAL_GL_ETC1_RGB8_OES); +} + +// - + +JSObject* ClientWebGLExtensionCompressedTexturePVRTC::WrapObject( + JSContext* cx, JS::Handle<JSObject*> givenProto) { + return dom::WEBGL_compressed_texture_pvrtc_Binding::Wrap(cx, this, + givenProto); +} +ClientWebGLExtensionCompressedTexturePVRTC:: + ClientWebGLExtensionCompressedTexturePVRTC(ClientWebGLContext& webgl) + : ClientWebGLExtensionBase(webgl) { +#define _(X) webgl.AddCompressedFormat(LOCAL_GL_##X); + _(COMPRESSED_RGB_PVRTC_4BPPV1) + _(COMPRESSED_RGB_PVRTC_2BPPV1) + _(COMPRESSED_RGBA_PVRTC_4BPPV1) + _(COMPRESSED_RGBA_PVRTC_2BPPV1) +#undef _ +} + +// - + +JSObject* ClientWebGLExtensionCompressedTextureS3TC::WrapObject( + JSContext* cx, JS::Handle<JSObject*> givenProto) { + return dom::WEBGL_compressed_texture_s3tc_Binding::Wrap(cx, this, givenProto); +} +ClientWebGLExtensionCompressedTextureS3TC:: + ClientWebGLExtensionCompressedTextureS3TC(ClientWebGLContext& webgl) + : ClientWebGLExtensionBase(webgl) { +#define _(X) webgl.AddCompressedFormat(LOCAL_GL_##X); + _(COMPRESSED_RGB_S3TC_DXT1_EXT) + _(COMPRESSED_RGBA_S3TC_DXT1_EXT) + _(COMPRESSED_RGBA_S3TC_DXT3_EXT) + _(COMPRESSED_RGBA_S3TC_DXT5_EXT) +#undef _ +} + +// - + +JSObject* ClientWebGLExtensionCompressedTextureS3TC_SRGB::WrapObject( + JSContext* cx, JS::Handle<JSObject*> givenProto) { + return dom::WEBGL_compressed_texture_s3tc_srgb_Binding::Wrap(cx, this, + givenProto); +} + +ClientWebGLExtensionCompressedTextureS3TC_SRGB:: + ClientWebGLExtensionCompressedTextureS3TC_SRGB(ClientWebGLContext& webgl) + : ClientWebGLExtensionBase(webgl) { +#define _(X) webgl.AddCompressedFormat(LOCAL_GL_##X); + _(COMPRESSED_SRGB_S3TC_DXT1_EXT) + _(COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT) + _(COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT) + _(COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT) +#undef _ +} + +} // namespace mozilla |