提交 22d8a217 编写于 作者: M mikejurka 提交者: GitHub

Fuchsia: convert framebuffer pixel format after drawing if needed (#3031)

上级 18780f44
......@@ -88,4 +88,25 @@ void FramebufferSkia::Bind(mojo::InterfaceHandle<mojo::Framebuffer> framebuffer,
backing_store_info);
}
void FramebufferSkia::ConvertToCorrectPixelFormatIfNeeded() {
if (info_->format == mojo::FramebufferFormat::ARGB_8888) {
// we need to convert from RGBA to ARGB
SkPixmap bufferPixmap;
if (surface_->peekPixels(&bufferPixmap)) {
uint8_t* buffer = reinterpret_cast<uint8_t*>(bufferPixmap.writable_addr());
size_t buffer_size = bufferPixmap.getSafeSize();
uint8_t src_r;
for (size_t i = 0; i < buffer_size; i++) {
src_r = buffer[0];
buffer[0] /* A */ = buffer[3];
buffer[3] /* B */ = buffer[2];
buffer[2] /* G */ = buffer[1];
buffer[1] /* R */ = src_r;
i +=4;
}
}
}
}
} // namespace flutter_content_handler
......@@ -19,6 +19,10 @@ class FramebufferSkia {
void Bind(mojo::InterfaceHandle<mojo::Framebuffer> framebuffer,
mojo::FramebufferInfoPtr info);
// Converts pixels from internal format of BGRA to ARGB.
// Needed because Skia does not support drawing to ARGB directly.
void ConvertToCorrectPixelFormatIfNeeded();
mojo::Framebuffer* get() const { return framebuffer_.get(); }
const sk_sp<SkSurface>& surface() { return surface_; }
......
......@@ -35,6 +35,8 @@ void Rasterizer::Draw(std::unique_ptr<flow::LayerTree> layer_tree,
layer_tree->Raster(frame);
canvas->flush();
framebuffer_.ConvertToCorrectPixelFormatIfNeeded();
framebuffer_.get()->Flush(ftl::MakeRunnable(std::move(callback)));
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册