1 /* 2 * Copyright (C) 2009 Apple Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_WEBGL_WEBGL_RENDERING_CONTEXT_H_ 27 #define THIRD_PARTY_BLINK_RENDERER_MODULES_WEBGL_WEBGL_RENDERING_CONTEXT_H_ 28 29 #include <memory> 30 31 #include "base/macros.h" 32 #include "third_party/blink/renderer/core/html/canvas/canvas_rendering_context_factory.h" 33 #include "third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.h" 34 35 namespace blink { 36 37 class ANGLEInstancedArrays; 38 class CanvasContextCreationAttributesCore; 39 class EXTBlendMinMax; 40 class EXTColorBufferHalfFloat; 41 class EXTFloatBlend; 42 class EXTFragDepth; 43 class EXTShaderTextureLOD; 44 class EXTsRGB; 45 class EXTTextureCompressionBPTC; 46 class EXTTextureCompressionRGTC; 47 class EXTTextureFilterAnisotropic; 48 class KHRParallelShaderCompile; 49 class OESElementIndexUint; 50 class OESFboRenderMipmap; 51 class OESStandardDerivatives; 52 class OESTextureFloat; 53 class OESTextureFloatLinear; 54 class OESTextureHalfFloat; 55 class OESTextureHalfFloatLinear; 56 class WebGLColorBufferFloat; 57 class WebGLDebugRendererInfo; 58 class WebGLDepthTexture; 59 class WebGLLoseContext; 60 class WebGLMultiDraw; 61 class WebGLVideoTexture; 62 63 class WebGLRenderingContext final : public WebGLRenderingContextBase { 64 DEFINE_WRAPPERTYPEINFO(); 65 66 public: 67 class Factory : public CanvasRenderingContextFactory { 68 public: 69 Factory() = default; 70 ~Factory() override = default; 71 72 CanvasRenderingContext* Create( 73 CanvasRenderingContextHost*, 74 const CanvasContextCreationAttributesCore&) override; 75 GetContextType()76 CanvasRenderingContext::ContextType GetContextType() const override { 77 return CanvasRenderingContext::kContextWebgl; 78 } 79 void OnError(HTMLCanvasElement*, const String& error) override; 80 81 private: 82 DISALLOW_COPY_AND_ASSIGN(Factory); 83 }; 84 85 WebGLRenderingContext(CanvasRenderingContextHost*, 86 std::unique_ptr<WebGraphicsContext3DProvider>, 87 bool using_gpu_compositing, 88 const CanvasContextCreationAttributesCore&); 89 GetContextType()90 CanvasRenderingContext::ContextType GetContextType() const override { 91 return CanvasRenderingContext::kContextWebgl; 92 } 93 ImageBitmap* TransferToImageBitmap(ScriptState*) final; ContextName()94 String ContextName() const override { return "WebGLRenderingContext"; } 95 void RegisterContextExtensions() override; 96 void SetCanvasGetContextResult(RenderingContext&) final; 97 void SetOffscreenCanvasGetContextResult(OffscreenRenderingContext&) final; 98 99 void Trace(Visitor*) override; 100 101 private: 102 // Enabled extension objects. 103 Member<ANGLEInstancedArrays> angle_instanced_arrays_; 104 Member<EXTBlendMinMax> ext_blend_min_max_; 105 Member<EXTColorBufferHalfFloat> ext_color_buffer_half_float_; 106 Member<EXTDisjointTimerQuery> ext_disjoint_timer_query_; 107 Member<EXTFloatBlend> ext_float_blend_; 108 Member<EXTFragDepth> ext_frag_depth_; 109 Member<EXTShaderTextureLOD> ext_shader_texture_lod_; 110 Member<EXTTextureCompressionBPTC> ext_texture_compression_bptc_; 111 Member<EXTTextureCompressionRGTC> ext_texture_compression_rgtc_; 112 Member<EXTTextureFilterAnisotropic> ext_texture_filter_anisotropic_; 113 Member<EXTsRGB> exts_rgb_; 114 Member<KHRParallelShaderCompile> khr_parallel_shader_compile_; 115 Member<OESElementIndexUint> oes_element_index_uint_; 116 Member<OESFboRenderMipmap> oes_fbo_render_mipmap_; 117 Member<OESStandardDerivatives> oes_standard_derivatives_; 118 Member<OESTextureFloat> oes_texture_float_; 119 Member<OESTextureFloatLinear> oes_texture_float_linear_; 120 Member<OESTextureHalfFloat> oes_texture_half_float_; 121 Member<OESTextureHalfFloatLinear> oes_texture_half_float_linear_; 122 Member<OESVertexArrayObject> oes_vertex_array_object_; 123 Member<WebGLColorBufferFloat> webgl_color_buffer_float_; 124 Member<WebGLCompressedTextureASTC> webgl_compressed_texture_astc_; 125 Member<WebGLCompressedTextureETC> webgl_compressed_texture_etc_; 126 Member<WebGLCompressedTextureETC1> webgl_compressed_texture_etc1_; 127 Member<WebGLCompressedTexturePVRTC> webgl_compressed_texture_pvrtc_; 128 Member<WebGLCompressedTextureS3TC> webgl_compressed_texture_s3tc_; 129 Member<WebGLCompressedTextureS3TCsRGB> webgl_compressed_texture_s3tc_srgb_; 130 Member<WebGLDebugRendererInfo> webgl_debug_renderer_info_; 131 Member<WebGLDebugShaders> webgl_debug_shaders_; 132 Member<WebGLDepthTexture> webgl_depth_texture_; 133 Member<WebGLDrawBuffers> webgl_draw_buffers_; 134 Member<WebGLLoseContext> webgl_lose_context_; 135 Member<WebGLMultiDraw> webgl_multi_draw_; 136 Member<WebGLVideoTexture> webgl_video_texture_; 137 }; 138 139 } // namespace blink 140 141 #endif // THIRD_PARTY_BLINK_RENDERER_MODULES_WEBGL_WEBGL_RENDERING_CONTEXT_H_ 142