| Index: content/common/gpu/client/gl_helper.cc
|
| diff --git a/content/common/gpu/client/gl_helper.cc b/content/common/gpu/client/gl_helper.cc
|
| index 645ee436dd392c94277cda4cd1b449b34a594a93..88436958b06bbfedbb99b6e342643e00666af9b2 100644
|
| --- a/content/common/gpu/client/gl_helper.cc
|
| +++ b/content/common/gpu/client/gl_helper.cc
|
| @@ -17,6 +17,7 @@
|
| #include "base/threading/thread_restrictions.h"
|
| #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebCString.h"
|
| #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h"
|
| +#include "third_party/skia/include/core/SkRegion.h"
|
| #include "ui/gfx/rect.h"
|
| #include "ui/gfx/size.h"
|
| #include "ui/gl/gl_bindings.h"
|
| @@ -791,4 +792,30 @@ void GLHelper::InitCopyTextToImpl() {
|
|
|
| }
|
|
|
| +void GLHelper::CopySubBufferDamage(WebKit::WebGLId texture,
|
| + WebKit::WebGLId previous_texture,
|
| + const SkRegion& new_damage,
|
| + const SkRegion& old_damage) {
|
| + SkRegion region(old_damage);
|
| + if (region.op(new_damage, SkRegion::kDifference_Op)) {
|
| + ScopedFramebuffer dst_framebuffer(context_, context_->createFramebuffer());
|
| + ScopedFramebufferBinder<GL_FRAMEBUFFER> framebuffer_binder(
|
| + context_, dst_framebuffer);
|
| + ScopedTextureBinder<GL_TEXTURE_2D> texture_binder(context_, texture);
|
| + context_->framebufferTexture2D(GL_FRAMEBUFFER,
|
| + GL_COLOR_ATTACHMENT0,
|
| + GL_TEXTURE_2D,
|
| + previous_texture,
|
| + 0);
|
| + for (SkRegion::Iterator it(region); !it.done(); it.next()) {
|
| + const SkIRect& rect = it.rect();
|
| + context_->copyTexSubImage2D(GL_TEXTURE_2D, 0,
|
| + rect.x(), rect.y(),
|
| + rect.x(), rect.y(),
|
| + rect.width(), rect.height());
|
| + }
|
| + context_->flush();
|
| + }
|
| +}
|
| +
|
| } // namespace content
|
|
|