| // Copyright 2017 The Fuchsia 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 "lib/ui/scenic/cpp/host_image_cycler.h" |
| |
| #include <zircon/assert.h> |
| |
| namespace scenic { |
| |
| HostImageCycler::HostImageCycler(Session* session) |
| : EntityNode(session), |
| content_node_(session), |
| content_material_(session), |
| image_pool_(session, kNumBuffers) { |
| content_node_.SetMaterial(content_material_); |
| AddChild(content_node_); |
| } |
| |
| HostImageCycler::~HostImageCycler() = default; |
| |
| const HostImage* HostImageCycler::AcquireImage( |
| uint32_t width, uint32_t height, uint32_t stride, |
| fuchsia::images::PixelFormat pixel_format, |
| fuchsia::images::ColorSpace color_space) { |
| ZX_DEBUG_ASSERT(!acquired_image_); |
| |
| // Update the image pool and content shape. |
| fuchsia::images::ImageInfo image_info; |
| image_info.width = width; |
| image_info.height = height; |
| image_info.stride = stride; |
| image_info.pixel_format = pixel_format; |
| image_info.color_space = color_space; |
| image_info.tiling = fuchsia::images::Tiling::LINEAR; |
| reconfigured_ = image_pool_.Configure(&image_info); |
| |
| const HostImage* image = image_pool_.GetImage(image_index_); |
| ZX_DEBUG_ASSERT(image); |
| acquired_image_ = true; |
| return image; |
| } |
| |
| void HostImageCycler::ReleaseAndSwapImage() { |
| ZX_DEBUG_ASSERT(acquired_image_); |
| acquired_image_ = false; |
| |
| const HostImage* image = image_pool_.GetImage(image_index_); |
| ZX_DEBUG_ASSERT(image); |
| content_material_.SetTexture(*image); |
| |
| if (reconfigured_) { |
| Rectangle content_rect(content_node_.session(), |
| image_pool_.image_info()->width, |
| image_pool_.image_info()->height); |
| content_node_.SetShape(content_rect); |
| reconfigured_ = false; |
| } |
| |
| // TODO(MZ-145): Define an |InvalidateCmd| on |Image| instead. |
| image_pool_.DiscardImage(image_index_); |
| image_index_ = (image_index_ + 1) % kNumBuffers; |
| } |
| |
| } // namespace scenic |