| Index: ui/compositor/layer.cc
|
| diff --git a/ui/compositor/layer.cc b/ui/compositor/layer.cc
|
| index 6a3308e08305f5a1da6b0bd4302ba6b9bc4096ed..18ae24808f4a1ab709227c36bca0a50221aca13a 100644
|
| --- a/ui/compositor/layer.cc
|
| +++ b/ui/compositor/layer.cc
|
| @@ -86,6 +86,7 @@ Layer::Layer(LayerType type)
|
| zoom_(1),
|
| zoom_inset_(0),
|
| delegate_(NULL),
|
| + cc_layer_(NULL),
|
| scale_content_(true),
|
| device_scale_factor_(1.0f) {
|
| CreateWebLayer();
|
| @@ -514,6 +515,25 @@ void Layer::SetExternalTexture(Texture* texture) {
|
| RecomputeDrawsContentAndUVRect();
|
| }
|
|
|
| +void Layer::SetTextureMailbox(const cc::TextureMailbox& mailbox,
|
| + float device_scale_factor) {
|
| + DCHECK_EQ(type_, LAYER_TEXTURED);
|
| + DCHECK(!solid_color_layer_);
|
| + layer_updated_externally_ = true;
|
| + texture_ = NULL;
|
| + if (!texture_layer_ || !texture_layer_->uses_mailbox()) {
|
| + scoped_refptr<cc::TextureLayer> new_layer =
|
| + cc::TextureLayer::CreateForMailbox(this);
|
| + new_layer->SetFlipped(false);
|
| + SwitchToLayer(new_layer);
|
| + texture_layer_ = new_layer;
|
| + }
|
| + texture_layer_->SetTextureMailbox(mailbox);
|
| + mailbox_ = mailbox;
|
| + mailbox_scale_factor_ = device_scale_factor;
|
| + RecomputeDrawsContentAndUVRect();
|
| +}
|
| +
|
| void Layer::SetDelegatedFrame(scoped_ptr<cc::DelegatedFrameData> frame,
|
| gfx::Size frame_size_in_dip) {
|
| DCHECK_EQ(type_, LAYER_TEXTURED);
|
| @@ -636,12 +656,16 @@ void Layer::PaintContents(SkCanvas* sk_canvas,
|
|
|
| unsigned Layer::PrepareTexture(cc::ResourceUpdateQueue* queue) {
|
| DCHECK(texture_layer_);
|
| - return texture_->PrepareTexture();
|
| + if (texture_)
|
| + return texture_->PrepareTexture();
|
| + return 0;
|
| }
|
|
|
| WebKit::WebGraphicsContext3D* Layer::Context3d() {
|
| DCHECK(texture_layer_);
|
| - return texture_->HostContext3D();
|
| + if (texture_)
|
| + return texture_->HostContext3D();
|
| + return NULL;
|
| }
|
|
|
| bool Layer::PrepareTextureMailbox(cc::TextureMailbox* mailbox) {
|
| @@ -919,11 +943,17 @@ void Layer::RecomputeDrawsContentAndUVRect() {
|
| DCHECK(cc_layer_);
|
| gfx::Size size(bounds_.size());
|
| if (texture_layer_.get()) {
|
| - DCHECK(texture_);
|
| -
|
| - float texture_scale_factor = 1.0f / texture_->device_scale_factor();
|
| - gfx::Size texture_size = gfx::ToFlooredSize(
|
| - gfx::ScaleSize(texture_->size(), texture_scale_factor));
|
| + gfx::Size texture_size;
|
| + if (!texture_layer_->uses_mailbox()) {
|
| + DCHECK(texture_);
|
| + float texture_scale_factor = 1.0f / texture_->device_scale_factor();
|
| + texture_size = gfx::ToFlooredSize(
|
| + gfx::ScaleSize(texture_->size(), texture_scale_factor));
|
| + } else {
|
| + float texture_scale_factor = 1.0f / mailbox_scale_factor_;
|
| + texture_size = gfx::ToFlooredSize(
|
| + gfx::ScaleSize(mailbox_.size(), texture_scale_factor));
|
| + }
|
| size.ClampToMax(texture_size);
|
|
|
| gfx::PointF uv_top_left(0.f, 0.f);
|
|
|