Home | History | Annotate | Download | only in gl
      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_OSMESA_H_
      6 #define UI_GL_GL_SURFACE_OSMESA_H_
      7 
      8 #include "base/memory/scoped_ptr.h"
      9 #include "ui/gfx/size.h"
     10 #include "ui/gl/gl_surface.h"
     11 
     12 namespace gfx {
     13 
     14 enum OSMesaSurfaceFormat { OSMesaSurfaceFormatBGRA, OSMesaSurfaceFormatRGBA };
     15 
     16 // A surface that the Mesa software renderer draws to. This is actually just a
     17 // buffer in system memory. GetHandle returns a pointer to the buffer. These
     18 // surfaces can be resized and resizing preserves the contents.
     19 class GL_EXPORT GLSurfaceOSMesa : public GLSurface {
     20  public:
     21   GLSurfaceOSMesa(OSMesaSurfaceFormat format, const gfx::Size& size);
     22 
     23   // Implement GLSurface.
     24   virtual bool Initialize() OVERRIDE;
     25   virtual void Destroy() OVERRIDE;
     26   virtual bool Resize(const gfx::Size& new_size) OVERRIDE;
     27   virtual bool IsOffscreen() OVERRIDE;
     28   virtual bool SwapBuffers() OVERRIDE;
     29   virtual gfx::Size GetSize() OVERRIDE;
     30   virtual void* GetHandle() OVERRIDE;
     31   virtual unsigned GetFormat() OVERRIDE;
     32 
     33  protected:
     34   virtual ~GLSurfaceOSMesa();
     35 
     36  private:
     37   unsigned format_;
     38   gfx::Size size_;
     39   scoped_ptr<int32[]> buffer_;
     40 
     41   DISALLOW_COPY_AND_ASSIGN(GLSurfaceOSMesa);
     42 };
     43 
     44 // A thin subclass of |GLSurfaceOSMesa| that can be used in place
     45 // of a native hardware-provided surface when a native surface
     46 // provider is not available.
     47 class GLSurfaceOSMesaHeadless : public GLSurfaceOSMesa {
     48  public:
     49   explicit GLSurfaceOSMesaHeadless();
     50 
     51   virtual bool IsOffscreen() OVERRIDE;
     52   virtual bool SwapBuffers() OVERRIDE;
     53 
     54  protected:
     55   virtual ~GLSurfaceOSMesaHeadless();
     56 
     57  private:
     58   DISALLOW_COPY_AND_ASSIGN(GLSurfaceOSMesaHeadless);
     59 };
     60 
     61 }  // namespace gfx
     62 
     63 #endif  // UI_GL_GL_SURFACE_OSMESA_H_
     64