mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Turns out we need to reset the context before switching back to drawing with Ganesh (i.e., call resetContext on the GrContext) to clean out whatever state we've changed in the GL context. Now the city-list and the flights-app demos work. R=esprehn@chromium.org Review URL: https://codereview.chromium.org/752653002
47 lines
999 B
C++
47 lines
999 B
C++
// Copyright 2014 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "sky/compositor/layer.h"
|
|
|
|
#include "mojo/skia/ganesh_surface.h"
|
|
#include "sky/compositor/layer_host.h"
|
|
#include "third_party/skia/include/core/SkCanvas.h"
|
|
|
|
namespace sky {
|
|
|
|
Layer::Layer(LayerClient* client) : client_(client), host_(nullptr) {
|
|
}
|
|
|
|
Layer::~Layer() {
|
|
}
|
|
|
|
void Layer::ClearClient() {
|
|
client_ = nullptr;
|
|
}
|
|
|
|
void Layer::SetSize(const gfx::Size& size) {
|
|
size_ = size;
|
|
}
|
|
|
|
void Layer::Display() {
|
|
DCHECK(host_);
|
|
|
|
mojo::GaneshSurface surface(host_->ganesh_context(),
|
|
host_->resource_manager()->CreateTexture(size_));
|
|
|
|
SkCanvas* canvas = surface.canvas();
|
|
|
|
gfx::Rect rect(size_);
|
|
client_->PaintContents(canvas, rect);
|
|
canvas->flush();
|
|
|
|
texture_ = surface.TakeTexture();
|
|
}
|
|
|
|
scoped_ptr<mojo::GLTexture> Layer::GetTexture() {
|
|
return texture_.Pass();
|
|
}
|
|
|
|
} // namespace sky
|