14ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
24ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
34ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch// found in the LICENSE file.
44ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch
54ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#ifndef UI_GL_GL_IMAGE_SURFACE_TEXTURE_H_
64ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#define UI_GL_GL_IMAGE_SURFACE_TEXTURE_H_
74ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch
84ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#include "base/memory/ref_counted.h"
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/gfx/gpu_memory_buffer.h"
104ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#include "ui/gl/gl_bindings.h"
114ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#include "ui/gl/gl_image.h"
124ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch
134ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdochnamespace gfx {
144ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch
154ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdochclass SurfaceTexture;
164ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch
174ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdochclass GL_EXPORT GLImageSurfaceTexture : public GLImage {
184ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch public:
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  explicit GLImageSurfaceTexture(const gfx::Size& size);
204ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bool Initialize(const gfx::GpuMemoryBufferHandle& handle);
224ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch
234ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch  // Overridden from GLImage:
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void Destroy(bool have_context) OVERRIDE;
254ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch  virtual gfx::Size GetSize() OVERRIDE;
264ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch  virtual bool BindTexImage(unsigned target) OVERRIDE;
274ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch  virtual void ReleaseTexImage(unsigned target) OVERRIDE {}
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool CopyTexImage(unsigned target) OVERRIDE;
294ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch  virtual void WillUseTexImage() OVERRIDE {}
304ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch  virtual void DidUseTexImage() OVERRIDE {}
314ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch  virtual void WillModifyTexImage() OVERRIDE {}
324ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch  virtual void DidModifyTexImage() OVERRIDE {}
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual bool ScheduleOverlayPlane(gfx::AcceleratedWidget widget,
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                    int z_order,
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                    OverlayTransform transform,
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                    const Rect& bounds_rect,
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                    const RectF& crop_rect) OVERRIDE;
384ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch
394ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch protected:
404ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch  virtual ~GLImageSurfaceTexture();
414ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch
424ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch private:
434ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch  scoped_refptr<SurfaceTexture> surface_texture_;
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  const gfx::Size size_;
454ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch  GLint texture_id_;
464ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch
474ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(GLImageSurfaceTexture);
484ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch};
494ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch
504ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch}  // namespace gfx
514ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch
524ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#endif  // UI_GL_GL_IMAGE_SURFACE_TEXTURE_H_
53