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