305#ifdef IMPELLER_ENABLE_OPENGLES
306 Variants<TiledTextureExternalPipeline> tiled_texture_external;
307 Variants<TextureDownsampleGlesPipeline> texture_downsample_gles;
308 Variants<TiledTextureUvExternalPipeline> tiled_texture_uv_external;
548 std::shared_ptr<Context> context,
549 std::shared_ptr<TypographerContext> typographer_context,
550 std::shared_ptr<RenderTargetAllocator> render_target_allocator)
551 : context_(
std::move(context)),
556 context_->GetCapabilities()->Supports32BitPrimitiveIndices())),
557 render_target_cache_(render_target_allocator == nullptr
559 context_->GetResourceAllocator())
560 :
std::move(render_target_allocator)),
562 context_->GetResourceAllocator(),
563 context_->GetIdleWaiter(),
564 context_->GetCapabilities()->GetMinimumUniformAlignment())),
566 if (!context_ || !context_->IsValid()) {
574 indexes_host_buffer_ =
575 context_->GetCapabilities()->NeedsPartitionedHostBuffer()
577 context_->GetResourceAllocator(), context_->GetIdleWaiter(),
578 context_->GetCapabilities()->GetMinimumUniformAlignment())
585 empty_texture_ =
GetContext()->GetResourceAllocator()->CreateTexture(desc);
588 std::shared_ptr<CommandBuffer> cmd_buffer =
590 std::shared_ptr<BlitPass> blit_pass = cmd_buffer->CreateBlitPass();
595 if (!blit_pass->EncodeCommands() || !
GetContext()
597 ->Submit({std::move(cmd_buffer)})
605 .color_attachment_pixel_format =
606 context_->GetCapabilities()->GetDefaultColorFormat()};
610 .color_attachment_pixel_format =
611 context_->GetCapabilities()->GetDefaultColorFormat()};
615 .color_attachment_pixel_format =
616 context_->GetCapabilities()->GetDefaultColorFormat(),
617 .has_depth_stencil_attachments =
false};
618 const auto supports_decal =
static_cast<Scalar>(
619 context_->GetCapabilities()->SupportsDecalSamplerAddressMode());
625 pipelines_->glyph_atlas.CreateDefault(
628 GetContext()->GetCapabilities()->GetDefaultGlyphAtlasFormat() ==
630 pipelines_->solid_fill.CreateDefault(*context_, options);
631 pipelines_->texture.CreateDefault(*context_, options);
632 pipelines_->fast_gradient.CreateDefault(*context_, options);
633 pipelines_->line.CreateDefault(*context_, options);
634 pipelines_->circle.CreateDefault(*context_, options);
636 if (context_->GetCapabilities()->SupportsSSBO()) {
637 pipelines_->linear_gradient_ssbo_fill.CreateDefault(*context_, options);
638 pipelines_->radial_gradient_ssbo_fill.CreateDefault(*context_, options);
639 pipelines_->conical_gradient_ssbo_fill.CreateDefault(*context_, options,
641 pipelines_->conical_gradient_ssbo_fill_radial.CreateDefault(
642 *context_, options, {1.0});
643 pipelines_->conical_gradient_ssbo_fill_strip.CreateDefault(
644 *context_, options, {2.0});
645 pipelines_->conical_gradient_ssbo_fill_strip_and_radial.CreateDefault(
646 *context_, options, {0.0});
647 pipelines_->sweep_gradient_ssbo_fill.CreateDefault(*context_, options);
649 pipelines_->linear_gradient_uniform_fill.CreateDefault(*context_,
651 pipelines_->radial_gradient_uniform_fill.CreateDefault(*context_,
653 pipelines_->conical_gradient_uniform_fill.CreateDefault(*context_,
655 pipelines_->conical_gradient_uniform_fill_radial.CreateDefault(*context_,
657 pipelines_->conical_gradient_uniform_fill_strip.CreateDefault(*context_,
659 pipelines_->conical_gradient_uniform_fill_strip_and_radial.CreateDefault(
661 pipelines_->sweep_gradient_uniform_fill.CreateDefault(*context_, options);
663 pipelines_->linear_gradient_fill.CreateDefault(*context_, options);
664 pipelines_->radial_gradient_fill.CreateDefault(*context_, options);
665 pipelines_->conical_gradient_fill.CreateDefault(*context_, options);
666 pipelines_->conical_gradient_fill_radial.CreateDefault(*context_,
668 pipelines_->conical_gradient_fill_strip.CreateDefault(*context_, options);
669 pipelines_->conical_gradient_fill_strip_and_radial.CreateDefault(
671 pipelines_->sweep_gradient_fill.CreateDefault(*context_, options);
675 auto clip_pipeline_descriptor =
676 ClipPipeline::Builder::MakeDefaultPipelineDescriptor(*context_);
677 if (!clip_pipeline_descriptor.has_value()) {
682 .color_attachment_pixel_format =
683 context_->GetCapabilities()->GetDefaultColorFormat()}
684 .ApplyToPipelineDescriptor(*clip_pipeline_descriptor);
686 auto clip_color_attachments =
687 clip_pipeline_descriptor->GetColorAttachmentDescriptors();
688 for (
auto& color_attachment : clip_color_attachments) {
691 clip_pipeline_descriptor->SetColorAttachmentDescriptors(
692 std::move(clip_color_attachments));
693 if (
GetContext()->GetFlags().lazy_shader_mode) {
694 pipelines_->clip.SetDefaultDescriptor(clip_pipeline_descriptor);
695 pipelines_->clip.SetDefault(options,
nullptr);
697 pipelines_->clip.SetDefault(
699 std::make_unique<ClipPipeline>(*context_, clip_pipeline_descriptor));
701 pipelines_->texture_downsample.CreateDefault(
702 *context_, options_no_msaa_no_depth_stencil);
703 pipelines_->rrect_blur.CreateDefault(*context_, options_trianglestrip);
704 pipelines_->rsuperellipse_blur.CreateDefault(*context_,
705 options_trianglestrip);
706 pipelines_->texture_strict_src.CreateDefault(*context_, options);
707 pipelines_->tiled_texture.CreateDefault(*context_, options,
709 pipelines_->gaussian_blur.CreateDefault(
710 *context_, options_no_msaa_no_depth_stencil, {supports_decal});
711 pipelines_->border_mask_blur.CreateDefault(*context_,
712 options_trianglestrip);
713 pipelines_->color_matrix_color_filter.CreateDefault(*context_,
714 options_trianglestrip);
715 pipelines_->vertices_uber_1_.CreateDefault(*context_, options,
717 pipelines_->vertices_uber_2_.CreateDefault(*context_, options,
720 const std::array<std::vector<Scalar>, 15> porter_duff_constants =
722 pipelines_->clear_blend.CreateDefault(*context_, options_trianglestrip,
723 porter_duff_constants[0]);
724 pipelines_->source_blend.CreateDefault(*context_, options_trianglestrip,
725 porter_duff_constants[1]);
726 pipelines_->destination_blend.CreateDefault(
727 *context_, options_trianglestrip, porter_duff_constants[2]);
728 pipelines_->source_over_blend.CreateDefault(
729 *context_, options_trianglestrip, porter_duff_constants[3]);
730 pipelines_->destination_over_blend.CreateDefault(
731 *context_, options_trianglestrip, porter_duff_constants[4]);
732 pipelines_->source_in_blend.CreateDefault(*context_, options_trianglestrip,
733 porter_duff_constants[5]);
734 pipelines_->destination_in_blend.CreateDefault(
735 *context_, options_trianglestrip, porter_duff_constants[6]);
736 pipelines_->source_out_blend.CreateDefault(*context_, options_trianglestrip,
737 porter_duff_constants[7]);
738 pipelines_->destination_out_blend.CreateDefault(
739 *context_, options_trianglestrip, porter_duff_constants[8]);
740 pipelines_->source_a_top_blend.CreateDefault(
741 *context_, options_trianglestrip, porter_duff_constants[9]);
742 pipelines_->destination_a_top_blend.CreateDefault(
743 *context_, options_trianglestrip, porter_duff_constants[10]);
744 pipelines_->xor_blend.CreateDefault(*context_, options_trianglestrip,
745 porter_duff_constants[11]);
746 pipelines_->plus_blend.CreateDefault(*context_, options_trianglestrip,
747 porter_duff_constants[12]);
748 pipelines_->modulate_blend.CreateDefault(*context_, options_trianglestrip,
749 porter_duff_constants[13]);
750 pipelines_->screen_blend.CreateDefault(*context_, options_trianglestrip,
751 porter_duff_constants[14]);
754 if (context_->GetCapabilities()->SupportsFramebufferFetch()) {
755 pipelines_->framebuffer_blend_color.CreateDefault(
756 *context_, options_trianglestrip,
758 pipelines_->framebuffer_blend_colorburn.CreateDefault(
759 *context_, options_trianglestrip,
761 pipelines_->framebuffer_blend_colordodge.CreateDefault(
762 *context_, options_trianglestrip,
764 pipelines_->framebuffer_blend_darken.CreateDefault(
765 *context_, options_trianglestrip,
767 pipelines_->framebuffer_blend_difference.CreateDefault(
768 *context_, options_trianglestrip,
770 pipelines_->framebuffer_blend_exclusion.CreateDefault(
771 *context_, options_trianglestrip,
773 pipelines_->framebuffer_blend_hardlight.CreateDefault(
774 *context_, options_trianglestrip,
776 pipelines_->framebuffer_blend_hue.CreateDefault(
777 *context_, options_trianglestrip,
779 pipelines_->framebuffer_blend_lighten.CreateDefault(
780 *context_, options_trianglestrip,
782 pipelines_->framebuffer_blend_luminosity.CreateDefault(
783 *context_, options_trianglestrip,
785 pipelines_->framebuffer_blend_multiply.CreateDefault(
786 *context_, options_trianglestrip,
788 pipelines_->framebuffer_blend_overlay.CreateDefault(
789 *context_, options_trianglestrip,
791 pipelines_->framebuffer_blend_saturation.CreateDefault(
792 *context_, options_trianglestrip,
794 pipelines_->framebuffer_blend_screen.CreateDefault(
795 *context_, options_trianglestrip,
797 pipelines_->framebuffer_blend_softlight.CreateDefault(
798 *context_, options_trianglestrip,
801 pipelines_->blend_color.CreateDefault(
802 *context_, options_trianglestrip,
804 pipelines_->blend_colorburn.CreateDefault(
805 *context_, options_trianglestrip,
807 pipelines_->blend_colordodge.CreateDefault(
808 *context_, options_trianglestrip,
810 pipelines_->blend_darken.CreateDefault(
811 *context_, options_trianglestrip,
813 pipelines_->blend_difference.CreateDefault(
814 *context_, options_trianglestrip,
816 pipelines_->blend_exclusion.CreateDefault(
817 *context_, options_trianglestrip,
819 pipelines_->blend_hardlight.CreateDefault(
820 *context_, options_trianglestrip,
822 pipelines_->blend_hue.CreateDefault(
823 *context_, options_trianglestrip,
825 pipelines_->blend_lighten.CreateDefault(
826 *context_, options_trianglestrip,
828 pipelines_->blend_luminosity.CreateDefault(
829 *context_, options_trianglestrip,
831 pipelines_->blend_multiply.CreateDefault(
832 *context_, options_trianglestrip,
834 pipelines_->blend_overlay.CreateDefault(
835 *context_, options_trianglestrip,
837 pipelines_->blend_saturation.CreateDefault(
838 *context_, options_trianglestrip,
840 pipelines_->blend_screen.CreateDefault(
841 *context_, options_trianglestrip,
843 pipelines_->blend_softlight.CreateDefault(
844 *context_, options_trianglestrip,
848 pipelines_->morphology_filter.CreateDefault(*context_, options_trianglestrip,
850 pipelines_->linear_to_srgb_filter.CreateDefault(*context_,
851 options_trianglestrip);
852 pipelines_->srgb_to_linear_filter.CreateDefault(*context_,
853 options_trianglestrip);
854 pipelines_->yuv_to_rgb_filter.CreateDefault(*context_, options_trianglestrip);
856#if defined(IMPELLER_ENABLE_OPENGLES)
858#if !defined(FML_OS_MACOSX)
860 pipelines_->tiled_texture_external.CreateDefault(*context_, options);
861 pipelines_->tiled_texture_uv_external.CreateDefault(*context_, options);
863 pipelines_->texture_downsample_gles.CreateDefault(*context_,
864 options_trianglestrip);
869 InitializeCommonlyUsedShadersIfNeeded();