1// Copyright 2014 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_MEMORY_H_
6#define UI_GL_GL_IMAGE_MEMORY_H_
7
8#include "ui/gl/gl_image.h"
9
10#if defined(OS_WIN) || defined(USE_X11) || defined(OS_ANDROID) || \
11    defined(USE_OZONE)
12#include <EGL/egl.h>
13#include <EGL/eglext.h>
14#endif
15
16namespace gfx {
17
18class GL_EXPORT GLImageMemory : public GLImage {
19 public:
20  GLImageMemory(const gfx::Size& size, unsigned internalformat);
21
22  bool Initialize(const unsigned char* memory);
23
24  // Overridden from GLImage:
25  virtual void Destroy(bool have_context) OVERRIDE;
26  virtual gfx::Size GetSize() OVERRIDE;
27  virtual bool BindTexImage(unsigned target) OVERRIDE;
28  virtual void ReleaseTexImage(unsigned target) OVERRIDE {}
29  virtual bool CopyTexImage(unsigned target) OVERRIDE;
30  virtual void WillUseTexImage() OVERRIDE;
31  virtual void DidUseTexImage() OVERRIDE;
32  virtual void WillModifyTexImage() OVERRIDE {}
33  virtual void DidModifyTexImage() OVERRIDE {}
34  virtual bool ScheduleOverlayPlane(gfx::AcceleratedWidget widget,
35                                    int z_order,
36                                    OverlayTransform transform,
37                                    const Rect& bounds_rect,
38                                    const RectF& crop_rect) OVERRIDE;
39
40 protected:
41  virtual ~GLImageMemory();
42
43  bool HasValidFormat() const;
44  size_t Bytes() const;
45
46 private:
47  void DoBindTexImage(unsigned target);
48
49  const unsigned char* memory_;
50  const gfx::Size size_;
51  const unsigned internalformat_;
52  bool in_use_;
53  unsigned target_;
54  bool need_do_bind_tex_image_;
55#if defined(OS_WIN) || defined(USE_X11) || defined(OS_ANDROID) || \
56    defined(USE_OZONE)
57  unsigned egl_texture_id_;
58  EGLImageKHR egl_image_;
59#endif
60
61  DISALLOW_COPY_AND_ASSIGN(GLImageMemory);
62};
63
64}  // namespace gfx
65
66#endif  // UI_GL_GL_IMAGE_MEMORY_H_
67