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 15namespace gfx { 16class Display; 17class GLSurface; 18class GLStateRestorer; 19} 20 21namespace gpu { 22namespace gles2 { 23class GLES2Decoder; 24} 25 26// Encapsulates a virtual OpenGL context. 27class 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