18 auto coverage =
pass->GetElementsCoverage(std::nullopt);
19 if (!coverage.has_value() || coverage->IsEmpty()) {
25 RenderToTexture(context,
ISize(coverage->GetSize()), translate);
36 auto texture = RenderToTexture(context, size);
37 return texture ? std::make_shared<Image>(texture) :
nullptr;
40 std::shared_ptr<Texture> Picture::RenderToTexture(
43 std::optional<const Matrix> translate)
const {
46 pass->IterateAllEntities([&translate](
auto& entity) ->
bool {
47 auto matrix = translate.has_value()
48 ? translate.value() * entity.GetTransform()
49 : entity.GetTransform();
50 entity.SetTransform(matrix);
56 const std::shared_ptr<Context>& impeller_context = context.
GetContext();
59 RenderTargetAllocator render_target_allocator =
60 RenderTargetAllocator(impeller_context->GetResourceAllocator());
62 if (impeller_context->GetCapabilities()->SupportsOffscreenMSAA()) {
63 target = render_target_allocator.CreateOffscreenMSAA(
67 "Picture Snapshot MSAA",
69 kDefaultColorAttachmentConfigMSAA
72 target = render_target_allocator.CreateOffscreen(
80 if (!target.IsValid()) {
85 if (!context.
Render(*
this, target,
false)) {
90 auto texture = target.GetRenderTargetTexture();