Home | History | Annotate | Download | only in service
      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_SERVICE_GL_CONTEXT_VIRTUAL_H_
      6 #define GPU_COMMAND_BUFFER_SERVICE_GL_CONTEXT_VIRTUAL_H_
      7 
      8 #include "base/compiler_specific.h"
      9 #include "base/memory/ref_counted.h"
     10 #include "base/memory/scoped_ptr.h"
     11 #include "base/memory/weak_ptr.h"
     12 #include "gpu/gpu_export.h"
     13 #include "ui/gl/gl_context.h"
     14 
     15 namespace gfx {
     16 class Display;
     17 class GLSurface;
     18 class GLStateRestorer;
     19 }
     20 
     21 namespace gpu {
     22 namespace gles2 {
     23 class GLES2Decoder;
     24 }
     25 
     26 // Encapsulates a virtual OpenGL context.
     27 class GPU_EXPORT GLContextVirtual : public gfx::GLContext {
     28  public:
     29   GLContextVirtual(
     30       gfx::GLShareGroup* share_group,
     31       gfx::GLContext* shared_context,
     32       base::WeakPtr<gles2::GLES2Decoder> decoder);
     33 
     34   gfx::Display* display();
     35 
     36   // Implement GLContext.
     37   virtual bool Initialize(
     38       gfx::GLSurface* compatible_surface,
     39       gfx::GpuPreference gpu_preference) OVERRIDE;
     40   virtual void Destroy() OVERRIDE;
     41   virtual bool MakeCurrent(gfx::GLSurface* surface) OVERRIDE;
     42   virtual void ReleaseCurrent(gfx::GLSurface* surface) OVERRIDE;
     43   virtual bool IsCurrent(gfx::GLSurface* surface) OVERRIDE;
     44   virtual void* GetHandle() OVERRIDE;
     45   virtual void SetSwapInterval(int interval) OVERRIDE;
     46   virtual std::string GetExtensions() OVERRIDE;
     47   virtual bool GetTotalGpuMemory(size_t* bytes) OVERRIDE;
     48   virtual void SetSafeToForceGpuSwitch() OVERRIDE;
     49   virtual bool WasAllocatedUsingRobustnessExtension() OVERRIDE;
     50   virtual void SetUnbindFboOnMakeCurrent() OVERRIDE;
     51 
     52  protected:
     53   virtual ~GLContextVirtual();
     54 
     55  private:
     56   scoped_refptr<gfx::GLContext> shared_context_;
     57   gfx::Display* display_;
     58   base::WeakPtr<gles2::GLES2Decoder> decoder_;
     59 
     60   DISALLOW_COPY_AND_ASSIGN(GLContextVirtual);
     61 };
     62 
     63 }  // namespace gpu
     64 
     65 #endif  // GPU_COMMAND_BUFFER_SERVICE_GL_CONTEXT_VIRTUAL_H_
     66