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.
5 #ifndef GPU_BLINK_WEBGRAPHICSCONTEXT3D_IN_PROCESS_COMMAND_BUFFER_IMPL_H_
6 #define GPU_BLINK_WEBGRAPHICSCONTEXT3D_IN_PROCESS_COMMAND_BUFFER_IMPL_H_
10 #include "base/compiler_specific.h"
11 #include "base/memory/scoped_ptr.h"
12 #include "gpu/blink/gpu_blink_export.h"
13 #include "gpu/blink/webgraphicscontext3d_impl.h"
14 #include "gpu/command_buffer/client/gl_in_process_context.h"
15 #include "third_party/WebKit/public/platform/WebGraphicsContext3D.h"
16 #include "third_party/WebKit/public/platform/WebString.h"
17 #include "ui/gfx/native_widget_types.h"
21 class GLInProcessContext
;
25 class GLES2Implementation
;
26 struct ContextCreationAttribHelper
;
32 class GPU_BLINK_EXPORT WebGraphicsContext3DInProcessCommandBufferImpl
33 : public WebGraphicsContext3DImpl
{
35 enum MappedMemoryReclaimLimit
{
39 static scoped_ptr
<WebGraphicsContext3DInProcessCommandBufferImpl
>
41 const blink::WebGraphicsContext3D::Attributes
& attributes
,
42 bool lose_context_when_out_of_memory
,
43 gfx::AcceleratedWidget window
);
45 static scoped_ptr
<WebGraphicsContext3DInProcessCommandBufferImpl
>
46 CreateOffscreenContext(
47 const blink::WebGraphicsContext3D::Attributes
& attributes
,
48 bool lose_context_when_out_of_memory
);
50 static scoped_ptr
<WebGraphicsContext3DInProcessCommandBufferImpl
>
52 scoped_ptr
< ::gpu::GLInProcessContext
> context
,
53 const blink::WebGraphicsContext3D::Attributes
& attributes
);
55 virtual ~WebGraphicsContext3DInProcessCommandBufferImpl();
57 size_t GetMappedMemoryLimit();
59 bool InitializeOnCurrentThread();
60 void SetLock(base::Lock
* lock
);
62 //----------------------------------------------------------------------
63 // WebGraphicsContext3D methods
64 virtual bool isContextLost();
66 virtual blink::WGC3Denum
getGraphicsResetStatusARB();
68 ::gpu::ContextSupport
* GetContextSupport();
70 ::gpu::gles2::GLES2Implementation
* GetImplementation() {
75 WebGraphicsContext3DInProcessCommandBufferImpl(
76 scoped_ptr
< ::gpu::GLInProcessContext
> context
,
77 const blink::WebGraphicsContext3D::Attributes
& attributes
,
78 bool lose_context_when_out_of_memory
,
80 gfx::AcceleratedWidget window
);
84 bool MaybeInitializeGL();
86 // Used to try to find bugs in code that calls gl directly through the gl api
87 // instead of going through WebGraphicsContext3D.
90 ::gpu::gles2::ContextCreationAttribHelper attribs_
;
91 bool share_resources_
;
95 // Only used when not offscreen.
96 gfx::AcceleratedWidget window_
;
98 // The context we use for OpenGL rendering.
99 scoped_ptr
< ::gpu::GLInProcessContext
> context_
;
100 // The GLES2Implementation we use for OpenGL rendering.
101 ::gpu::gles2::GLES2Implementation
* real_gl_
;
104 } // namespace gpu_blink
106 #endif // GPU_BLINK_WEBGRAPHICSCONTEXT3D_IN_PROCESS_COMMAND_BUFFER_IMPL_H_