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