1// Copyright 2013 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_IMAGE_IO_SURFACE_H_
6#define UI_GL_GL_IMAGE_IO_SURFACE_H_
7
8#include <IOSurface/IOSurfaceAPI.h>
9
10#include "base/mac/scoped_cftyperef.h"
11#include "ui/gfx/gpu_memory_buffer.h"
12#include "ui/gl/gl_image.h"
13
14namespace gfx {
15
16class GL_EXPORT GLImageIOSurface : public GLImage {
17 public:
18  explicit GLImageIOSurface(const gfx::Size& size);
19
20  bool Initialize(IOSurfaceRef io_surface);
21
22  // Overridden from GLImage:
23  virtual void Destroy(bool have_context) OVERRIDE;
24  virtual gfx::Size GetSize() OVERRIDE;
25  virtual bool BindTexImage(unsigned target) OVERRIDE;
26  virtual void ReleaseTexImage(unsigned target) OVERRIDE {}
27  virtual bool CopyTexImage(unsigned target) OVERRIDE;
28  virtual void WillUseTexImage() OVERRIDE {}
29  virtual void DidUseTexImage() OVERRIDE {}
30  virtual void WillModifyTexImage() OVERRIDE {}
31  virtual void DidModifyTexImage() OVERRIDE {}
32  virtual bool ScheduleOverlayPlane(gfx::AcceleratedWidget widget,
33                                    int z_order,
34                                    OverlayTransform transform,
35                                    const Rect& bounds_rect,
36                                    const RectF& crop_rect) OVERRIDE;
37
38 protected:
39  virtual ~GLImageIOSurface();
40
41 private:
42  base::ScopedCFTypeRef<IOSurfaceRef> io_surface_;
43  const gfx::Size size_;
44
45  DISALLOW_COPY_AND_ASSIGN(GLImageIOSurface);
46};
47
48}  // namespace gfx
49
50#endif  // UI_GL_GL_IMAGE_IO_SURFACE_H_
51