1// Copyright (c) 2012 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 WEBKIT_COMMON_GPU_WEBGRAPHICSCONTEXT3D_IN_PROCESS_COMMAND_BUFFER_IMPL_H_
6#define WEBKIT_COMMON_GPU_WEBGRAPHICSCONTEXT3D_IN_PROCESS_COMMAND_BUFFER_IMPL_H_
7
8#include <vector>
9
10#include "base/compiler_specific.h"
11#include "base/memory/scoped_ptr.h"
12#include "gpu/command_buffer/client/gl_in_process_context.h"
13#include "third_party/WebKit/public/platform/WebGraphicsContext3D.h"
14#include "third_party/WebKit/public/platform/WebString.h"
15#include "ui/gfx/native_widget_types.h"
16#include "webkit/common/gpu/webgraphicscontext3d_impl.h"
17#include "webkit/common/gpu/webkit_gpu_export.h"
18
19namespace gpu {
20class ContextSupport;
21
22namespace gles2 {
23class GLES2Interface;
24class GLES2Implementation;
25struct ContextCreationAttribHelper;
26}
27}
28
29namespace gpu {
30class GLInProcessContext;
31}
32
33namespace webkit {
34namespace gpu {
35
36class WEBKIT_GPU_EXPORT WebGraphicsContext3DInProcessCommandBufferImpl
37    : public WebGraphicsContext3DImpl {
38 public:
39  enum MappedMemoryReclaimLimit {
40    kNoLimit = 0,
41  };
42
43  static scoped_ptr<WebGraphicsContext3DInProcessCommandBufferImpl>
44      CreateViewContext(
45          const blink::WebGraphicsContext3D::Attributes& attributes,
46          bool lose_context_when_out_of_memory,
47          gfx::AcceleratedWidget window);
48
49  static scoped_ptr<WebGraphicsContext3DInProcessCommandBufferImpl>
50      CreateOffscreenContext(
51          const blink::WebGraphicsContext3D::Attributes& attributes,
52          bool lose_context_when_out_of_memory);
53
54  static scoped_ptr<WebGraphicsContext3DInProcessCommandBufferImpl>
55      WrapContext(
56          scoped_ptr< ::gpu::GLInProcessContext> context,
57          const blink::WebGraphicsContext3D::Attributes& attributes);
58
59  virtual ~WebGraphicsContext3DInProcessCommandBufferImpl();
60
61  size_t GetMappedMemoryLimit();
62
63  // WebGraphicsContext3DImpl methods
64  virtual bool InitializeOnCurrentThread() OVERRIDE;
65
66  //----------------------------------------------------------------------
67  // WebGraphicsContext3D methods
68  virtual bool isContextLost();
69
70  virtual WGC3Denum getGraphicsResetStatusARB();
71
72  ::gpu::ContextSupport* GetContextSupport();
73
74  ::gpu::gles2::GLES2Implementation* GetImplementation() {
75    return real_gl_;
76  }
77
78 private:
79  WebGraphicsContext3DInProcessCommandBufferImpl(
80      scoped_ptr< ::gpu::GLInProcessContext> context,
81      const blink::WebGraphicsContext3D::Attributes& attributes,
82      bool lose_context_when_out_of_memory,
83      bool is_offscreen,
84      gfx::AcceleratedWidget window);
85
86  void OnContextLost();
87
88  bool MaybeInitializeGL();
89
90  // Used to try to find bugs in code that calls gl directly through the gl api
91  // instead of going through WebGraphicsContext3D.
92  void ClearContext();
93
94  ::gpu::gles2::ContextCreationAttribHelper attribs_;
95  bool share_resources_;
96  bool webgl_context_;
97
98  bool is_offscreen_;
99  // Only used when not offscreen.
100  gfx::AcceleratedWidget window_;
101
102  // The context we use for OpenGL rendering.
103  scoped_ptr< ::gpu::GLInProcessContext> context_;
104  // The GLES2Implementation we use for OpenGL rendering.
105  ::gpu::gles2::GLES2Implementation* real_gl_;
106};
107
108}  // namespace gpu
109}  // namespace webkit
110
111#endif  // WEBKIT_COMMON_GPU_WEBGRAPHICSCONTEXT3D_IN_PROCESS_COMMAND_BUFFER_IMPL_H_
112