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