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 "gl_in_process_context_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 GL_IN_PROCESS_CONTEXT_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   int32 lose_context_when_out_of_memory;
     46 };
     47 
     48 class GL_IN_PROCESS_CONTEXT_EXPORT GLInProcessContext {
     49  public:
     50   virtual ~GLInProcessContext() {}
     51 
     52   // Create a GLInProcessContext, if |is_offscreen| is true, renders to an
     53   // offscreen context. |attrib_list| must be NULL or a NONE-terminated list
     54   // of attribute/value pairs.
     55   // If |surface| is not NULL, then it must match |is_offscreen| and |size|,
     56   // |window| must be gfx::kNullAcceleratedWidget, and the command buffer
     57   // service must run on the same thread as this client because GLSurface is
     58   // not thread safe. If |surface| is NULL, then the other parameters are used
     59   // to correctly create a surface.
     60   // Only one of |share_context| and |use_global_share_group| can be used at
     61   // the same time.
     62   static GLInProcessContext* Create(
     63       scoped_refptr<gpu::InProcessCommandBuffer::Service> service,
     64       scoped_refptr<gfx::GLSurface> surface,
     65       bool is_offscreen,
     66       gfx::AcceleratedWidget window,
     67       const gfx::Size& size,
     68       GLInProcessContext* share_context,
     69       bool use_global_share_group,
     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