1313#include " impeller/base/validation.h"
1414#include " impeller/entity/advanced_blend.vert.h"
1515#include " impeller/entity/advanced_blend_colorburn.frag.h"
16+ #include " impeller/entity/advanced_blend_colordodge.frag.h"
17+ #include " impeller/entity/advanced_blend_darken.frag.h"
18+ #include " impeller/entity/advanced_blend_difference.frag.h"
19+ #include " impeller/entity/advanced_blend_exclusion.frag.h"
20+ #include " impeller/entity/advanced_blend_hardlight.frag.h"
21+ #include " impeller/entity/advanced_blend_lighten.frag.h"
22+ #include " impeller/entity/advanced_blend_multiply.frag.h"
23+ #include " impeller/entity/advanced_blend_overlay.frag.h"
1624#include " impeller/entity/advanced_blend_screen.frag.h"
25+ #include " impeller/entity/advanced_blend_softlight.frag.h"
1726#include " impeller/entity/blend.frag.h"
1827#include " impeller/entity/blend.vert.h"
1928#include " impeller/entity/border_mask_blur.frag.h"
@@ -42,10 +51,28 @@ using GradientFillPipeline =
4251using SolidFillPipeline =
4352 PipelineT<SolidFillVertexShader, SolidFillFragmentShader>;
4453using BlendPipeline = PipelineT<BlendVertexShader, BlendFragmentShader>;
54+ using BlendColorBurnPipeline =
55+ PipelineT<AdvancedBlendVertexShader, AdvancedBlendColorburnFragmentShader>;
56+ using BlendColorDodgePipeline =
57+ PipelineT<AdvancedBlendVertexShader, AdvancedBlendColordodgeFragmentShader>;
58+ using BlendDarkenPipeline =
59+ PipelineT<AdvancedBlendVertexShader, AdvancedBlendDarkenFragmentShader>;
60+ using BlendDifferencePipeline =
61+ PipelineT<AdvancedBlendVertexShader, AdvancedBlendDifferenceFragmentShader>;
62+ using BlendExclusionPipeline =
63+ PipelineT<AdvancedBlendVertexShader, AdvancedBlendExclusionFragmentShader>;
64+ using BlendHardLightPipeline =
65+ PipelineT<AdvancedBlendVertexShader, AdvancedBlendHardlightFragmentShader>;
66+ using BlendLightenPipeline =
67+ PipelineT<AdvancedBlendVertexShader, AdvancedBlendLightenFragmentShader>;
68+ using BlendMultiplyPipeline =
69+ PipelineT<AdvancedBlendVertexShader, AdvancedBlendMultiplyFragmentShader>;
70+ using BlendOverlayPipeline =
71+ PipelineT<AdvancedBlendVertexShader, AdvancedBlendOverlayFragmentShader>;
4572using BlendScreenPipeline =
4673 PipelineT<AdvancedBlendVertexShader, AdvancedBlendScreenFragmentShader>;
47- using BlendColorburnPipeline =
48- PipelineT<AdvancedBlendVertexShader, AdvancedBlendColorburnFragmentShader >;
74+ using BlendSoftLightPipeline =
75+ PipelineT<AdvancedBlendVertexShader, AdvancedBlendSoftlightFragmentShader >;
4976using TexturePipeline =
5077 PipelineT<TextureFillVertexShader, TextureFillFragmentShader>;
5178using GaussianBlurPipeline =
@@ -110,16 +137,6 @@ class ContentContext {
110137 return GetPipeline (texture_blend_pipelines_, opts);
111138 }
112139
113- std::shared_ptr<Pipeline> GetBlendScreenPipeline (
114- ContentContextOptions opts) const {
115- return GetPipeline (blend_screen_pipelines_, opts);
116- }
117-
118- std::shared_ptr<Pipeline> GetBlendColorburnPipeline (
119- ContentContextOptions opts) const {
120- return GetPipeline (blend_colorburn_pipelines_, opts);
121- }
122-
123140 std::shared_ptr<Pipeline> GetTexturePipeline (
124141 ContentContextOptions opts) const {
125142 return GetPipeline (texture_pipelines_, opts);
@@ -154,6 +171,63 @@ class ContentContext {
154171 return GetPipeline (vertices_pipelines_, opts);
155172 }
156173
174+ // Advanced blends.
175+
176+ std::shared_ptr<Pipeline> GetBlendColorBurnPipeline (
177+ ContentContextOptions opts) const {
178+ return GetPipeline (blend_colorburn_pipelines_, opts);
179+ }
180+
181+ std::shared_ptr<Pipeline> GetBlendColorDodgePipeline (
182+ ContentContextOptions opts) const {
183+ return GetPipeline (blend_colordodge_pipelines_, opts);
184+ }
185+
186+ std::shared_ptr<Pipeline> GetBlendDarkenPipeline (
187+ ContentContextOptions opts) const {
188+ return GetPipeline (blend_darken_pipelines_, opts);
189+ }
190+
191+ std::shared_ptr<Pipeline> GetBlendDifferencePipeline (
192+ ContentContextOptions opts) const {
193+ return GetPipeline (blend_difference_pipelines_, opts);
194+ }
195+
196+ std::shared_ptr<Pipeline> GetBlendExclusionPipeline (
197+ ContentContextOptions opts) const {
198+ return GetPipeline (blend_exclusion_pipelines_, opts);
199+ }
200+
201+ std::shared_ptr<Pipeline> GetBlendHardLightPipeline (
202+ ContentContextOptions opts) const {
203+ return GetPipeline (blend_hardlight_pipelines_, opts);
204+ }
205+
206+ std::shared_ptr<Pipeline> GetBlendLightenPipeline (
207+ ContentContextOptions opts) const {
208+ return GetPipeline (blend_lighten_pipelines_, opts);
209+ }
210+
211+ std::shared_ptr<Pipeline> GetBlendMultiplyPipeline (
212+ ContentContextOptions opts) const {
213+ return GetPipeline (blend_multiply_pipelines_, opts);
214+ }
215+
216+ std::shared_ptr<Pipeline> GetBlendOverlayPipeline (
217+ ContentContextOptions opts) const {
218+ return GetPipeline (blend_overlay_pipelines_, opts);
219+ }
220+
221+ std::shared_ptr<Pipeline> GetBlendScreenPipeline (
222+ ContentContextOptions opts) const {
223+ return GetPipeline (blend_screen_pipelines_, opts);
224+ }
225+
226+ std::shared_ptr<Pipeline> GetBlendSoftLightPipeline (
227+ ContentContextOptions opts) const {
228+ return GetPipeline (blend_softlight_pipelines_, opts);
229+ }
230+
157231 std::shared_ptr<Context> GetContext () const ;
158232
159233 using SubpassCallback =
@@ -179,15 +253,25 @@ class ContentContext {
179253 mutable Variants<GradientFillPipeline> gradient_fill_pipelines_;
180254 mutable Variants<SolidFillPipeline> solid_fill_pipelines_;
181255 mutable Variants<BlendPipeline> texture_blend_pipelines_;
182- mutable Variants<BlendScreenPipeline> blend_screen_pipelines_;
183- mutable Variants<BlendColorburnPipeline> blend_colorburn_pipelines_;
184256 mutable Variants<TexturePipeline> texture_pipelines_;
185257 mutable Variants<GaussianBlurPipeline> gaussian_blur_pipelines_;
186258 mutable Variants<BorderMaskBlurPipeline> border_mask_blur_pipelines_;
187259 mutable Variants<SolidStrokePipeline> solid_stroke_pipelines_;
188260 mutable Variants<ClipPipeline> clip_pipelines_;
189261 mutable Variants<GlyphAtlasPipeline> glyph_atlas_pipelines_;
190262 mutable Variants<VerticesPipeline> vertices_pipelines_;
263+ // Advanced blends.
264+ mutable Variants<BlendColorBurnPipeline> blend_colorburn_pipelines_;
265+ mutable Variants<BlendColorDodgePipeline> blend_colordodge_pipelines_;
266+ mutable Variants<BlendDarkenPipeline> blend_darken_pipelines_;
267+ mutable Variants<BlendDifferencePipeline> blend_difference_pipelines_;
268+ mutable Variants<BlendExclusionPipeline> blend_exclusion_pipelines_;
269+ mutable Variants<BlendHardLightPipeline> blend_hardlight_pipelines_;
270+ mutable Variants<BlendLightenPipeline> blend_lighten_pipelines_;
271+ mutable Variants<BlendMultiplyPipeline> blend_multiply_pipelines_;
272+ mutable Variants<BlendOverlayPipeline> blend_overlay_pipelines_;
273+ mutable Variants<BlendScreenPipeline> blend_screen_pipelines_;
274+ mutable Variants<BlendSoftLightPipeline> blend_softlight_pipelines_;
191275
192276 template <class TypedPipeline >
193277 std::shared_ptr<Pipeline> GetPipeline (Variants<TypedPipeline>& container,
0 commit comments