Chromium Code Reviews| Index: webkit/compositor_bindings/web_external_texture_layer_impl.cc |
| diff --git a/webkit/compositor_bindings/web_external_texture_layer_impl.cc b/webkit/compositor_bindings/web_external_texture_layer_impl.cc |
| index 979e754678c4a4ddf6e5a075d5092b678f57d591..832b8fa1bba5a6bd85f14fdf3e6172d0afedd5e6 100644 |
| --- a/webkit/compositor_bindings/web_external_texture_layer_impl.cc |
| +++ b/webkit/compositor_bindings/web_external_texture_layer_impl.cc |
| @@ -4,6 +4,7 @@ |
| #include "webkit/compositor_bindings/web_external_texture_layer_impl.h" |
| +#include "cc/context_provider.h" |
| #include "cc/resource_update_queue.h" |
| #include "cc/texture_layer.h" |
| #include "third_party/WebKit/Source/Platform/chromium/public/WebExternalTextureLayerClient.h" |
| @@ -16,13 +17,15 @@ using namespace cc; |
| namespace WebKit { |
| WebExternalTextureLayerImpl::WebExternalTextureLayerImpl( |
| - WebExternalTextureLayerClient* client) |
| - : client_(client) { |
| + WebExternalTextureLayerClient* client, |
| + bool mailbox) |
| + : client_(client), |
| + uses_mailbox_(mailbox) { |
| scoped_refptr<TextureLayer> layer; |
| if (client_) |
| - layer = TextureLayer::Create(this); |
| + layer = TextureLayer::Create(this, mailbox); |
| else |
| - layer = TextureLayer::Create(NULL); |
| + layer = TextureLayer::Create(NULL, mailbox); |
| layer->SetIsDrawable(true); |
| layer_.reset(new WebLayerImpl(layer)); |
| } |
| @@ -33,6 +36,15 @@ WebExternalTextureLayerImpl::~WebExternalTextureLayerImpl() { |
| WebLayer* WebExternalTextureLayerImpl::layer() { return layer_.get(); } |
| +void WebExternalTextureLayerImpl::clearTexture() { |
| + if (uses_mailbox_) { |
| + static_cast<TextureLayer*>(layer_->layer())->SetTextureMailbox( |
| + cc::TextureMailbox()); |
| + } else { |
| + static_cast<TextureLayer*>(layer_->layer())->SetTextureId(0); |
| + } |
| +} |
| + |
| void WebExternalTextureLayerImpl::setTextureId(unsigned id) { |
| static_cast<TextureLayer*>(layer_->layer())->SetTextureId(id); |
| } |
| @@ -93,4 +105,29 @@ WebGraphicsContext3D* WebExternalTextureLayerImpl::context() { |
| return client_->context(); |
| } |
| -} // namespace WebKit |
| +bool WebExternalTextureLayerImpl::prepareTextureMailbox( |
| + cc::TextureMailbox* out_mailbox) { |
| + Mailbox mailbox; |
| + if (!client_->prepareMailbox(&mailbox)) { |
| + return false; |
| + } |
| + gpu::Mailbox name; |
| + name.SetName(mailbox.name); |
| + TextureMailbox::ReleaseCallback callback = |
| + base::Bind(&WebExternalTextureLayerImpl::mailboxReleased, |
| + this->AsWeakPtr(), |
| + mailbox); |
| + *out_mailbox = cc::TextureMailbox(name, callback, mailbox.syncPoint); |
| + return true; |
| +} |
| + |
| +void WebExternalTextureLayerImpl::mailboxReleased( |
| + const Mailbox &mailbox, |
| + unsigned syncPoint) { |
| + Mailbox availableMailbox; |
|
piman
2013/03/14 19:54:58
nit: available_mailbox
alexst (slow to review)
2013/03/14 20:37:06
Done.
|
| + availableMailbox.setName(mailbox.name); |
| + availableMailbox.syncPoint = syncPoint; |
| + client_->mailboxReleased(availableMailbox); |
| +} |
| + |
| +} // namespace WebKit |