0

ui: Add ScheduleOverlayPlane API to GLImage.

This makes it possible to use GLImage instances as overlay planes.

BUG=

Review URL: https://codereview.chromium.org/415283002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@287093 0039d316-1c4b-4281-b951-d872f2087c98
This commit is contained in:
reveman@chromium.org
2014-08-01 21:50:17 +00:00
parent dcbc32cc80
commit 5e57db7b1b
20 changed files with 154 additions and 5 deletions

@ -202,4 +202,13 @@ void StreamTexture::ReleaseTexImage(unsigned target) {
NOTREACHED();
}
bool StreamTexture::ScheduleOverlayPlane(gfx::AcceleratedWidget widget,
int z_order,
gfx::OverlayTransform transform,
const gfx::Rect& bounds_rect,
const gfx::RectF& crop_rect) {
NOTREACHED();
return false;
}
} // namespace content

@ -41,6 +41,11 @@ class StreamTexture : public gfx::GLImage,
virtual void DidUseTexImage() OVERRIDE {}
virtual void WillModifyTexImage() OVERRIDE {}
virtual void DidModifyTexImage() OVERRIDE {}
virtual bool ScheduleOverlayPlane(gfx::AcceleratedWidget widget,
int z_order,
gfx::OverlayTransform transform,
const gfx::Rect& bounds_rect,
const gfx::RectF& crop_rect) OVERRIDE;
// GpuCommandBufferStub::DestructionObserver implementation.
virtual void OnWillDestroyStub() OVERRIDE;

