Home | History | Annotate | Download | only in client
      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 GPU_COMMAND_BUFFER_CLIENT_GL_IN_PROCESS_CONTEXT_H_
      6 #define GPU_COMMAND_BUFFER_CLIENT_GL_IN_PROCESS_CONTEXT_H_
      7 
      8 #include "base/callback.h"
      9 #include "base/compiler_specific.h"
     10 #include "gles2_impl_export.h"
     11 #include "gpu/command_buffer/service/in_process_command_buffer.h"
     12 #include "ui/gfx/native_widget_types.h"
     13 #include "ui/gl/gl_surface.h"
     14 #include "ui/gl/gpu_preference.h"
     15 
     16 namespace gfx {
     17 class Size;
     18 }
     19 
     20 #if defined(OS_ANDROID)
     21 namespace gfx {
     22 class SurfaceTexture;
     23 }
     24 #endif
     25 
     26 namespace gpu {
     27 
     28 namespace gles2 {
     29 class GLES2Implementation;
     30 }
     31 
     32 // The default uninitialized value is -1.
     33 struct GLES2_IMPL_EXPORT GLInProcessContextAttribs {
     34   GLInProcessContextAttribs();
     35 
     36   int32 alpha_size;
     37   int32 blue_size;
     38   int32 green_size;
     39   int32 red_size;
     40   int32 depth_size;
     41   int32 stencil_size;
     42   int32 samples;
     43   int32 sample_buffers;
     44   int32 fail_if_major_perf_caveat;
     45 };
     46 
     47 class GLES2_IMPL_EXPORT GLInProcessContext {
     48  public:
     49   virtual ~GLInProcessContext() {}
     50 
     51   // Create a GLInProcessContext, if |is_offscreen| is true, renders to an
     52   // offscreen context. |attrib_list| must be NULL or a NONE-terminated list
     53   // of attribute/value pairs.
     54   static GLInProcessContext* CreateContext(
     55       bool is_offscreen,
     56       gfx::AcceleratedWidget window,
     57       const gfx::Size& size,
     58       bool share_resources,
     59       const GLInProcessContextAttribs& attribs,
     60       gfx::GpuPreference gpu_preference);
     61 
     62   // Create context with the provided GLSurface. All other arguments match
     63   // CreateContext factory above. Can only be called if the command buffer
     64   // service runs on the same thread as this client because GLSurface is not
     65   // thread safe.
     66   static GLInProcessContext* CreateWithSurface(
     67       scoped_refptr<gfx::GLSurface> surface,
     68       scoped_refptr<gpu::InProcessCommandBuffer::Service> service,
     69       GLInProcessContext* share_context,
     70       const GLInProcessContextAttribs& attribs,
     71       gfx::GpuPreference gpu_preference);
     72 
     73   virtual void SetContextLostCallback(const base::Closure& callback) = 0;
     74 
     75   // Allows direct access to the GLES2 implementation so a GLInProcessContext
     76   // can be used without making it current.
     77   virtual gles2::GLES2Implementation* GetImplementation() = 0;
     78 
     79 #if defined(OS_ANDROID)
     80   virtual scoped_refptr<gfx::SurfaceTexture> GetSurfaceTexture(
     81       uint32 stream_id) = 0;
     82 #endif
     83 };
     84 
     85 }  // namespace gpu
     86 
     87 #endif  // GPU_COMMAND_BUFFER_CLIENT_GL_IN_PROCESS_CONTEXT_H_
     88