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 UI_GL_GL_SURFACE_GLX_H_ 6#define UI_GL_GL_SURFACE_GLX_H_ 7 8#include <string> 9 10#include "base/compiler_specific.h" 11#include "ui/base/x/x11_util.h" 12#include "ui/gfx/native_widget_types.h" 13#include "ui/gfx/size.h" 14#include "ui/gl/gl_export.h" 15#include "ui/gl/gl_surface.h" 16#include "ui/gl/vsync_provider.h" 17 18namespace gfx { 19 20// Base class for GLX surfaces. 21class GL_EXPORT GLSurfaceGLX : public GLSurface { 22 public: 23 GLSurfaceGLX(); 24 25 static bool InitializeOneOff(); 26 27 // These aren't particularly tied to surfaces, but since we already 28 // have the static InitializeOneOff here, it's easiest to reuse its 29 // initialization guards. 30 static const char* GetGLXExtensions(); 31 static bool HasGLXExtension(const char* name); 32 static bool IsCreateContextSupported(); 33 static bool IsCreateContextRobustnessSupported(); 34 static bool IsTextureFromPixmapSupported(); 35 static bool IsOMLSyncControlSupported(); 36 37 virtual void* GetDisplay() OVERRIDE; 38 39 // Get the FB config that the surface was created with or NULL if it is not 40 // a GLX drawable. 41 virtual void* GetConfig() = 0; 42 43 protected: 44 virtual ~GLSurfaceGLX(); 45 46 private: 47 DISALLOW_COPY_AND_ASSIGN(GLSurfaceGLX); 48}; 49 50// A surface used to render to a view. 51class GL_EXPORT NativeViewGLSurfaceGLX : public GLSurfaceGLX { 52 public: 53 explicit NativeViewGLSurfaceGLX(gfx::AcceleratedWidget window); 54 55 // Implement GLSurfaceGLX. 56 virtual bool Initialize() OVERRIDE; 57 virtual void Destroy() OVERRIDE; 58 virtual bool Resize(const gfx::Size& size) OVERRIDE; 59 virtual bool IsOffscreen() OVERRIDE; 60 virtual bool SwapBuffers() OVERRIDE; 61 virtual gfx::Size GetSize() OVERRIDE; 62 virtual void* GetHandle() OVERRIDE; 63 virtual std::string GetExtensions() OVERRIDE; 64 virtual void* GetConfig() OVERRIDE; 65 virtual bool PostSubBuffer(int x, int y, int width, int height) OVERRIDE; 66 virtual VSyncProvider* GetVSyncProvider() OVERRIDE; 67 68 protected: 69 NativeViewGLSurfaceGLX(); 70 virtual ~NativeViewGLSurfaceGLX(); 71 72 gfx::AcceleratedWidget window_; 73 74 private: 75 void* config_; 76 gfx::Size size_; 77 78 scoped_ptr<VSyncProvider> vsync_provider_; 79 80 DISALLOW_COPY_AND_ASSIGN(NativeViewGLSurfaceGLX); 81}; 82 83// A surface used to render to an offscreen pbuffer. 84class GL_EXPORT PbufferGLSurfaceGLX : public GLSurfaceGLX { 85 public: 86 explicit PbufferGLSurfaceGLX(const gfx::Size& size); 87 88 // Implement GLSurfaceGLX. 89 virtual bool Initialize() OVERRIDE; 90 virtual void Destroy() OVERRIDE; 91 virtual bool IsOffscreen() OVERRIDE; 92 virtual bool SwapBuffers() OVERRIDE; 93 virtual gfx::Size GetSize() OVERRIDE; 94 virtual void* GetHandle() OVERRIDE; 95 virtual void* GetConfig() OVERRIDE; 96 97 protected: 98 virtual ~PbufferGLSurfaceGLX(); 99 100 private: 101 gfx::Size size_; 102 void* config_; 103 XID pbuffer_; 104 105 DISALLOW_COPY_AND_ASSIGN(PbufferGLSurfaceGLX); 106}; 107 108} // namespace gfx 109 110#endif // UI_GL_GL_SURFACE_GLX_H_ 111