1 // Copyright 2015 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_WEBGL_WEBGL2_RENDERING_CONTEXT_H_ 6 #define THIRD_PARTY_BLINK_RENDERER_MODULES_WEBGL_WEBGL2_RENDERING_CONTEXT_H_ 7 8 #include <memory> 9 10 #include "base/macros.h" 11 #include "third_party/blink/renderer/core/html/canvas/canvas_rendering_context_factory.h" 12 #include "third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.h" 13 14 namespace blink { 15 16 class CanvasContextCreationAttributesCore; 17 class EXTColorBufferFloat; 18 class EXTColorBufferHalfFloat; 19 class EXTFloatBlend; 20 class EXTTextureCompressionBPTC; 21 class EXTTextureCompressionRGTC; 22 class EXTTextureFilterAnisotropic; 23 class EXTTextureNorm16; 24 class OESDrawBuffersIndexed; 25 class OESTextureFloatLinear; 26 class OVRMultiview2; 27 class WebGLDebugRendererInfo; 28 class WebGLDrawInstancedBaseVertexBaseInstance; 29 class WebGLLoseContext; 30 class WebGLMultiDraw; 31 class WebGLMultiDrawInstancedBaseVertexBaseInstance; 32 class KHRParallelShaderCompile; 33 class WebGLVideoTexture; 34 35 class WebGL2RenderingContext : public WebGL2RenderingContextBase { 36 DEFINE_WRAPPERTYPEINFO(); 37 38 public: 39 class Factory : public CanvasRenderingContextFactory { 40 public: 41 Factory() = default; 42 ~Factory() override = default; 43 44 CanvasRenderingContext* Create( 45 CanvasRenderingContextHost*, 46 const CanvasContextCreationAttributesCore&) override; GetContextType()47 CanvasRenderingContext::ContextType GetContextType() const override { 48 return CanvasRenderingContext::kContextWebgl2; 49 } 50 void OnError(HTMLCanvasElement*, const String& error) override; 51 52 private: 53 DISALLOW_COPY_AND_ASSIGN(Factory); 54 }; 55 56 WebGL2RenderingContext( 57 CanvasRenderingContextHost*, 58 std::unique_ptr<WebGraphicsContext3DProvider>, 59 bool using_gpu_compositing, 60 const CanvasContextCreationAttributesCore& requested_attributes); 61 GetContextType()62 CanvasRenderingContext::ContextType GetContextType() const override { 63 return CanvasRenderingContext::kContextWebgl2; 64 } 65 ImageBitmap* TransferToImageBitmap(ScriptState*) final; ContextName()66 String ContextName() const override { return "WebGL2RenderingContext"; } 67 void RegisterContextExtensions() override; 68 void SetCanvasGetContextResult(RenderingContext&) final; 69 void SetOffscreenCanvasGetContextResult(OffscreenRenderingContext&) final; 70 71 void Trace(Visitor*) const override; 72 73 protected: 74 Member<EXTColorBufferFloat> ext_color_buffer_float_; 75 Member<EXTColorBufferHalfFloat> ext_color_buffer_half_float_; 76 Member<EXTDisjointTimerQueryWebGL2> ext_disjoint_timer_query_web_gl2_; 77 Member<EXTFloatBlend> ext_float_blend_; 78 Member<EXTTextureCompressionBPTC> ext_texture_compression_bptc_; 79 Member<EXTTextureCompressionRGTC> ext_texture_compression_rgtc_; 80 Member<EXTTextureFilterAnisotropic> ext_texture_filter_anisotropic_; 81 Member<EXTTextureNorm16> ext_texture_norm16_; 82 Member<KHRParallelShaderCompile> khr_parallel_shader_compile_; 83 Member<OESDrawBuffersIndexed> oes_draw_buffers_indexed_; 84 Member<OESTextureFloatLinear> oes_texture_float_linear_; 85 Member<OVRMultiview2> ovr_multiview2_; 86 Member<WebGLCompressedTextureASTC> webgl_compressed_texture_astc_; 87 Member<WebGLCompressedTextureETC> webgl_compressed_texture_etc_; 88 Member<WebGLCompressedTextureETC1> webgl_compressed_texture_etc1_; 89 Member<WebGLCompressedTexturePVRTC> webgl_compressed_texture_pvrtc_; 90 Member<WebGLCompressedTextureS3TC> webgl_compressed_texture_s3tc_; 91 Member<WebGLCompressedTextureS3TCsRGB> webgl_compressed_texture_s3tc_srgb_; 92 Member<WebGLDebugRendererInfo> webgl_debug_renderer_info_; 93 Member<WebGLDebugShaders> webgl_debug_shaders_; 94 Member<WebGLDrawInstancedBaseVertexBaseInstance> 95 webgl_draw_instanced_base_vertex_base_instance_; 96 Member<WebGLLoseContext> webgl_lose_context_; 97 Member<WebGLMultiDraw> webgl_multi_draw_; 98 Member<WebGLMultiDrawInstancedBaseVertexBaseInstance> 99 webgl_multi_draw_instanced_base_vertex_base_instance_; 100 Member<WebGLVideoTexture> webgl_video_texture_; 101 }; 102 103 } // namespace blink 104 105 #endif 106