@ -2283,6 +2283,11 @@ class MockGLImage : public gfx::GLImage {
MOCK_METHOD0(DidUseTexImage, void());
MOCK_METHOD0(WillModifyTexImage, void());
MOCK_METHOD0(DidModifyTexImage, void());
MOCK_METHOD5(ScheduleOverlayPlane, bool(gfx::AcceleratedWidget,
int,
gfx::OverlayTransform,
const gfx::Rect&,
const gfx::RectF&));
protected:
virtual ~MockGLImage() {}

@ -31,6 +31,11 @@ class GLImageImpl : public gfx::GLImage {
virtual void DidUseTexImage() OVERRIDE {}
virtual void WillModifyTexImage() OVERRIDE {}
virtual void DidModifyTexImage() OVERRIDE {}
virtual bool ScheduleOverlayPlane(gfx::AcceleratedWidget widget,
int z_order,
gfx::OverlayTransform transform,
const gfx::Rect& bounds_rect,
const gfx::RectF& crop_rect) OVERRIDE;
private:
virtual ~GLImageImpl();
@ -54,8 +59,8 @@ void GLImageImpl::Destroy(bool have_context) {
NOTREACHED();
}
void GLImageImpl::WillUseTexImage() {
surface_texture_->UpdateTexImage();
gfx::Size GLImageImpl::GetSize() {
return gfx::Size();
}
bool GLImageImpl::BindTexImage(unsigned target) {
@ -67,8 +72,17 @@ void GLImageImpl::ReleaseTexImage(unsigned target) {
NOTREACHED();
}
gfx::Size GLImageImpl::GetSize() {
return gfx::Size();
void GLImageImpl::WillUseTexImage() {
surface_texture_->UpdateTexImage();
}
bool GLImageImpl::ScheduleOverlayPlane(gfx::AcceleratedWidget widget,
int z_order,
gfx::OverlayTransform transform,
const gfx::Rect& bounds_rect,
const gfx::RectF& crop_rect) {
NOTREACHED();
return false;
}
} // anonymous namespace

@ -37,8 +37,12 @@ class GLImageSync : public gfx::GLImage {
virtual void WillUseTexImage() OVERRIDE;
virtual void WillModifyTexImage() OVERRIDE;
virtual void DidModifyTexImage() OVERRIDE;
virtual void DidUseTexImage() OVERRIDE;
virtual bool ScheduleOverlayPlane(gfx::AcceleratedWidget widget,
int z_order,
gfx::OverlayTransform transform,
const gfx::Rect& bounds_rect,
const gfx::RectF& crop_rect) OVERRIDE;
virtual void SetReleaseAfterUse() OVERRIDE;
protected:
@ -99,6 +103,15 @@ void GLImageSync::DidModifyTexImage() {
buffer_->DidWrite(this);
}
bool GLImageSync::ScheduleOverlayPlane(gfx::AcceleratedWidget widget,
int z_order,
gfx::OverlayTransform transform,
const gfx::Rect& bounds_rect,
const gfx::RectF& crop_rect) {
NOTREACHED();
return false;
}
void GLImageSync::SetReleaseAfterUse() {
NOTREACHED();
}

@ -6,6 +6,10 @@
#define UI_GL_GL_IMAGE_H_
#include "base/memory/ref_counted.h"
#include "ui/gfx/native_widget_types.h"
#include "ui/gfx/overlay_transform.h"
#include "ui/gfx/rect.h"
#include "ui/gfx/rect_f.h"
#include "ui/gfx/size.h"
#include "ui/gl/gl_export.h"
@ -41,6 +45,13 @@ class GL_EXPORT GLImage : public base::RefCounted<GLImage> {
// Called after the texture image data has been modified.
virtual void DidModifyTexImage() = 0;
// Schedule image as an overlay plane to be shown at swap time for |widget|.
virtual bool ScheduleOverlayPlane(gfx::AcceleratedWidget widget,
int z_order,
OverlayTransform transform,
const Rect& bounds_rect,
const RectF& crop_rect) = 0;
// Indicate that image should be released after use.
// (For an Android work-around only).
virtual void SetReleaseAfterUse();

@ -116,6 +116,15 @@ void GLImageAndroidNativeBuffer::DidUseTexImage() {
DCHECK_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
}
bool GLImageAndroidNativeBuffer::ScheduleOverlayPlane(
gfx::AcceleratedWidget widget,
int z_order,
OverlayTransform transform,
const Rect& bounds_rect,
const RectF& crop_rect) {
return false;
}
void GLImageAndroidNativeBuffer::SetReleaseAfterUse() {
release_after_use_ = true;
}

@ -21,6 +21,11 @@ class GL_EXPORT GLImageAndroidNativeBuffer : public GLImageEGL {
virtual void WillUseTexImage() OVERRIDE;
virtual void DidUseTexImage() OVERRIDE;
virtual void SetReleaseAfterUse() OVERRIDE;
virtual bool ScheduleOverlayPlane(gfx::AcceleratedWidget widget,
int z_order,
OverlayTransform transform,
const Rect& bounds_rect,
const RectF& crop_rect) OVERRIDE;
protected:
virtual ~GLImageAndroidNativeBuffer();

@ -50,4 +50,12 @@ bool GLImageEGL::BindTexImage(unsigned target) {
return true;
}
bool GLImageEGL::ScheduleOverlayPlane(gfx::AcceleratedWidget widget,
int z_order,
OverlayTransform transform,
const Rect& bounds_rect,
const RectF& crop_rect) {
return false;
}
} // namespace gfx

@ -25,6 +25,11 @@ class GL_EXPORT GLImageEGL : public GLImage {
virtual void DidUseTexImage() OVERRIDE {}
virtual void WillModifyTexImage() OVERRIDE {}
virtual void DidModifyTexImage() OVERRIDE {}
virtual bool ScheduleOverlayPlane(gfx::AcceleratedWidget widget,
int z_order,
OverlayTransform transform,
const Rect& bounds_rect,
const RectF& crop_rect) OVERRIDE;
protected:
virtual ~GLImageEGL();

@ -190,4 +190,12 @@ void GLImageGLX::ReleaseTexImage(unsigned target) {
glXReleaseTexImageEXT(gfx::GetXDisplay(), glx_pixmap_, GLX_FRONT_LEFT_EXT);
}
bool GLImageGLX::ScheduleOverlayPlane(gfx::AcceleratedWidget widget,
int z_order,
OverlayTransform transform,
const Rect& bounds_rect,
const RectF& crop_rect) {
return false;
}
} // namespace gfx

@ -27,6 +27,11 @@ class GL_EXPORT GLImageGLX : public GLImage {
virtual void DidUseTexImage() OVERRIDE {}
virtual void WillModifyTexImage() OVERRIDE {}
virtual void DidModifyTexImage() OVERRIDE {}
virtual bool ScheduleOverlayPlane(gfx::AcceleratedWidget widget,
int z_order,
OverlayTransform transform,
const Rect& bounds_rect,
const RectF& crop_rect) OVERRIDE;
protected:
virtual ~GLImageGLX();

@ -64,4 +64,12 @@ bool GLImageIOSurface::BindTexImage(unsigned target) {
return true;
}
bool GLImageIOSurface::ScheduleOverlayPlane(gfx::AcceleratedWidget widget,
int z_order,
OverlayTransform transform,
const Rect& bounds_rect,
const RectF& crop_rect) {
return false;
}
} // namespace gfx

@ -28,6 +28,11 @@ class GL_EXPORT GLImageIOSurface : public GLImage {
virtual void DidUseTexImage() OVERRIDE {}
virtual void WillModifyTexImage() OVERRIDE {}
virtual void DidModifyTexImage() OVERRIDE {}
virtual bool ScheduleOverlayPlane(gfx::AcceleratedWidget widget,
int z_order,
OverlayTransform transform,
const Rect& bounds_rect,
const RectF& crop_rect) OVERRIDE;
protected:
virtual ~GLImageIOSurface();

@ -203,4 +203,12 @@ size_t GLImageMemory::Bytes() const {
return size_.GetArea() * BytesPerPixel(internalformat_);
}
bool GLImageMemory::ScheduleOverlayPlane(gfx::AcceleratedWidget widget,
int z_order,
OverlayTransform transform,
const Rect& bounds_rect,
const RectF& crop_rect) {
return false;
}
} // namespace gfx

@ -30,6 +30,11 @@ class GL_EXPORT GLImageMemory : public GLImage {
virtual void DidUseTexImage() OVERRIDE {}
virtual void WillModifyTexImage() OVERRIDE {}
virtual void DidModifyTexImage() OVERRIDE {}
virtual bool ScheduleOverlayPlane(gfx::AcceleratedWidget widget,
int z_order,
OverlayTransform transform,
const Rect& bounds_rect,
const RectF& crop_rect) OVERRIDE;
protected:
virtual ~GLImageMemory();

@ -14,4 +14,12 @@ gfx::Size GLImageStub::GetSize() { return gfx::Size(1, 1); }
bool GLImageStub::BindTexImage(unsigned target) { return true; }
bool GLImageStub::ScheduleOverlayPlane(gfx::AcceleratedWidget widget,
int z_order,
OverlayTransform transform,
const Rect& bounds_rect,
const RectF& crop_rect) {
return false;
}
} // namespace gfx

@ -23,6 +23,11 @@ class GL_EXPORT GLImageStub : public GLImage {
virtual void DidUseTexImage() OVERRIDE {}
virtual void WillModifyTexImage() OVERRIDE {}
virtual void DidModifyTexImage() OVERRIDE {}
virtual bool ScheduleOverlayPlane(gfx::AcceleratedWidget widget,
int z_order,
OverlayTransform transform,
const Rect& bounds_rect,
const RectF& crop_rect) OVERRIDE;
protected:
virtual ~GLImageStub();

@ -77,4 +77,12 @@ bool GLImageSurfaceTexture::BindTexImage(unsigned target) {
return true;
}
bool GLImageSurfaceTexture::ScheduleOverlayPlane(gfx::AcceleratedWidget widget,
int z_order,
OverlayTransform transform,
const Rect& bounds_rect,
const RectF& crop_rect) {
return false;
}
} // namespace gfx

@ -29,6 +29,11 @@ class GL_EXPORT GLImageSurfaceTexture : public GLImage {
virtual void DidUseTexImage() OVERRIDE {}
virtual void WillModifyTexImage() OVERRIDE {}
virtual void DidModifyTexImage() OVERRIDE {}
virtual bool ScheduleOverlayPlane(gfx::AcceleratedWidget widget,
int z_order,
OverlayTransform transform,
const Rect& bounds_rect,
const RectF& crop_rect) OVERRIDE;
protected:
virtual ~GLImageSurfaceTexture();