Index: ui/compositor/layer.cc |
diff --git a/ui/compositor/layer.cc b/ui/compositor/layer.cc |
index f45fd8471ce856aeb92ca0bb815003694cf64945..423459b0e33164ac2a13b57b23061ca96072ce24 100644 |
--- a/ui/compositor/layer.cc |
+++ b/ui/compositor/layer.cc |
@@ -311,10 +311,14 @@ void Layer::SetExternalTexture(Texture* texture) { |
WebKit::WebLayer new_layer; |
if (layer_updated_externally_) { |
WebKit::WebExternalTextureLayer texture_layer = |
- WebKit::WebExternalTextureLayer::create(); |
+ WebKit::WebExternalTextureLayer::create(this); |
texture_layer.setFlipped(texture_->flipped()); |
new_layer = texture_layer; |
} else { |
+ // Tell the compositor to clear references to the old texture. |
+ WebKit::WebExternalTextureLayer texture_layer = |
+ web_layer_.to<WebKit::WebExternalTextureLayer>(); |
+ texture_layer.willModifyTexture(); |
new_layer = WebKit::WebContentLayer::create(this); |
} |
if (parent_) { |
@@ -435,6 +439,16 @@ void Layer::paintContents(WebKit::WebCanvas* web_canvas, |
delegate_->OnPaintLayer(&canvas); |
} |
+unsigned Layer::prepareTexture(WebKit::WebTextureUpdater& /* updater */) { |
+ DCHECK(layer_updated_externally_); |
+ return texture_->texture_id(); |
+} |
+ |
+WebKit::WebGraphicsContext3D* Layer::context() { |
+ DCHECK(layer_updated_externally_); |
+ return texture_->HostContext3D(); |
+} |
+ |
void Layer::SetForceRenderSurface(bool force) { |
if (force_render_surface_ == force) |
return; |
@@ -634,10 +648,8 @@ void Layer::RecomputeDrawsContentAndUVRect() { |
web_layer_.setBounds(ConvertSizeToPixel(this, bounds_.size())); |
} else { |
DCHECK(texture_); |
- unsigned int texture_id = texture_->texture_id(); |
WebKit::WebExternalTextureLayer texture_layer = |
web_layer_.to<WebKit::WebExternalTextureLayer>(); |
- texture_layer.setTextureId(should_draw ? texture_id : 0); |
gfx::Size texture_size; |
if (scale_content_) |