| Index: ui/gl/gl_image_ozone_native_pixmap.cc
|
| diff --git a/ui/gl/gl_image_ozone_native_pixmap.cc b/ui/gl/gl_image_ozone_native_pixmap.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5dcf5c40a3b041a1a9cb8c75cc43f4242433f9fc
|
| --- /dev/null
|
| +++ b/ui/gl/gl_image_ozone_native_pixmap.cc
|
| @@ -0,0 +1,126 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "ui/gl/gl_image_ozone_native_pixmap.h"
|
| +
|
| +#include "ui/gl/gl_image_linux_dma_buffer.h"
|
| +
|
| +namespace gfx {
|
| +
|
| +// static
|
| +scoped_refptr<GLImageOzoneNativePixmap> GLImageOzoneNativePixmap::Create(
|
| + scoped_refptr<ui::NativePixmap> pixmap,
|
| + const Size& size,
|
| + GpuMemoryBuffer::Format format,
|
| + unsigned internalformat) {
|
| + DCHECK(pixmap);
|
| + scoped_refptr<GLImageOzoneNativePixmap> image(
|
| + new GLImageOzoneNativePixmap(pixmap, size, format, internalformat));
|
| + if (!image->Initialize()) {
|
| + return nullptr;
|
| + }
|
| + return image;
|
| +}
|
| +
|
| +GLImageOzoneNativePixmap::GLImageOzoneNativePixmap(
|
| + scoped_refptr<ui::NativePixmap> pixmap,
|
| + const Size& size,
|
| + GpuMemoryBuffer::Format format,
|
| + unsigned internalformat)
|
| + : pixmap_(pixmap),
|
| + size_(size),
|
| + format_(format),
|
| + internalformat_(internalformat) {}
|
| +
|
| +GLImageOzoneNativePixmap::~GLImageOzoneNativePixmap() {}
|
| +
|
| +bool GLImageOzoneNativePixmap::Initialize() {
|
| + if (pixmap_->GetEGLClientBuffer()) {
|
| + scoped_refptr<GLImageEGL> image = new GLImageEGL(size_);
|
| + EGLint attrs[] = {EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, EGL_NONE};
|
| + if (!image->Initialize(EGL_NATIVE_PIXMAP_KHR, pixmap_->GetEGLClientBuffer(),
|
| + attrs)) {
|
| + return false;
|
| + }
|
| + image_ = image;
|
| + return true;
|
| + }
|
| +
|
| + if (pixmap_->GetDmaBufFd() >= 0) {
|
| + scoped_refptr<GLImageLinuxDMABuffer> image =
|
| + new GLImageLinuxDMABuffer(size_, internalformat_);
|
| + base::FileDescriptor handle(pixmap_->GetDmaBufFd(), false);
|
| + if (!image->Initialize(handle, format_, pixmap_->GetDmaBufPitch())) {
|
| + return false;
|
| + }
|
| + image_ = image;
|
| + return true;
|
| + }
|
| +
|
| + return true;
|
| +}
|
| +
|
| +void GLImageOzoneNativePixmap::Destroy(bool have_context) {
|
| + if (image_)
|
| + image_->Destroy(have_context);
|
| + pixmap_ = nullptr;
|
| +}
|
| +
|
| +Size GLImageOzoneNativePixmap::GetSize() {
|
| + return size_;
|
| +}
|
| +
|
| +unsigned GLImageOzoneNativePixmap::GetInternalFormat() {
|
| + return internalformat_;
|
| +}
|
| +
|
| +bool GLImageOzoneNativePixmap::BindTexImage(unsigned target) {
|
| + if (image_)
|
| + return image_->BindTexImage(target);
|
| + return true;
|
| +}
|
| +
|
| +void GLImageOzoneNativePixmap::ReleaseTexImage(unsigned target) {
|
| + if (image_)
|
| + image_->ReleaseTexImage(target);
|
| +}
|
| +
|
| +bool GLImageOzoneNativePixmap::CopyTexSubImage(unsigned target,
|
| + const Point& offset,
|
| + const Rect& rect) {
|
| + if (image_)
|
| + return image_->CopyTexSubImage(target, offset, rect);
|
| + return false;
|
| +}
|
| +void GLImageOzoneNativePixmap::WillUseTexImage() {
|
| + if (image_)
|
| + image_->WillUseTexImage();
|
| +}
|
| +
|
| +void GLImageOzoneNativePixmap::DidUseTexImage() {
|
| + if (image_)
|
| + image_->DidUseTexImage();
|
| +}
|
| +
|
| +void GLImageOzoneNativePixmap::WillModifyTexImage() {
|
| + if (image_)
|
| + image_->WillModifyTexImage();
|
| +}
|
| +
|
| +void GLImageOzoneNativePixmap::DidModifyTexImage() {
|
| + if (image_)
|
| + image_->DidModifyTexImage();
|
| +}
|
| +
|
| +bool GLImageOzoneNativePixmap::ScheduleOverlayPlane(AcceleratedWidget widget,
|
| + int z_order,
|
| + OverlayTransform transform,
|
| + const Rect& bounds_rect,
|
| + const RectF& crop_rect) {
|
| + return pixmap_ &&
|
| + pixmap_->ScheduleOverlayPlane(widget, z_order, transform, bounds_rect,
|
| + crop_rect);
|
| +}
|
| +
|
| +} // namespace gfx
|
|
|