Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
impeller::ContentContext Class Reference

#include <content_context.h>

Inheritance diagram for impeller::ContentContext:
impeller::testing::FlushTestContentContext

Classes

struct  Pipelines
 

Public Types

using SubpassCallback = std::function< bool(const ContentContext &, RenderPass &)>
 

Public Member Functions

 ContentContext (std::shared_ptr< Context > context, std::shared_ptr< TypographerContext > typographer_context, std::shared_ptr< RenderTargetAllocator > render_target_allocator=nullptr)
 
 ~ContentContext ()
 
bool IsValid () const
 
TessellatorGetTessellator () const
 
PipelineRef GetBlendColorBurnPipeline (ContentContextOptions opts) const
 
PipelineRef GetBlendColorDodgePipeline (ContentContextOptions opts) const
 
PipelineRef GetBlendColorPipeline (ContentContextOptions opts) const
 
PipelineRef GetBlendDarkenPipeline (ContentContextOptions opts) const
 
PipelineRef GetBlendDifferencePipeline (ContentContextOptions opts) const
 
PipelineRef GetBlendExclusionPipeline (ContentContextOptions opts) const
 
PipelineRef GetBlendHardLightPipeline (ContentContextOptions opts) const
 
PipelineRef GetBlendHuePipeline (ContentContextOptions opts) const
 
PipelineRef GetBlendLightenPipeline (ContentContextOptions opts) const
 
PipelineRef GetBlendLuminosityPipeline (ContentContextOptions opts) const
 
PipelineRef GetBlendMultiplyPipeline (ContentContextOptions opts) const
 
PipelineRef GetBlendOverlayPipeline (ContentContextOptions opts) const
 
PipelineRef GetBlendSaturationPipeline (ContentContextOptions opts) const
 
PipelineRef GetBlendScreenPipeline (ContentContextOptions opts) const
 
PipelineRef GetBlendSoftLightPipeline (ContentContextOptions opts) const
 
PipelineRef GetBorderMaskBlurPipeline (ContentContextOptions opts) const
 
PipelineRef GetCirclePipeline (ContentContextOptions opts) const
 
PipelineRef GetClearBlendPipeline (ContentContextOptions opts) const
 
PipelineRef GetClipPipeline (ContentContextOptions opts) const
 
PipelineRef GetColorMatrixColorFilterPipeline (ContentContextOptions opts) const
 
PipelineRef GetConicalGradientFillPipeline (ContentContextOptions opts, ConicalKind kind) const
 
PipelineRef GetConicalGradientSSBOFillPipeline (ContentContextOptions opts, ConicalKind kind) const
 
PipelineRef GetConicalGradientUniformFillPipeline (ContentContextOptions opts, ConicalKind kind) const
 
PipelineRef GetDestinationATopBlendPipeline (ContentContextOptions opts) const
 
PipelineRef GetDestinationBlendPipeline (ContentContextOptions opts) const
 
PipelineRef GetDestinationInBlendPipeline (ContentContextOptions opts) const
 
PipelineRef GetDestinationOutBlendPipeline (ContentContextOptions opts) const
 
PipelineRef GetDestinationOverBlendPipeline (ContentContextOptions opts) const
 
PipelineRef GetDownsamplePipeline (ContentContextOptions opts) const
 
PipelineRef GetDrawShadowVerticesPipeline (ContentContextOptions opts) const
 
PipelineRef GetDownsampleBoundedPipeline (ContentContextOptions opts) const
 
PipelineRef GetDrawVerticesUberPipeline (BlendMode blend_mode, ContentContextOptions opts) const
 
PipelineRef GetFastGradientPipeline (ContentContextOptions opts) const
 
PipelineRef GetFramebufferBlendColorBurnPipeline (ContentContextOptions opts) const
 
PipelineRef GetFramebufferBlendColorDodgePipeline (ContentContextOptions opts) const
 
PipelineRef GetFramebufferBlendColorPipeline (ContentContextOptions opts) const
 
PipelineRef GetFramebufferBlendDarkenPipeline (ContentContextOptions opts) const
 
PipelineRef GetFramebufferBlendDifferencePipeline (ContentContextOptions opts) const
 
PipelineRef GetFramebufferBlendExclusionPipeline (ContentContextOptions opts) const
 
PipelineRef GetFramebufferBlendHardLightPipeline (ContentContextOptions opts) const
 
PipelineRef GetFramebufferBlendHuePipeline (ContentContextOptions opts) const
 
PipelineRef GetFramebufferBlendLightenPipeline (ContentContextOptions opts) const
 
PipelineRef GetFramebufferBlendLuminosityPipeline (ContentContextOptions opts) const
 
PipelineRef GetFramebufferBlendMultiplyPipeline (ContentContextOptions opts) const
 
PipelineRef GetFramebufferBlendOverlayPipeline (ContentContextOptions opts) const
 
PipelineRef GetFramebufferBlendSaturationPipeline (ContentContextOptions opts) const
 
PipelineRef GetFramebufferBlendScreenPipeline (ContentContextOptions opts) const
 
PipelineRef GetFramebufferBlendSoftLightPipeline (ContentContextOptions opts) const
 
PipelineRef GetGaussianBlurPipeline (ContentContextOptions opts) const
 
PipelineRef GetGlyphAtlasPipeline (ContentContextOptions opts) const
 
PipelineRef GetLinePipeline (ContentContextOptions opts) const
 
PipelineRef GetLinearGradientFillPipeline (ContentContextOptions opts) const
 
PipelineRef GetLinearGradientSSBOFillPipeline (ContentContextOptions opts) const
 
PipelineRef GetLinearGradientUniformFillPipeline (ContentContextOptions opts) const
 
PipelineRef GetLinearToSrgbFilterPipeline (ContentContextOptions opts) const
 
PipelineRef GetModulateBlendPipeline (ContentContextOptions opts) const
 
PipelineRef GetMorphologyFilterPipeline (ContentContextOptions opts) const
 
PipelineRef GetPlusBlendPipeline (ContentContextOptions opts) const
 
PipelineRef GetPorterDuffPipeline (BlendMode mode, ContentContextOptions opts) const
 
PipelineRef GetRadialGradientFillPipeline (ContentContextOptions opts) const
 
PipelineRef GetRadialGradientSSBOFillPipeline (ContentContextOptions opts) const
 
PipelineRef GetRadialGradientUniformFillPipeline (ContentContextOptions opts) const
 
PipelineRef GetRRectBlurPipeline (ContentContextOptions opts) const
 
PipelineRef GetRSuperellipseBlurPipeline (ContentContextOptions opts) const
 
PipelineRef GetScreenBlendPipeline (ContentContextOptions opts) const
 
PipelineRef GetSolidFillPipeline (ContentContextOptions opts) const
 
PipelineRef GetSourceATopBlendPipeline (ContentContextOptions opts) const
 
PipelineRef GetSourceBlendPipeline (ContentContextOptions opts) const
 
PipelineRef GetSourceInBlendPipeline (ContentContextOptions opts) const
 
PipelineRef GetSourceOutBlendPipeline (ContentContextOptions opts) const
 
PipelineRef GetSourceOverBlendPipeline (ContentContextOptions opts) const
 
PipelineRef GetSrgbToLinearFilterPipeline (ContentContextOptions opts) const
 
PipelineRef GetSweepGradientFillPipeline (ContentContextOptions opts) const
 
PipelineRef GetSweepGradientSSBOFillPipeline (ContentContextOptions opts) const
 
PipelineRef GetSweepGradientUniformFillPipeline (ContentContextOptions opts) const
 
PipelineRef GetTexturePipeline (ContentContextOptions opts) const
 
PipelineRef GetTextureStrictSrcPipeline (ContentContextOptions opts) const
 
PipelineRef GetTiledTexturePipeline (ContentContextOptions opts) const
 
PipelineRef GetXorBlendPipeline (ContentContextOptions opts) const
 
PipelineRef GetYUVToRGBFilterPipeline (ContentContextOptions opts) const
 
std::shared_ptr< TextureGetEmptyTexture () const
 
std::shared_ptr< ContextGetContext () const
 
const CapabilitiesGetDeviceCapabilities () const
 
fml::StatusOr< RenderTargetMakeSubpass (std::string_view label, ISize texture_size, const std::shared_ptr< CommandBuffer > &command_buffer, const SubpassCallback &subpass_callback, bool msaa_enabled=true, bool depth_stencil_enabled=false, int32_t mip_count=1) const
 Creates a new texture of size texture_size and calls subpass_callback with a RenderPass for drawing to the texture.
 
fml::StatusOr< RenderTargetMakeSubpass (std::string_view label, const RenderTarget &subpass_target, const std::shared_ptr< CommandBuffer > &command_buffer, const SubpassCallback &subpass_callback) const
 Makes a subpass that will render to subpass_target.
 
const std::shared_ptr< LazyGlyphAtlas > & GetLazyGlyphAtlas () const
 
const std::shared_ptr< RenderTargetAllocator > & GetRenderTargetCache () const
 
PipelineRef GetCachedRuntimeEffectPipeline (const std::string &unique_entrypoint_name, const ContentContextOptions &options, const std::function< std::shared_ptr< Pipeline< PipelineDescriptor > >()> &create_callback) const
 
void ClearCachedRuntimeEffectPipeline (const std::string &unique_entrypoint_name) const
 
HostBufferGetTransientsIndexesBuffer () const
 Retrieve the current host buffer for transient storage of indexes used for indexed draws.
 
HostBufferGetTransientsDataBuffer () const
 Retrieve the current host buffer for transient storage of other non-index data.
 
void ResetTransientsBuffers ()
 Resets the transients buffers held onto by the content context.
 
TextShadowCacheGetTextShadowCache () const
 

Protected Member Functions

void SetTransientsIndexesBuffer (std::shared_ptr< HostBuffer > host_buffer)
 
void SetTransientsDataBuffer (std::shared_ptr< HostBuffer > host_buffer)
 

Detailed Description

Definition at line 122 of file content_context.h.

Member Typedef Documentation

◆ SubpassCallback

Definition at line 233 of file content_context.h.

Constructor & Destructor Documentation

◆ ContentContext()

impeller::ContentContext::ContentContext ( std::shared_ptr< Context context,
std::shared_ptr< TypographerContext typographer_context,
std::shared_ptr< RenderTargetAllocator render_target_allocator = nullptr 
)
explicit

Setup default clip pipeline.

Definition at line 549 of file content_context.cc.

553 : context_(std::move(context)),
554 lazy_glyph_atlas_(
555 std::make_shared<LazyGlyphAtlas>(std::move(typographer_context))),
556 pipelines_(new Pipelines()),
557 tessellator_(std::make_shared<Tessellator>(
558 context_->GetCapabilities()->Supports32BitPrimitiveIndices())),
559 render_target_cache_(render_target_allocator == nullptr
560 ? std::make_shared<RenderTargetCache>(
561 context_->GetResourceAllocator())
562 : std::move(render_target_allocator)),
563 data_host_buffer_(HostBuffer::Create(
564 context_->GetResourceAllocator(),
565 context_->GetIdleWaiter(),
566 context_->GetCapabilities()->GetMinimumUniformAlignment())),
567 text_shadow_cache_(std::make_unique<TextShadowCache>()) {
568 if (!context_ || !context_->IsValid()) {
569 return;
570 }
571
572 // On most backends, indexes and other data can be allocated into the same
573 // buffers. However, some backends (namely WebGL) require indexes used in
574 // indexed draws to be allocated separately from other data. For those
575 // backends, we allocate a separate host buffer just for indexes.
576 indexes_host_buffer_ =
577 context_->GetCapabilities()->NeedsPartitionedHostBuffer()
579 context_->GetResourceAllocator(), context_->GetIdleWaiter(),
580 context_->GetCapabilities()->GetMinimumUniformAlignment())
581 : data_host_buffer_;
582 {
583 TextureDescriptor desc;
584 desc.storage_mode = StorageMode::kDevicePrivate;
585 desc.format = PixelFormat::kR8G8B8A8UNormInt;
586 desc.size = ISize{1, 1};
587 empty_texture_ = GetContext()->GetResourceAllocator()->CreateTexture(desc);
588
589 std::array<uint8_t, 4> data = Color::BlackTransparent().ToR8G8B8A8();
590 std::shared_ptr<CommandBuffer> cmd_buffer =
591 GetContext()->CreateCommandBuffer();
592 std::shared_ptr<BlitPass> blit_pass = cmd_buffer->CreateBlitPass();
593 HostBuffer& data_host_buffer = GetTransientsDataBuffer();
594 BufferView buffer_view = data_host_buffer.Emplace(data);
595 blit_pass->AddCopy(buffer_view, empty_texture_);
596
597 if (!blit_pass->EncodeCommands() || !GetContext()
598 ->GetCommandQueue()
599 ->Submit({std::move(cmd_buffer)})
600 .ok()) {
601 VALIDATION_LOG << "Failed to create empty texture.";
602 }
603 }
604
605 auto options = ContentContextOptions{
606 .sample_count = SampleCount::kCount4,
607 .color_attachment_pixel_format =
608 context_->GetCapabilities()->GetDefaultColorFormat()};
609 auto options_trianglestrip = ContentContextOptions{
610 .sample_count = SampleCount::kCount4,
611 .primitive_type = PrimitiveType::kTriangleStrip,
612 .color_attachment_pixel_format =
613 context_->GetCapabilities()->GetDefaultColorFormat()};
614 auto options_no_msaa_no_depth_stencil = ContentContextOptions{
615 .sample_count = SampleCount::kCount1,
616 .primitive_type = PrimitiveType::kTriangleStrip,
617 .color_attachment_pixel_format =
618 context_->GetCapabilities()->GetDefaultColorFormat(),
619 .has_depth_stencil_attachments = false};
620 const auto supports_decal = static_cast<Scalar>(
621 context_->GetCapabilities()->SupportsDecalSamplerAddressMode());
622
623 // Futures for the following pipelines may block in case the first frame is
624 // rendered without the pipelines being ready. Put pipelines that are more
625 // likely to be used first.
626 {
627 pipelines_->glyph_atlas.CreateDefault(
628 *context_, options,
629 {static_cast<Scalar>(
630 GetContext()->GetCapabilities()->GetDefaultGlyphAtlasFormat() ==
632 pipelines_->solid_fill.CreateDefault(*context_, options);
633 pipelines_->texture.CreateDefault(*context_, options);
634 pipelines_->fast_gradient.CreateDefault(*context_, options);
635 pipelines_->line.CreateDefault(*context_, options);
636 pipelines_->circle.CreateDefault(*context_, options);
637
638 if (context_->GetCapabilities()->SupportsSSBO()) {
639 pipelines_->linear_gradient_ssbo_fill.CreateDefault(*context_, options);
640 pipelines_->radial_gradient_ssbo_fill.CreateDefault(*context_, options);
641 pipelines_->conical_gradient_ssbo_fill.CreateDefault(*context_, options,
642 {3.0});
643 pipelines_->conical_gradient_ssbo_fill_radial.CreateDefault(
644 *context_, options, {1.0});
645 pipelines_->conical_gradient_ssbo_fill_strip.CreateDefault(
646 *context_, options, {2.0});
647 pipelines_->conical_gradient_ssbo_fill_strip_and_radial.CreateDefault(
648 *context_, options, {0.0});
649 pipelines_->sweep_gradient_ssbo_fill.CreateDefault(*context_, options);
650 } else {
651 pipelines_->linear_gradient_uniform_fill.CreateDefault(*context_,
652 options);
653 pipelines_->radial_gradient_uniform_fill.CreateDefault(*context_,
654 options);
655 pipelines_->conical_gradient_uniform_fill.CreateDefault(*context_,
656 options);
657 pipelines_->conical_gradient_uniform_fill_radial.CreateDefault(*context_,
658 options);
659 pipelines_->conical_gradient_uniform_fill_strip.CreateDefault(*context_,
660 options);
661 pipelines_->conical_gradient_uniform_fill_strip_and_radial.CreateDefault(
662 *context_, options);
663 pipelines_->sweep_gradient_uniform_fill.CreateDefault(*context_, options);
664
665 pipelines_->linear_gradient_fill.CreateDefault(*context_, options);
666 pipelines_->radial_gradient_fill.CreateDefault(*context_, options);
667 pipelines_->conical_gradient_fill.CreateDefault(*context_, options);
668 pipelines_->conical_gradient_fill_radial.CreateDefault(*context_,
669 options);
670 pipelines_->conical_gradient_fill_strip.CreateDefault(*context_, options);
671 pipelines_->conical_gradient_fill_strip_and_radial.CreateDefault(
672 *context_, options);
673 pipelines_->sweep_gradient_fill.CreateDefault(*context_, options);
674 }
675
676 /// Setup default clip pipeline.
677 auto clip_pipeline_descriptor =
678 ClipPipeline::Builder::MakeDefaultPipelineDescriptor(*context_);
679 if (!clip_pipeline_descriptor.has_value()) {
680 return;
681 }
682 ContentContextOptions{
683 .sample_count = SampleCount::kCount4,
684 .color_attachment_pixel_format =
685 context_->GetCapabilities()->GetDefaultColorFormat()}
686 .ApplyToPipelineDescriptor(*clip_pipeline_descriptor);
687 // Disable write to all color attachments.
688 auto clip_color_attachments =
689 clip_pipeline_descriptor->GetColorAttachmentDescriptors();
690 for (auto& color_attachment : clip_color_attachments) {
691 color_attachment.second.write_mask = ColorWriteMaskBits::kNone;
692 }
693 clip_pipeline_descriptor->SetColorAttachmentDescriptors(
694 std::move(clip_color_attachments));
695 if (GetContext()->GetFlags().lazy_shader_mode) {
696 pipelines_->clip.SetDefaultDescriptor(clip_pipeline_descriptor);
697 pipelines_->clip.SetDefault(options, nullptr);
698 } else {
699 pipelines_->clip.SetDefault(
700 options,
701 std::make_unique<ClipPipeline>(*context_, clip_pipeline_descriptor));
702 }
703 pipelines_->texture_downsample.CreateDefault(
704 *context_, options_no_msaa_no_depth_stencil);
705 pipelines_->texture_downsample_bounded.CreateDefault(
706 *context_, options_no_msaa_no_depth_stencil);
707 pipelines_->rrect_blur.CreateDefault(*context_, options_trianglestrip);
708 pipelines_->rsuperellipse_blur.CreateDefault(*context_,
709 options_trianglestrip);
710 pipelines_->texture_strict_src.CreateDefault(*context_, options);
711 pipelines_->tiled_texture.CreateDefault(*context_, options,
712 {supports_decal});
713 pipelines_->gaussian_blur.CreateDefault(
714 *context_, options_no_msaa_no_depth_stencil, {supports_decal});
715 pipelines_->border_mask_blur.CreateDefault(*context_,
716 options_trianglestrip);
717 pipelines_->color_matrix_color_filter.CreateDefault(*context_,
718 options_trianglestrip);
719 pipelines_->shadow_vertices_.CreateDefault(*context_, options);
720 pipelines_->vertices_uber_1_.CreateDefault(*context_, options,
721 {supports_decal});
722 pipelines_->vertices_uber_2_.CreateDefault(*context_, options,
723 {supports_decal});
724
725 const std::array<std::vector<Scalar>, 15> porter_duff_constants =
726 GetPorterDuffSpecConstants(supports_decal);
727 pipelines_->clear_blend.CreateDefault(*context_, options_trianglestrip,
728 porter_duff_constants[0]);
729 pipelines_->source_blend.CreateDefault(*context_, options_trianglestrip,
730 porter_duff_constants[1]);
731 pipelines_->destination_blend.CreateDefault(
732 *context_, options_trianglestrip, porter_duff_constants[2]);
733 pipelines_->source_over_blend.CreateDefault(
734 *context_, options_trianglestrip, porter_duff_constants[3]);
735 pipelines_->destination_over_blend.CreateDefault(
736 *context_, options_trianglestrip, porter_duff_constants[4]);
737 pipelines_->source_in_blend.CreateDefault(*context_, options_trianglestrip,
738 porter_duff_constants[5]);
739 pipelines_->destination_in_blend.CreateDefault(
740 *context_, options_trianglestrip, porter_duff_constants[6]);
741 pipelines_->source_out_blend.CreateDefault(*context_, options_trianglestrip,
742 porter_duff_constants[7]);
743 pipelines_->destination_out_blend.CreateDefault(
744 *context_, options_trianglestrip, porter_duff_constants[8]);
745 pipelines_->source_a_top_blend.CreateDefault(
746 *context_, options_trianglestrip, porter_duff_constants[9]);
747 pipelines_->destination_a_top_blend.CreateDefault(
748 *context_, options_trianglestrip, porter_duff_constants[10]);
749 pipelines_->xor_blend.CreateDefault(*context_, options_trianglestrip,
750 porter_duff_constants[11]);
751 pipelines_->plus_blend.CreateDefault(*context_, options_trianglestrip,
752 porter_duff_constants[12]);
753 pipelines_->modulate_blend.CreateDefault(*context_, options_trianglestrip,
754 porter_duff_constants[13]);
755 pipelines_->screen_blend.CreateDefault(*context_, options_trianglestrip,
756 porter_duff_constants[14]);
757 }
758
759 if (context_->GetCapabilities()->SupportsFramebufferFetch()) {
760 pipelines_->framebuffer_blend_color.CreateDefault(
761 *context_, options_trianglestrip,
762 {static_cast<Scalar>(BlendSelectValues::kColor), supports_decal});
763 pipelines_->framebuffer_blend_colorburn.CreateDefault(
764 *context_, options_trianglestrip,
765 {static_cast<Scalar>(BlendSelectValues::kColorBurn), supports_decal});
766 pipelines_->framebuffer_blend_colordodge.CreateDefault(
767 *context_, options_trianglestrip,
768 {static_cast<Scalar>(BlendSelectValues::kColorDodge), supports_decal});
769 pipelines_->framebuffer_blend_darken.CreateDefault(
770 *context_, options_trianglestrip,
771 {static_cast<Scalar>(BlendSelectValues::kDarken), supports_decal});
772 pipelines_->framebuffer_blend_difference.CreateDefault(
773 *context_, options_trianglestrip,
774 {static_cast<Scalar>(BlendSelectValues::kDifference), supports_decal});
775 pipelines_->framebuffer_blend_exclusion.CreateDefault(
776 *context_, options_trianglestrip,
777 {static_cast<Scalar>(BlendSelectValues::kExclusion), supports_decal});
778 pipelines_->framebuffer_blend_hardlight.CreateDefault(
779 *context_, options_trianglestrip,
780 {static_cast<Scalar>(BlendSelectValues::kHardLight), supports_decal});
781 pipelines_->framebuffer_blend_hue.CreateDefault(
782 *context_, options_trianglestrip,
783 {static_cast<Scalar>(BlendSelectValues::kHue), supports_decal});
784 pipelines_->framebuffer_blend_lighten.CreateDefault(
785 *context_, options_trianglestrip,
786 {static_cast<Scalar>(BlendSelectValues::kLighten), supports_decal});
787 pipelines_->framebuffer_blend_luminosity.CreateDefault(
788 *context_, options_trianglestrip,
789 {static_cast<Scalar>(BlendSelectValues::kLuminosity), supports_decal});
790 pipelines_->framebuffer_blend_multiply.CreateDefault(
791 *context_, options_trianglestrip,
792 {static_cast<Scalar>(BlendSelectValues::kMultiply), supports_decal});
793 pipelines_->framebuffer_blend_overlay.CreateDefault(
794 *context_, options_trianglestrip,
795 {static_cast<Scalar>(BlendSelectValues::kOverlay), supports_decal});
796 pipelines_->framebuffer_blend_saturation.CreateDefault(
797 *context_, options_trianglestrip,
798 {static_cast<Scalar>(BlendSelectValues::kSaturation), supports_decal});
799 pipelines_->framebuffer_blend_screen.CreateDefault(
800 *context_, options_trianglestrip,
801 {static_cast<Scalar>(BlendSelectValues::kScreen), supports_decal});
802 pipelines_->framebuffer_blend_softlight.CreateDefault(
803 *context_, options_trianglestrip,
804 {static_cast<Scalar>(BlendSelectValues::kSoftLight), supports_decal});
805 } else {
806 pipelines_->blend_color.CreateDefault(
807 *context_, options_trianglestrip,
808 {static_cast<Scalar>(BlendSelectValues::kColor), supports_decal});
809 pipelines_->blend_colorburn.CreateDefault(
810 *context_, options_trianglestrip,
811 {static_cast<Scalar>(BlendSelectValues::kColorBurn), supports_decal});
812 pipelines_->blend_colordodge.CreateDefault(
813 *context_, options_trianglestrip,
814 {static_cast<Scalar>(BlendSelectValues::kColorDodge), supports_decal});
815 pipelines_->blend_darken.CreateDefault(
816 *context_, options_trianglestrip,
817 {static_cast<Scalar>(BlendSelectValues::kDarken), supports_decal});
818 pipelines_->blend_difference.CreateDefault(
819 *context_, options_trianglestrip,
820 {static_cast<Scalar>(BlendSelectValues::kDifference), supports_decal});
821 pipelines_->blend_exclusion.CreateDefault(
822 *context_, options_trianglestrip,
823 {static_cast<Scalar>(BlendSelectValues::kExclusion), supports_decal});
824 pipelines_->blend_hardlight.CreateDefault(
825 *context_, options_trianglestrip,
826 {static_cast<Scalar>(BlendSelectValues::kHardLight), supports_decal});
827 pipelines_->blend_hue.CreateDefault(
828 *context_, options_trianglestrip,
829 {static_cast<Scalar>(BlendSelectValues::kHue), supports_decal});
830 pipelines_->blend_lighten.CreateDefault(
831 *context_, options_trianglestrip,
832 {static_cast<Scalar>(BlendSelectValues::kLighten), supports_decal});
833 pipelines_->blend_luminosity.CreateDefault(
834 *context_, options_trianglestrip,
835 {static_cast<Scalar>(BlendSelectValues::kLuminosity), supports_decal});
836 pipelines_->blend_multiply.CreateDefault(
837 *context_, options_trianglestrip,
838 {static_cast<Scalar>(BlendSelectValues::kMultiply), supports_decal});
839 pipelines_->blend_overlay.CreateDefault(
840 *context_, options_trianglestrip,
841 {static_cast<Scalar>(BlendSelectValues::kOverlay), supports_decal});
842 pipelines_->blend_saturation.CreateDefault(
843 *context_, options_trianglestrip,
844 {static_cast<Scalar>(BlendSelectValues::kSaturation), supports_decal});
845 pipelines_->blend_screen.CreateDefault(
846 *context_, options_trianglestrip,
847 {static_cast<Scalar>(BlendSelectValues::kScreen), supports_decal});
848 pipelines_->blend_softlight.CreateDefault(
849 *context_, options_trianglestrip,
850 {static_cast<Scalar>(BlendSelectValues::kSoftLight), supports_decal});
851 }
852
853 pipelines_->morphology_filter.CreateDefault(*context_, options_trianglestrip,
854 {supports_decal});
855 pipelines_->linear_to_srgb_filter.CreateDefault(*context_,
856 options_trianglestrip);
857 pipelines_->srgb_to_linear_filter.CreateDefault(*context_,
858 options_trianglestrip);
859 pipelines_->yuv_to_rgb_filter.CreateDefault(*context_, options_trianglestrip);
860
861 if (GetContext()->GetBackendType() == Context::BackendType::kOpenGLES) {
862#if defined(IMPELLER_ENABLE_OPENGLES) && !defined(FML_OS_MACOSX) && \
863 !defined(FML_OS_EMSCRIPTEN)
864 // GLES only shader that is unsupported on macOS and web.
865 pipelines_->tiled_texture_external.CreateDefault(*context_, options);
866 pipelines_->tiled_texture_uv_external.CreateDefault(*context_, options);
867#endif // !defined(FML_OS_MACOSX)
868
869#if defined(IMPELLER_ENABLE_OPENGLES)
870 pipelines_->texture_downsample_gles.CreateDefault(*context_,
871 options_trianglestrip);
872#endif // IMPELLER_ENABLE_OPENGLES
873 }
874
875 is_valid_ = true;
876 InitializeCommonlyUsedShadersIfNeeded();
877}
BufferView buffer_view
HostBuffer & GetTransientsDataBuffer() const
Retrieve the current host buffer for transient storage of other non-index data.
std::shared_ptr< Context > GetContext() const
static std::shared_ptr< HostBuffer > Create(const std::shared_ptr< Allocator > &allocator, const std::shared_ptr< const IdleWaiter > &idle_waiter, size_t minimum_uniform_alignment)
ScopedObject< Object > Create(CtorArgs &&... args)
Definition object.h:161
std::array< std::vector< Scalar >, 15 > GetPorterDuffSpecConstants(bool supports_decal)
float Scalar
Definition scalar.h:19
ISize64 ISize
Definition size.h:162
Definition ref_ptr.h:261
static constexpr Color BlackTransparent()
Definition color.h:270
std::array< uint8_t, 4 > ToR8G8B8A8() const
Convert to R8G8B8A8 representation.
Definition color.h:246
std::shared_ptr< const fml::Mapping > data
#define VALIDATION_LOG
Definition validation.h:91

References impeller::Color::BlackTransparent(), buffer_view, impeller::HostBuffer::Create(), data, impeller::HostBuffer::Emplace(), impeller::TextureDescriptor::format, GetContext(), impeller::GetPorterDuffSpecConstants(), GetTransientsDataBuffer(), impeller::kA8UNormInt, impeller::kColor, impeller::kColorBurn, impeller::kColorDodge, impeller::kCount1, impeller::kCount4, impeller::kDarken, impeller::kDevicePrivate, impeller::kDifference, impeller::kExclusion, impeller::kHardLight, impeller::kHue, impeller::kLighten, impeller::kLuminosity, impeller::kMultiply, impeller::kNone, impeller::Context::kOpenGLES, impeller::kOverlay, impeller::kR8G8B8A8UNormInt, impeller::kSaturation, impeller::kScreen, impeller::kSoftLight, impeller::kTriangleStrip, impeller::ContentContextOptions::sample_count, impeller::TextureDescriptor::size, impeller::TextureDescriptor::storage_mode, impeller::Color::ToR8G8B8A8(), and VALIDATION_LOG.

◆ ~ContentContext()

impeller::ContentContext::~ContentContext ( )
default

Member Function Documentation

◆ ClearCachedRuntimeEffectPipeline()

void impeller::ContentContext::ClearCachedRuntimeEffectPipeline ( const std::string &  unique_entrypoint_name) const

Used by hot reload/hot restart to clear a cached pipeline from GetCachedRuntimeEffectPipeline.

Definition at line 990 of file content_context.cc.

991 {
992#ifdef IMPELLER_DEBUG
993 // destroying in-use pipleines is a validation error.
994 const auto& idle_waiter = GetContext()->GetIdleWaiter();
995 if (idle_waiter) {
996 idle_waiter->WaitIdle();
997 }
998#endif // IMPELLER_DEBUG
999 for (auto it = runtime_effect_pipelines_.begin();
1000 it != runtime_effect_pipelines_.end();) {
1001 if (it->first.unique_entrypoint_name == unique_entrypoint_name) {
1002 it = runtime_effect_pipelines_.erase(it);
1003 } else {
1004 it++;
1005 }
1006 }
1007}

References GetContext().

◆ GetBlendColorBurnPipeline()

PipelineRef impeller::ContentContext::GetBlendColorBurnPipeline ( ContentContextOptions  opts) const

Definition at line 1343 of file content_context.cc.

1344 {
1345 return GetPipeline(this, pipelines_->blend_colorburn, opts);
1346}

◆ GetBlendColorDodgePipeline()

PipelineRef impeller::ContentContext::GetBlendColorDodgePipeline ( ContentContextOptions  opts) const

Definition at line 1348 of file content_context.cc.

1349 {
1350 return GetPipeline(this, pipelines_->blend_colordodge, opts);
1351}

◆ GetBlendColorPipeline()

PipelineRef impeller::ContentContext::GetBlendColorPipeline ( ContentContextOptions  opts) const

Definition at line 1338 of file content_context.cc.

1339 {
1340 return GetPipeline(this, pipelines_->blend_color, opts);
1341}

◆ GetBlendDarkenPipeline()

PipelineRef impeller::ContentContext::GetBlendDarkenPipeline ( ContentContextOptions  opts) const

Definition at line 1353 of file content_context.cc.

1354 {
1355 return GetPipeline(this, pipelines_->blend_darken, opts);
1356}

◆ GetBlendDifferencePipeline()

PipelineRef impeller::ContentContext::GetBlendDifferencePipeline ( ContentContextOptions  opts) const

Definition at line 1358 of file content_context.cc.

1359 {
1360 return GetPipeline(this, pipelines_->blend_difference, opts);
1361}

◆ GetBlendExclusionPipeline()

PipelineRef impeller::ContentContext::GetBlendExclusionPipeline ( ContentContextOptions  opts) const

Definition at line 1363 of file content_context.cc.

1364 {
1365 return GetPipeline(this, pipelines_->blend_exclusion, opts);
1366}

◆ GetBlendHardLightPipeline()

PipelineRef impeller::ContentContext::GetBlendHardLightPipeline ( ContentContextOptions  opts) const

Definition at line 1368 of file content_context.cc.

1369 {
1370 return GetPipeline(this, pipelines_->blend_hardlight, opts);
1371}

◆ GetBlendHuePipeline()

PipelineRef impeller::ContentContext::GetBlendHuePipeline ( ContentContextOptions  opts) const

Definition at line 1373 of file content_context.cc.

1374 {
1375 return GetPipeline(this, pipelines_->blend_hue, opts);
1376}

◆ GetBlendLightenPipeline()

PipelineRef impeller::ContentContext::GetBlendLightenPipeline ( ContentContextOptions  opts) const

Definition at line 1378 of file content_context.cc.

1379 {
1380 return GetPipeline(this, pipelines_->blend_lighten, opts);
1381}

◆ GetBlendLuminosityPipeline()

PipelineRef impeller::ContentContext::GetBlendLuminosityPipeline ( ContentContextOptions  opts) const

Definition at line 1383 of file content_context.cc.

1384 {
1385 return GetPipeline(this, pipelines_->blend_luminosity, opts);
1386}

◆ GetBlendMultiplyPipeline()

PipelineRef impeller::ContentContext::GetBlendMultiplyPipeline ( ContentContextOptions  opts) const

Definition at line 1388 of file content_context.cc.

1389 {
1390 return GetPipeline(this, pipelines_->blend_multiply, opts);
1391}

◆ GetBlendOverlayPipeline()

PipelineRef impeller::ContentContext::GetBlendOverlayPipeline ( ContentContextOptions  opts) const

Definition at line 1393 of file content_context.cc.

1394 {
1395 return GetPipeline(this, pipelines_->blend_overlay, opts);
1396}

◆ GetBlendSaturationPipeline()

PipelineRef impeller::ContentContext::GetBlendSaturationPipeline ( ContentContextOptions  opts) const

Definition at line 1398 of file content_context.cc.

1399 {
1400 return GetPipeline(this, pipelines_->blend_saturation, opts);
1401}

◆ GetBlendScreenPipeline()

PipelineRef impeller::ContentContext::GetBlendScreenPipeline ( ContentContextOptions  opts) const

Definition at line 1403 of file content_context.cc.

1404 {
1405 return GetPipeline(this, pipelines_->blend_screen, opts);
1406}

◆ GetBlendSoftLightPipeline()

PipelineRef impeller::ContentContext::GetBlendSoftLightPipeline ( ContentContextOptions  opts) const

Definition at line 1408 of file content_context.cc.

1409 {
1410 return GetPipeline(this, pipelines_->blend_softlight, opts);
1411}

◆ GetBorderMaskBlurPipeline()

PipelineRef impeller::ContentContext::GetBorderMaskBlurPipeline ( ContentContextOptions  opts) const

Definition at line 1169 of file content_context.cc.

1170 {
1171 return GetPipeline(this, pipelines_->border_mask_blur, opts);
1172}

◆ GetCachedRuntimeEffectPipeline()

PipelineRef impeller::ContentContext::GetCachedRuntimeEffectPipeline ( const std::string &  unique_entrypoint_name,
const ContentContextOptions options,
const std::function< std::shared_ptr< Pipeline< PipelineDescriptor > >()> &  create_callback 
) const

RuntimeEffect pipelines must be obtained via this method to avoid re-creating them every frame.

The unique_entrypoint_name comes from RuntimeEffect::GetEntrypoint. Impellerc generates a unique entrypoint name for runtime effect shaders based on the input file name and shader stage.

The create_callback is synchronously invoked exactly once if a cached pipeline is not found.

Definition at line 977 of file content_context.cc.

981 {
982 RuntimeEffectPipelineKey key{unique_entrypoint_name, options};
983 auto it = runtime_effect_pipelines_.find(key);
984 if (it == runtime_effect_pipelines_.end()) {
985 it = runtime_effect_pipelines_.insert(it, {key, create_callback()});
986 }
987 return raw_ptr(it->second);
988}

References key.

Referenced by impeller::RuntimeEffectContents::Render().

◆ GetCirclePipeline()

PipelineRef impeller::ContentContext::GetCirclePipeline ( ContentContextOptions  opts) const

Definition at line 1528 of file content_context.cc.

1529 {
1530 return GetPipeline(this, pipelines_->circle, opts);
1531}

Referenced by impeller::CircleContents::Render().

◆ GetClearBlendPipeline()

PipelineRef impeller::ContentContext::GetClearBlendPipeline ( ContentContextOptions  opts) const

Definition at line 1263 of file content_context.cc.

1264 {
1265 return GetPipeline(this, pipelines_->clear_blend, opts);
1266}

Referenced by GetPorterDuffPipeline().

◆ GetClipPipeline()

PipelineRef impeller::ContentContext::GetClipPipeline ( ContentContextOptions  opts) const

Definition at line 1194 of file content_context.cc.

1194 {
1195 return GetPipeline(this, pipelines_->clip, opts);
1196}

Referenced by impeller::ColorSourceContents::DrawGeometry(), and impeller::ClipContents::Render().

◆ GetColorMatrixColorFilterPipeline()

PipelineRef impeller::ContentContext::GetColorMatrixColorFilterPipeline ( ContentContextOptions  opts) const

Definition at line 1179 of file content_context.cc.

1180 {
1181 return GetPipeline(this, pipelines_->color_matrix_color_filter, opts);
1182}

Referenced by impeller::ColorFilterAtlasContents::Render().

◆ GetConicalGradientFillPipeline()

PipelineRef impeller::ContentContext::GetConicalGradientFillPipeline ( ContentContextOptions  opts,
ConicalKind  kind 
) const

Definition at line 1113 of file content_context.cc.

1115 {
1116 switch (kind) {
1118 return GetPipeline(this, pipelines_->conical_gradient_fill, opts);
1120 return GetPipeline(this, pipelines_->conical_gradient_fill_radial, opts);
1122 return GetPipeline(this, pipelines_->conical_gradient_fill_strip, opts);
1124 return GetPipeline(
1125 this, pipelines_->conical_gradient_fill_strip_and_radial, opts);
1126 }
1127}

References impeller::kConical, impeller::kRadial, impeller::kStrip, and impeller::kStripAndRadial.

◆ GetConicalGradientSSBOFillPipeline()

PipelineRef impeller::ContentContext::GetConicalGradientSSBOFillPipeline ( ContentContextOptions  opts,
ConicalKind  kind 
) const

Definition at line 1083 of file content_context.cc.

1085 {
1086 FML_DCHECK(GetDeviceCapabilities().SupportsSSBO());
1087 switch (kind) {
1089 return GetPipeline(this, pipelines_->conical_gradient_ssbo_fill, opts);
1091 return GetPipeline(this, pipelines_->conical_gradient_ssbo_fill_radial,
1092 opts);
1094 return GetPipeline(this, pipelines_->conical_gradient_ssbo_fill_strip,
1095 opts);
1097 return GetPipeline(
1098 this, pipelines_->conical_gradient_ssbo_fill_strip_and_radial, opts);
1099 }
1100}
const Capabilities & GetDeviceCapabilities() const
#define FML_DCHECK(condition)
Definition logging.h:122

References FML_DCHECK, GetDeviceCapabilities(), impeller::kConical, impeller::kRadial, impeller::kStrip, and impeller::kStripAndRadial.

◆ GetConicalGradientUniformFillPipeline()

PipelineRef impeller::ContentContext::GetConicalGradientUniformFillPipeline ( ContentContextOptions  opts,
ConicalKind  kind 
) const

Definition at line 1064 of file content_context.cc.

1066 {
1067 switch (kind) {
1069 return GetPipeline(this, pipelines_->conical_gradient_uniform_fill, opts);
1071 return GetPipeline(this, pipelines_->conical_gradient_uniform_fill_radial,
1072 opts);
1074 return GetPipeline(this, pipelines_->conical_gradient_uniform_fill_strip,
1075 opts);
1077 return GetPipeline(
1078 this, pipelines_->conical_gradient_uniform_fill_strip_and_radial,
1079 opts);
1080 }
1081}

References impeller::kConical, impeller::kRadial, impeller::kStrip, and impeller::kStripAndRadial.

◆ GetContext()

◆ GetDestinationATopBlendPipeline()

PipelineRef impeller::ContentContext::GetDestinationATopBlendPipeline ( ContentContextOptions  opts) const

Definition at line 1313 of file content_context.cc.

1314 {
1315 return GetPipeline(this, pipelines_->destination_a_top_blend, opts);
1316}

Referenced by GetPorterDuffPipeline().

◆ GetDestinationBlendPipeline()

PipelineRef impeller::ContentContext::GetDestinationBlendPipeline ( ContentContextOptions  opts) const

Definition at line 1273 of file content_context.cc.

1274 {
1275 return GetPipeline(this, pipelines_->destination_blend, opts);
1276}

Referenced by GetPorterDuffPipeline().

◆ GetDestinationInBlendPipeline()

PipelineRef impeller::ContentContext::GetDestinationInBlendPipeline ( ContentContextOptions  opts) const

Definition at line 1293 of file content_context.cc.

1294 {
1295 return GetPipeline(this, pipelines_->destination_in_blend, opts);
1296}

Referenced by GetPorterDuffPipeline().

◆ GetDestinationOutBlendPipeline()

PipelineRef impeller::ContentContext::GetDestinationOutBlendPipeline ( ContentContextOptions  opts) const

Definition at line 1303 of file content_context.cc.

1304 {
1305 return GetPipeline(this, pipelines_->destination_out_blend, opts);
1306}

Referenced by GetPorterDuffPipeline().

◆ GetDestinationOverBlendPipeline()

PipelineRef impeller::ContentContext::GetDestinationOverBlendPipeline ( ContentContextOptions  opts) const

Definition at line 1283 of file content_context.cc.

1284 {
1285 return GetPipeline(this, pipelines_->destination_over_blend, opts);
1286}

Referenced by GetPorterDuffPipeline().

◆ GetDeviceCapabilities()

◆ GetDownsampleBoundedPipeline()

PipelineRef impeller::ContentContext::GetDownsampleBoundedPipeline ( ContentContextOptions  opts) const

Definition at line 1418 of file content_context.cc.

1419 {
1420 return GetPipeline(this, pipelines_->texture_downsample_bounded, opts);
1421}

◆ GetDownsamplePipeline()

PipelineRef impeller::ContentContext::GetDownsamplePipeline ( ContentContextOptions  opts) const

Definition at line 1413 of file content_context.cc.

1414 {
1415 return GetPipeline(this, pipelines_->texture_downsample, opts);
1416}

◆ GetDrawShadowVerticesPipeline()

PipelineRef impeller::ContentContext::GetDrawShadowVerticesPipeline ( ContentContextOptions  opts) const

Definition at line 1513 of file content_context.cc.

1514 {
1515 return GetPipeline(this, pipelines_->shadow_vertices_, opts);
1516}

Referenced by impeller::ShadowVerticesContents::Render().

◆ GetDrawVerticesUberPipeline()

PipelineRef impeller::ContentContext::GetDrawVerticesUberPipeline ( BlendMode  blend_mode,
ContentContextOptions  opts 
) const

Definition at line 1518 of file content_context.cc.

1520 {
1521 if (blend_mode <= BlendMode::kHardLight) {
1522 return GetPipeline(this, pipelines_->vertices_uber_1_, opts);
1523 } else {
1524 return GetPipeline(this, pipelines_->vertices_uber_2_, opts);
1525 }
1526}

References impeller::kHardLight.

Referenced by impeller::AtlasContents::Render(), and impeller::VerticesSimpleBlendContents::Render().

◆ GetEmptyTexture()

std::shared_ptr< Texture > impeller::ContentContext::GetEmptyTexture ( ) const

Definition at line 885 of file content_context.cc.

885 {
886 return empty_texture_;
887}

Referenced by impeller::VerticesSimpleBlendContents::Render().

◆ GetFastGradientPipeline()

PipelineRef impeller::ContentContext::GetFastGradientPipeline ( ContentContextOptions  opts) const

Definition at line 1027 of file content_context.cc.

1028 {
1029 return GetPipeline(this, pipelines_->fast_gradient, opts);
1030}

◆ GetFramebufferBlendColorBurnPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendColorBurnPipeline ( ContentContextOptions  opts) const

Definition at line 1429 of file content_context.cc.

1430 {
1431 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1432 return GetPipeline(this, pipelines_->framebuffer_blend_colorburn, opts);
1433}

References FML_DCHECK, and GetDeviceCapabilities().

◆ GetFramebufferBlendColorDodgePipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendColorDodgePipeline ( ContentContextOptions  opts) const

Definition at line 1435 of file content_context.cc.

1436 {
1437 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1438 return GetPipeline(this, pipelines_->framebuffer_blend_colordodge, opts);
1439}

References FML_DCHECK, and GetDeviceCapabilities().

◆ GetFramebufferBlendColorPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendColorPipeline ( ContentContextOptions  opts) const

Definition at line 1423 of file content_context.cc.

1424 {
1425 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1426 return GetPipeline(this, pipelines_->framebuffer_blend_color, opts);
1427}

References FML_DCHECK, and GetDeviceCapabilities().

◆ GetFramebufferBlendDarkenPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendDarkenPipeline ( ContentContextOptions  opts) const

Definition at line 1441 of file content_context.cc.

1442 {
1443 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1444 return GetPipeline(this, pipelines_->framebuffer_blend_darken, opts);
1445}

References FML_DCHECK, and GetDeviceCapabilities().

◆ GetFramebufferBlendDifferencePipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendDifferencePipeline ( ContentContextOptions  opts) const

Definition at line 1447 of file content_context.cc.

1448 {
1449 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1450 return GetPipeline(this, pipelines_->framebuffer_blend_difference, opts);
1451}

References FML_DCHECK, and GetDeviceCapabilities().

◆ GetFramebufferBlendExclusionPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendExclusionPipeline ( ContentContextOptions  opts) const

Definition at line 1453 of file content_context.cc.

1454 {
1455 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1456 return GetPipeline(this, pipelines_->framebuffer_blend_exclusion, opts);
1457}

References FML_DCHECK, and GetDeviceCapabilities().

◆ GetFramebufferBlendHardLightPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendHardLightPipeline ( ContentContextOptions  opts) const

Definition at line 1459 of file content_context.cc.

1460 {
1461 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1462 return GetPipeline(this, pipelines_->framebuffer_blend_hardlight, opts);
1463}

References FML_DCHECK, and GetDeviceCapabilities().

◆ GetFramebufferBlendHuePipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendHuePipeline ( ContentContextOptions  opts) const

Definition at line 1465 of file content_context.cc.

1466 {
1467 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1468 return GetPipeline(this, pipelines_->framebuffer_blend_hue, opts);
1469}

References FML_DCHECK, and GetDeviceCapabilities().

◆ GetFramebufferBlendLightenPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendLightenPipeline ( ContentContextOptions  opts) const

Definition at line 1471 of file content_context.cc.

1472 {
1473 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1474 return GetPipeline(this, pipelines_->framebuffer_blend_lighten, opts);
1475}

References FML_DCHECK, and GetDeviceCapabilities().

◆ GetFramebufferBlendLuminosityPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendLuminosityPipeline ( ContentContextOptions  opts) const

Definition at line 1477 of file content_context.cc.

1478 {
1479 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1480 return GetPipeline(this, pipelines_->framebuffer_blend_luminosity, opts);
1481}

References FML_DCHECK, and GetDeviceCapabilities().

◆ GetFramebufferBlendMultiplyPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendMultiplyPipeline ( ContentContextOptions  opts) const

Definition at line 1483 of file content_context.cc.

1484 {
1485 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1486 return GetPipeline(this, pipelines_->framebuffer_blend_multiply, opts);
1487}

References FML_DCHECK, and GetDeviceCapabilities().

◆ GetFramebufferBlendOverlayPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendOverlayPipeline ( ContentContextOptions  opts) const

Definition at line 1489 of file content_context.cc.

1490 {
1491 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1492 return GetPipeline(this, pipelines_->framebuffer_blend_overlay, opts);
1493}

References FML_DCHECK, and GetDeviceCapabilities().

◆ GetFramebufferBlendSaturationPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendSaturationPipeline ( ContentContextOptions  opts) const

Definition at line 1495 of file content_context.cc.

1496 {
1497 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1498 return GetPipeline(this, pipelines_->framebuffer_blend_saturation, opts);
1499}

References FML_DCHECK, and GetDeviceCapabilities().

◆ GetFramebufferBlendScreenPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendScreenPipeline ( ContentContextOptions  opts) const

Definition at line 1501 of file content_context.cc.

1502 {
1503 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1504 return GetPipeline(this, pipelines_->framebuffer_blend_screen, opts);
1505}

References FML_DCHECK, and GetDeviceCapabilities().

◆ GetFramebufferBlendSoftLightPipeline()

PipelineRef impeller::ContentContext::GetFramebufferBlendSoftLightPipeline ( ContentContextOptions  opts) const

Definition at line 1507 of file content_context.cc.

1508 {
1509 FML_DCHECK(GetDeviceCapabilities().SupportsFramebufferFetch());
1510 return GetPipeline(this, pipelines_->framebuffer_blend_softlight, opts);
1511}

References FML_DCHECK, and GetDeviceCapabilities().

◆ GetGaussianBlurPipeline()

PipelineRef impeller::ContentContext::GetGaussianBlurPipeline ( ContentContextOptions  opts) const

Definition at line 1164 of file content_context.cc.

1165 {
1166 return GetPipeline(this, pipelines_->gaussian_blur, opts);
1167}

◆ GetGlyphAtlasPipeline()

PipelineRef impeller::ContentContext::GetGlyphAtlasPipeline ( ContentContextOptions  opts) const

Definition at line 1198 of file content_context.cc.

1199 {
1200 return GetPipeline(this, pipelines_->glyph_atlas, opts);
1201}

Referenced by impeller::TextContents::Render().

◆ GetLazyGlyphAtlas()

const std::shared_ptr< LazyGlyphAtlas > & impeller::ContentContext::GetLazyGlyphAtlas ( ) const
inline

Definition at line 254 of file content_context.h.

254 {
255 return lazy_glyph_atlas_;
256 }

Referenced by impeller::FirstPassDispatcher::drawText(), impeller::TextContents::Render(), impeller::RenderToTarget(), and impeller::testing::TEST_P().

◆ GetLinearGradientFillPipeline()

PipelineRef impeller::ContentContext::GetLinearGradientFillPipeline ( ContentContextOptions  opts) const

Definition at line 1032 of file content_context.cc.

1033 {
1034 return GetPipeline(this, pipelines_->linear_gradient_fill, opts);
1035}

◆ GetLinearGradientSSBOFillPipeline()

PipelineRef impeller::ContentContext::GetLinearGradientSSBOFillPipeline ( ContentContextOptions  opts) const

Definition at line 1052 of file content_context.cc.

1053 {
1054 FML_DCHECK(GetDeviceCapabilities().SupportsSSBO());
1055 return GetPipeline(this, pipelines_->linear_gradient_ssbo_fill, opts);
1056}

References FML_DCHECK, and GetDeviceCapabilities().

◆ GetLinearGradientUniformFillPipeline()

PipelineRef impeller::ContentContext::GetLinearGradientUniformFillPipeline ( ContentContextOptions  opts) const

Definition at line 1037 of file content_context.cc.

1038 {
1039 return GetPipeline(this, pipelines_->linear_gradient_uniform_fill, opts);
1040}

◆ GetLinearToSrgbFilterPipeline()

PipelineRef impeller::ContentContext::GetLinearToSrgbFilterPipeline ( ContentContextOptions  opts) const

Definition at line 1184 of file content_context.cc.

1185 {
1186 return GetPipeline(this, pipelines_->linear_to_srgb_filter, opts);
1187}

◆ GetLinePipeline()

PipelineRef impeller::ContentContext::GetLinePipeline ( ContentContextOptions  opts) const

Definition at line 1533 of file content_context.cc.

1533 {
1534 return GetPipeline(this, pipelines_->line, opts);
1535}

Referenced by impeller::LineContents::Render().

◆ GetModulateBlendPipeline()

PipelineRef impeller::ContentContext::GetModulateBlendPipeline ( ContentContextOptions  opts) const

Definition at line 1328 of file content_context.cc.

1329 {
1330 return GetPipeline(this, pipelines_->modulate_blend, opts);
1331}

Referenced by GetPorterDuffPipeline().

◆ GetMorphologyFilterPipeline()

PipelineRef impeller::ContentContext::GetMorphologyFilterPipeline ( ContentContextOptions  opts) const

Definition at line 1174 of file content_context.cc.

1175 {
1176 return GetPipeline(this, pipelines_->morphology_filter, opts);
1177}

◆ GetPlusBlendPipeline()

PipelineRef impeller::ContentContext::GetPlusBlendPipeline ( ContentContextOptions  opts) const

Definition at line 1323 of file content_context.cc.

1324 {
1325 return GetPipeline(this, pipelines_->plus_blend, opts);
1326}

Referenced by GetPorterDuffPipeline().

◆ GetPorterDuffPipeline()

PipelineRef impeller::ContentContext::GetPorterDuffPipeline ( BlendMode  mode,
ContentContextOptions  opts 
) const

Definition at line 1208 of file content_context.cc.

1210 {
1211 switch (mode) {
1212 case BlendMode::kClear:
1213 return GetClearBlendPipeline(opts);
1214 case BlendMode::kSrc:
1215 return GetSourceBlendPipeline(opts);
1216 case BlendMode::kDst:
1217 return GetDestinationBlendPipeline(opts);
1219 return GetSourceOverBlendPipeline(opts);
1222 case BlendMode::kSrcIn:
1223 return GetSourceInBlendPipeline(opts);
1224 case BlendMode::kDstIn:
1225 return GetDestinationInBlendPipeline(opts);
1226 case BlendMode::kSrcOut:
1227 return GetSourceOutBlendPipeline(opts);
1228 case BlendMode::kDstOut:
1229 return GetDestinationOutBlendPipeline(opts);
1231 return GetSourceATopBlendPipeline(opts);
1234 case BlendMode::kXor:
1235 return GetXorBlendPipeline(opts);
1236 case BlendMode::kPlus:
1237 return GetPlusBlendPipeline(opts);
1239 return GetModulateBlendPipeline(opts);
1240 case BlendMode::kScreen:
1241 return GetScreenBlendPipeline(opts);
1243 case BlendMode::kDarken:
1252 case BlendMode::kHue:
1254 case BlendMode::kColor:
1256 VALIDATION_LOG << "Invalid porter duff blend mode "
1257 << BlendModeToString(mode);
1258 return GetClearBlendPipeline(opts);
1259 break;
1260 }
1261}
PipelineRef GetSourceInBlendPipeline(ContentContextOptions opts) const
PipelineRef GetSourceOutBlendPipeline(ContentContextOptions opts) const
PipelineRef GetScreenBlendPipeline(ContentContextOptions opts) const
PipelineRef GetPlusBlendPipeline(ContentContextOptions opts) const
PipelineRef GetModulateBlendPipeline(ContentContextOptions opts) const
PipelineRef GetDestinationATopBlendPipeline(ContentContextOptions opts) const
PipelineRef GetClearBlendPipeline(ContentContextOptions opts) const
PipelineRef GetDestinationOutBlendPipeline(ContentContextOptions opts) const
PipelineRef GetSourceATopBlendPipeline(ContentContextOptions opts) const
PipelineRef GetXorBlendPipeline(ContentContextOptions opts) const
PipelineRef GetSourceBlendPipeline(ContentContextOptions opts) const
PipelineRef GetDestinationBlendPipeline(ContentContextOptions opts) const
PipelineRef GetDestinationOverBlendPipeline(ContentContextOptions opts) const
PipelineRef GetSourceOverBlendPipeline(ContentContextOptions opts) const
PipelineRef GetDestinationInBlendPipeline(ContentContextOptions opts) const
const char * BlendModeToString(BlendMode blend_mode)
Definition color.cc:47

References impeller::BlendModeToString(), GetClearBlendPipeline(), GetDestinationATopBlendPipeline(), GetDestinationBlendPipeline(), GetDestinationInBlendPipeline(), GetDestinationOutBlendPipeline(), GetDestinationOverBlendPipeline(), GetModulateBlendPipeline(), GetPlusBlendPipeline(), GetScreenBlendPipeline(), GetSourceATopBlendPipeline(), GetSourceBlendPipeline(), GetSourceInBlendPipeline(), GetSourceOutBlendPipeline(), GetSourceOverBlendPipeline(), GetXorBlendPipeline(), impeller::kClear, impeller::kColor, impeller::kColorBurn, impeller::kColorDodge, impeller::kDarken, impeller::kDifference, impeller::kDst, impeller::kDstATop, impeller::kDstIn, impeller::kDstOut, impeller::kDstOver, impeller::kExclusion, impeller::kHardLight, impeller::kHue, impeller::kLighten, impeller::kLuminosity, impeller::kModulate, impeller::kMultiply, impeller::kOverlay, impeller::kPlus, impeller::kSaturation, impeller::kScreen, impeller::kSoftLight, impeller::kSrc, impeller::kSrcATop, impeller::kSrcIn, impeller::kSrcOut, impeller::kSrcOver, impeller::kXor, and VALIDATION_LOG.

Referenced by impeller::AtlasContents::Render(), and impeller::VerticesSimpleBlendContents::Render().

◆ GetRadialGradientFillPipeline()

PipelineRef impeller::ContentContext::GetRadialGradientFillPipeline ( ContentContextOptions  opts) const

Definition at line 1108 of file content_context.cc.

1109 {
1110 return GetPipeline(this, pipelines_->radial_gradient_fill, opts);
1111}

◆ GetRadialGradientSSBOFillPipeline()

PipelineRef impeller::ContentContext::GetRadialGradientSSBOFillPipeline ( ContentContextOptions  opts) const

Definition at line 1058 of file content_context.cc.

1059 {
1060 FML_DCHECK(GetDeviceCapabilities().SupportsSSBO());
1061 return GetPipeline(this, pipelines_->radial_gradient_ssbo_fill, opts);
1062}

References FML_DCHECK, and GetDeviceCapabilities().

◆ GetRadialGradientUniformFillPipeline()

PipelineRef impeller::ContentContext::GetRadialGradientUniformFillPipeline ( ContentContextOptions  opts) const

Definition at line 1042 of file content_context.cc.

1043 {
1044 return GetPipeline(this, pipelines_->radial_gradient_uniform_fill, opts);
1045}

◆ GetRenderTargetCache()

const std::shared_ptr< RenderTargetAllocator > & impeller::ContentContext::GetRenderTargetCache ( ) const
inline

◆ GetRRectBlurPipeline()

PipelineRef impeller::ContentContext::GetRRectBlurPipeline ( ContentContextOptions  opts) const

Definition at line 1129 of file content_context.cc.

1130 {
1131 return GetPipeline(this, pipelines_->rrect_blur, opts);
1132}

Referenced by impeller::SolidRRectBlurContents::SetPassInfo().

◆ GetRSuperellipseBlurPipeline()

PipelineRef impeller::ContentContext::GetRSuperellipseBlurPipeline ( ContentContextOptions  opts) const

Definition at line 1134 of file content_context.cc.

1135 {
1136 return GetPipeline(this, pipelines_->rsuperellipse_blur, opts);
1137}

◆ GetScreenBlendPipeline()

PipelineRef impeller::ContentContext::GetScreenBlendPipeline ( ContentContextOptions  opts) const

Definition at line 1333 of file content_context.cc.

1334 {
1335 return GetPipeline(this, pipelines_->screen_blend, opts);
1336}

Referenced by GetPorterDuffPipeline().

◆ GetSolidFillPipeline()

PipelineRef impeller::ContentContext::GetSolidFillPipeline ( ContentContextOptions  opts) const

Definition at line 1144 of file content_context.cc.

1145 {
1146 return GetPipeline(this, pipelines_->solid_fill, opts);
1147}

Referenced by impeller::SolidColorContents::Render(), and impeller::testing::TEST_P().

◆ GetSourceATopBlendPipeline()

PipelineRef impeller::ContentContext::GetSourceATopBlendPipeline ( ContentContextOptions  opts) const

Definition at line 1308 of file content_context.cc.

1309 {
1310 return GetPipeline(this, pipelines_->source_a_top_blend, opts);
1311}

Referenced by GetPorterDuffPipeline().

◆ GetSourceBlendPipeline()

PipelineRef impeller::ContentContext::GetSourceBlendPipeline ( ContentContextOptions  opts) const

Definition at line 1268 of file content_context.cc.

1269 {
1270 return GetPipeline(this, pipelines_->source_blend, opts);
1271}

Referenced by GetPorterDuffPipeline().

◆ GetSourceInBlendPipeline()

PipelineRef impeller::ContentContext::GetSourceInBlendPipeline ( ContentContextOptions  opts) const

Definition at line 1288 of file content_context.cc.

1289 {
1290 return GetPipeline(this, pipelines_->source_in_blend, opts);
1291}

Referenced by GetPorterDuffPipeline().

◆ GetSourceOutBlendPipeline()

PipelineRef impeller::ContentContext::GetSourceOutBlendPipeline ( ContentContextOptions  opts) const

Definition at line 1298 of file content_context.cc.

1299 {
1300 return GetPipeline(this, pipelines_->source_out_blend, opts);
1301}

Referenced by GetPorterDuffPipeline().

◆ GetSourceOverBlendPipeline()

PipelineRef impeller::ContentContext::GetSourceOverBlendPipeline ( ContentContextOptions  opts) const

Definition at line 1278 of file content_context.cc.

1279 {
1280 return GetPipeline(this, pipelines_->source_over_blend, opts);
1281}

Referenced by GetPorterDuffPipeline().

◆ GetSrgbToLinearFilterPipeline()

PipelineRef impeller::ContentContext::GetSrgbToLinearFilterPipeline ( ContentContextOptions  opts) const

Definition at line 1189 of file content_context.cc.

1190 {
1191 return GetPipeline(this, pipelines_->srgb_to_linear_filter, opts);
1192}

◆ GetSweepGradientFillPipeline()

PipelineRef impeller::ContentContext::GetSweepGradientFillPipeline ( ContentContextOptions  opts) const

Definition at line 1139 of file content_context.cc.

1140 {
1141 return GetPipeline(this, pipelines_->sweep_gradient_fill, opts);
1142}

◆ GetSweepGradientSSBOFillPipeline()

PipelineRef impeller::ContentContext::GetSweepGradientSSBOFillPipeline ( ContentContextOptions  opts) const

Definition at line 1102 of file content_context.cc.

1103 {
1104 FML_DCHECK(GetDeviceCapabilities().SupportsSSBO());
1105 return GetPipeline(this, pipelines_->sweep_gradient_ssbo_fill, opts);
1106}

References FML_DCHECK, and GetDeviceCapabilities().

◆ GetSweepGradientUniformFillPipeline()

PipelineRef impeller::ContentContext::GetSweepGradientUniformFillPipeline ( ContentContextOptions  opts) const

Definition at line 1047 of file content_context.cc.

1048 {
1049 return GetPipeline(this, pipelines_->sweep_gradient_uniform_fill, opts);
1050}

◆ GetTessellator()

Tessellator & impeller::ContentContext::GetTessellator ( ) const

Definition at line 965 of file content_context.cc.

965 {
966 return *tessellator_;
967}

Referenced by impeller::CircleGeometry::GetPositionBuffer(), and impeller::StrokeRectGeometry::GetPositionBuffer().

◆ GetTextShadowCache()

TextShadowCache & impeller::ContentContext::GetTextShadowCache ( ) const
inline

◆ GetTexturePipeline()

PipelineRef impeller::ContentContext::GetTexturePipeline ( ContentContextOptions  opts) const

Definition at line 1149 of file content_context.cc.

1150 {
1151 return GetPipeline(this, pipelines_->texture, opts);
1152}

Referenced by impeller::PipelineBlend(), impeller::AtlasContents::Render(), and impeller::TextureContents::Render().

◆ GetTextureStrictSrcPipeline()

PipelineRef impeller::ContentContext::GetTextureStrictSrcPipeline ( ContentContextOptions  opts) const

Definition at line 1154 of file content_context.cc.

1155 {
1156 return GetPipeline(this, pipelines_->texture_strict_src, opts);
1157}

Referenced by impeller::TextureContents::Render().

◆ GetTiledTexturePipeline()

PipelineRef impeller::ContentContext::GetTiledTexturePipeline ( ContentContextOptions  opts) const

Definition at line 1159 of file content_context.cc.

1160 {
1161 return GetPipeline(this, pipelines_->tiled_texture, opts);
1162}

Referenced by impeller::TiledTextureContents::Render().

◆ GetTransientsDataBuffer()

◆ GetTransientsIndexesBuffer()

HostBuffer & impeller::ContentContext::GetTransientsIndexesBuffer ( ) const
inline

Retrieve the current host buffer for transient storage of indexes used for indexed draws.

This may or may not return the same value as GetTransientsDataBuffer depending on the backend.

This is only safe to use from the raster threads. Other threads should allocate their own device buffers.

Definition at line 290 of file content_context.h.

290 {
291 return *indexes_host_buffer_;
292 }

Referenced by impeller::ShadowVertices::GetPositionBuffer(), impeller::DlVerticesGeometry::GetPositionBuffer(), impeller::DlVerticesGeometry::GetPositionUVColorBuffer(), impeller::EntityPlayground::OpenPlaygroundHere(), impeller::TextContents::Render(), and impeller::testing::TEST_P().

◆ GetXorBlendPipeline()

PipelineRef impeller::ContentContext::GetXorBlendPipeline ( ContentContextOptions  opts) const

Definition at line 1318 of file content_context.cc.

1319 {
1320 return GetPipeline(this, pipelines_->xor_blend, opts);
1321}

Referenced by GetPorterDuffPipeline().

◆ GetYUVToRGBFilterPipeline()

PipelineRef impeller::ContentContext::GetYUVToRGBFilterPipeline ( ContentContextOptions  opts) const

Definition at line 1203 of file content_context.cc.

1204 {
1205 return GetPipeline(this, pipelines_->yuv_to_rgb_filter, opts);
1206}

◆ IsValid()

bool impeller::ContentContext::IsValid ( ) const

Definition at line 881 of file content_context.cc.

881 {
882 return is_valid_;
883}

Referenced by impeller::EntityPlayground::OpenPlaygroundHere().

◆ MakeSubpass() [1/2]

fml::StatusOr< RenderTarget > impeller::ContentContext::MakeSubpass ( std::string_view  label,
const RenderTarget subpass_target,
const std::shared_ptr< CommandBuffer > &  command_buffer,
const SubpassCallback subpass_callback 
) const

Makes a subpass that will render to subpass_target.

Definition at line 926 of file content_context.cc.

930 {
931 const std::shared_ptr<Context>& context = GetContext();
932
933 auto subpass_texture = subpass_target.GetRenderTargetTexture();
934 if (!subpass_texture) {
936 }
937
938 auto sub_renderpass = command_buffer->CreateRenderPass(subpass_target);
939 if (!sub_renderpass) {
941 }
942 sub_renderpass->SetLabel(label);
943
944 if (!subpass_callback(*this, *sub_renderpass)) {
946 }
947
948 if (!sub_renderpass->EncodeCommands()) {
950 }
951
952 const std::shared_ptr<Texture>& target_texture =
953 subpass_target.GetRenderTargetTexture();
954 if (target_texture->GetMipCount() > 1) {
955 fml::Status mipmap_status =
956 AddMipmapGeneration(command_buffer, context, target_texture);
957 if (!mipmap_status.ok()) {
958 return mipmap_status;
959 }
960 }
961
962 return subpass_target;
963}
bool ok() const
Definition status.h:71
fml::Status AddMipmapGeneration(const std::shared_ptr< CommandBuffer > &command_buffer, const std::shared_ptr< Context > &context, const std::shared_ptr< Texture > &texture)
Adds a blit command to the render pass.

References impeller::AddMipmapGeneration(), GetContext(), impeller::RenderTarget::GetRenderTargetTexture(), fml::kUnknown, and fml::Status::ok().

◆ MakeSubpass() [2/2]

fml::StatusOr< RenderTarget > impeller::ContentContext::MakeSubpass ( std::string_view  label,
ISize  texture_size,
const std::shared_ptr< CommandBuffer > &  command_buffer,
const SubpassCallback subpass_callback,
bool  msaa_enabled = true,
bool  depth_stencil_enabled = false,
int32_t  mip_count = 1 
) const

Creates a new texture of size texture_size and calls subpass_callback with a RenderPass for drawing to the texture.

Definition at line 889 of file content_context.cc.

896 {
897 const std::shared_ptr<Context>& context = GetContext();
898 RenderTarget subpass_target;
899
900 std::optional<RenderTarget::AttachmentConfig> depth_stencil_config =
902 : std::optional<RenderTarget::AttachmentConfig>();
903
904 if (context->GetCapabilities()->SupportsOffscreenMSAA() && msaa_enabled) {
905 subpass_target = GetRenderTargetCache()->CreateOffscreenMSAA(
906 /*context=*/*context,
907 /*size=*/texture_size,
908 /*mip_count=*/mip_count,
909 /*label=*/label,
910 /*color_attachment_config=*/
912 /*stencil_attachment_config=*/depth_stencil_config,
913 /*existing_color_msaa_texture=*/nullptr,
914 /*existing_color_resolve_texture=*/nullptr,
915 /*existing_depth_stencil_texture=*/nullptr,
916 /*target_pixel_format=*/std::nullopt);
917 } else {
918 subpass_target = GetRenderTargetCache()->CreateOffscreen(
919 *context, texture_size,
920 /*mip_count=*/mip_count, label,
921 RenderTarget::kDefaultColorAttachmentConfig, depth_stencil_config);
922 }
923 return MakeSubpass(label, subpass_target, command_buffer, subpass_callback);
924}
const std::shared_ptr< RenderTargetAllocator > & GetRenderTargetCache() const
fml::StatusOr< RenderTarget > MakeSubpass(std::string_view label, ISize texture_size, const std::shared_ptr< CommandBuffer > &command_buffer, const SubpassCallback &subpass_callback, bool msaa_enabled=true, bool depth_stencil_enabled=false, int32_t mip_count=1) const
Creates a new texture of size texture_size and calls subpass_callback with a RenderPass for drawing t...
static constexpr AttachmentConfig kDefaultColorAttachmentConfig
static constexpr AttachmentConfigMSAA kDefaultColorAttachmentConfigMSAA
static constexpr AttachmentConfig kDefaultStencilAttachmentConfig

References GetContext(), GetRenderTargetCache(), impeller::RenderTarget::kDefaultColorAttachmentConfig, impeller::RenderTarget::kDefaultColorAttachmentConfigMSAA, impeller::RenderTarget::kDefaultStencilAttachmentConfig, and MakeSubpass().

Referenced by impeller::AdvancedBlend(), MakeSubpass(), impeller::PipelineBlend(), and impeller::Contents::RenderToSnapshot().

◆ ResetTransientsBuffers()

void impeller::ContentContext::ResetTransientsBuffers ( )

Resets the transients buffers held onto by the content context.

Definition at line 1009 of file content_context.cc.

1009 {
1010 data_host_buffer_->Reset();
1011
1012 // We should only reset the indexes host buffer if it is actually different
1013 // from the data host buffer. Otherwise we'll end up resetting the same host
1014 // buffer twice.
1015 if (data_host_buffer_ != indexes_host_buffer_) {
1016 indexes_host_buffer_->Reset();
1017 }
1018}

Referenced by impeller::RenderToTarget().

◆ SetTransientsDataBuffer()

void impeller::ContentContext::SetTransientsDataBuffer ( std::shared_ptr< HostBuffer host_buffer)
inlineprotected

Definition at line 313 of file content_context.h.

313 {
314 data_host_buffer_ = std::move(host_buffer);
315 }

Referenced by impeller::testing::FlushTestContentContext::FlushTestContentContext().

◆ SetTransientsIndexesBuffer()

void impeller::ContentContext::SetTransientsIndexesBuffer ( std::shared_ptr< HostBuffer host_buffer)
inlineprotected

Definition at line 308 of file content_context.h.

308 {
309 indexes_host_buffer_ = std::move(host_buffer);
310 }

Referenced by impeller::testing::FlushTestContentContext::FlushTestContentContext().


The documentation for this class was generated from the following files: