Setup default clip pipeline.
176 : context_(std::move(context)),
178 std::make_shared<LazyGlyphAtlas>(std::move(typographer_context))),
179 tessellator_(std::make_shared<Tessellator>()),
180 #if IMPELLER_ENABLE_3D
181 scene_context_(std::make_shared<scene::SceneContext>(context_)),
182 #endif // IMPELLER_ENABLE_3D
183 render_target_cache_(render_target_allocator ==
nullptr
184 ? std::make_shared<RenderTargetCache>(
185 context_->GetResourceAllocator())
186 : std::move(render_target_allocator)) {
187 if (!context_ || !context_->IsValid()) {
190 default_options_ = ContentContextOptions{
192 .color_attachment_pixel_format =
193 context_->GetCapabilities()->GetDefaultColorFormat()};
195 #ifdef IMPELLER_DEBUG
196 checkerboard_pipelines_[default_options_] =
197 CreateDefaultPipeline<CheckerboardPipeline>(*context_);
198 #endif // IMPELLER_DEBUG
200 solid_fill_pipelines_[default_options_] =
201 CreateDefaultPipeline<SolidFillPipeline>(*context_);
203 if (context_->GetCapabilities()->SupportsSSBO()) {
204 linear_gradient_ssbo_fill_pipelines_[default_options_] =
205 CreateDefaultPipeline<LinearGradientSSBOFillPipeline>(*context_);
206 radial_gradient_ssbo_fill_pipelines_[default_options_] =
207 CreateDefaultPipeline<RadialGradientSSBOFillPipeline>(*context_);
208 conical_gradient_ssbo_fill_pipelines_[default_options_] =
209 CreateDefaultPipeline<ConicalGradientSSBOFillPipeline>(*context_);
210 sweep_gradient_ssbo_fill_pipelines_[default_options_] =
211 CreateDefaultPipeline<SweepGradientSSBOFillPipeline>(*context_);
213 linear_gradient_fill_pipelines_[default_options_] =
214 CreateDefaultPipeline<LinearGradientFillPipeline>(*context_);
215 radial_gradient_fill_pipelines_[default_options_] =
216 CreateDefaultPipeline<RadialGradientFillPipeline>(*context_);
217 conical_gradient_fill_pipelines_[default_options_] =
218 CreateDefaultPipeline<ConicalGradientFillPipeline>(*context_);
219 sweep_gradient_fill_pipelines_[default_options_] =
220 CreateDefaultPipeline<SweepGradientFillPipeline>(*context_);
223 if (context_->GetCapabilities()->SupportsFramebufferFetch()) {
224 framebuffer_blend_color_pipelines_[default_options_] =
225 CreateDefaultPipeline<FramebufferBlendColorPipeline>(*context_);
226 framebuffer_blend_colorburn_pipelines_[default_options_] =
227 CreateDefaultPipeline<FramebufferBlendColorBurnPipeline>(*context_);
228 framebuffer_blend_colordodge_pipelines_[default_options_] =
229 CreateDefaultPipeline<FramebufferBlendColorDodgePipeline>(*context_);
230 framebuffer_blend_darken_pipelines_[default_options_] =
231 CreateDefaultPipeline<FramebufferBlendDarkenPipeline>(*context_);
232 framebuffer_blend_difference_pipelines_[default_options_] =
233 CreateDefaultPipeline<FramebufferBlendDifferencePipeline>(*context_);
234 framebuffer_blend_exclusion_pipelines_[default_options_] =
235 CreateDefaultPipeline<FramebufferBlendExclusionPipeline>(*context_);
236 framebuffer_blend_hardlight_pipelines_[default_options_] =
237 CreateDefaultPipeline<FramebufferBlendHardLightPipeline>(*context_);
238 framebuffer_blend_hue_pipelines_[default_options_] =
239 CreateDefaultPipeline<FramebufferBlendHuePipeline>(*context_);
240 framebuffer_blend_lighten_pipelines_[default_options_] =
241 CreateDefaultPipeline<FramebufferBlendLightenPipeline>(*context_);
242 framebuffer_blend_luminosity_pipelines_[default_options_] =
243 CreateDefaultPipeline<FramebufferBlendLuminosityPipeline>(*context_);
244 framebuffer_blend_multiply_pipelines_[default_options_] =
245 CreateDefaultPipeline<FramebufferBlendMultiplyPipeline>(*context_);
246 framebuffer_blend_overlay_pipelines_[default_options_] =
247 CreateDefaultPipeline<FramebufferBlendOverlayPipeline>(*context_);
248 framebuffer_blend_saturation_pipelines_[default_options_] =
249 CreateDefaultPipeline<FramebufferBlendSaturationPipeline>(*context_);
250 framebuffer_blend_screen_pipelines_[default_options_] =
251 CreateDefaultPipeline<FramebufferBlendScreenPipeline>(*context_);
252 framebuffer_blend_softlight_pipelines_[default_options_] =
253 CreateDefaultPipeline<FramebufferBlendSoftLightPipeline>(*context_);
256 blend_color_pipelines_[default_options_] =
257 CreateDefaultPipeline<BlendColorPipeline>(*context_);
258 blend_colorburn_pipelines_[default_options_] =
259 CreateDefaultPipeline<BlendColorBurnPipeline>(*context_);
260 blend_colordodge_pipelines_[default_options_] =
261 CreateDefaultPipeline<BlendColorDodgePipeline>(*context_);
262 blend_darken_pipelines_[default_options_] =
263 CreateDefaultPipeline<BlendDarkenPipeline>(*context_);
264 blend_difference_pipelines_[default_options_] =
265 CreateDefaultPipeline<BlendDifferencePipeline>(*context_);
266 blend_exclusion_pipelines_[default_options_] =
267 CreateDefaultPipeline<BlendExclusionPipeline>(*context_);
268 blend_hardlight_pipelines_[default_options_] =
269 CreateDefaultPipeline<BlendHardLightPipeline>(*context_);
270 blend_hue_pipelines_[default_options_] =
271 CreateDefaultPipeline<BlendHuePipeline>(*context_);
272 blend_lighten_pipelines_[default_options_] =
273 CreateDefaultPipeline<BlendLightenPipeline>(*context_);
274 blend_luminosity_pipelines_[default_options_] =
275 CreateDefaultPipeline<BlendLuminosityPipeline>(*context_);
276 blend_multiply_pipelines_[default_options_] =
277 CreateDefaultPipeline<BlendMultiplyPipeline>(*context_);
278 blend_overlay_pipelines_[default_options_] =
279 CreateDefaultPipeline<BlendOverlayPipeline>(*context_);
280 blend_saturation_pipelines_[default_options_] =
281 CreateDefaultPipeline<BlendSaturationPipeline>(*context_);
282 blend_screen_pipelines_[default_options_] =
283 CreateDefaultPipeline<BlendScreenPipeline>(*context_);
284 blend_softlight_pipelines_[default_options_] =
285 CreateDefaultPipeline<BlendSoftLightPipeline>(*context_);
287 rrect_blur_pipelines_[default_options_] =
288 CreateDefaultPipeline<RRectBlurPipeline>(*context_);
289 texture_blend_pipelines_[default_options_] =
290 CreateDefaultPipeline<BlendPipeline>(*context_);
291 texture_pipelines_[default_options_] =
292 CreateDefaultPipeline<TexturePipeline>(*context_);
293 position_uv_pipelines_[default_options_] =
294 CreateDefaultPipeline<PositionUVPipeline>(*context_);
295 tiled_texture_pipelines_[default_options_] =
296 CreateDefaultPipeline<TiledTexturePipeline>(*context_);
297 gaussian_blur_noalpha_decal_pipelines_[default_options_] =
298 CreateDefaultPipeline<GaussianBlurDecalPipeline>(*context_);
299 gaussian_blur_noalpha_nodecal_pipelines_[default_options_] =
300 CreateDefaultPipeline<GaussianBlurPipeline>(*context_);
301 border_mask_blur_pipelines_[default_options_] =
302 CreateDefaultPipeline<BorderMaskBlurPipeline>(*context_);
303 morphology_filter_pipelines_[default_options_] =
304 CreateDefaultPipeline<MorphologyFilterPipeline>(*context_);
305 color_matrix_color_filter_pipelines_[default_options_] =
306 CreateDefaultPipeline<ColorMatrixColorFilterPipeline>(*context_);
307 linear_to_srgb_filter_pipelines_[default_options_] =
308 CreateDefaultPipeline<LinearToSrgbFilterPipeline>(*context_);
309 srgb_to_linear_filter_pipelines_[default_options_] =
310 CreateDefaultPipeline<SrgbToLinearFilterPipeline>(*context_);
311 glyph_atlas_pipelines_[default_options_] =
312 CreateDefaultPipeline<GlyphAtlasPipeline>(*context_);
313 glyph_atlas_color_pipelines_[default_options_] =
314 CreateDefaultPipeline<GlyphAtlasColorPipeline>(*context_);
315 geometry_color_pipelines_[default_options_] =
316 CreateDefaultPipeline<GeometryColorPipeline>(*context_);
317 yuv_to_rgb_filter_pipelines_[default_options_] =
318 CreateDefaultPipeline<YUVToRGBFilterPipeline>(*context_);
319 porter_duff_blend_pipelines_[default_options_] =
320 CreateDefaultPipeline<PorterDuffBlendPipeline>(*context_);
322 #ifdef IMPELLER_ENABLE_OPENGLES
324 texture_external_pipelines_[default_options_] =
325 CreateDefaultPipeline<TextureExternalPipeline>(*context_);
327 #endif // IMPELLER_ENABLE_OPENGLES
328 if (context_->GetCapabilities()->SupportsCompute()) {
331 point_field_compute_pipelines_ =
332 context_->GetPipelineLibrary()->GetPipeline(pipeline_desc).Get();
334 auto uv_pipeline_desc =
336 uv_compute_pipelines_ =
337 context_->GetPipelineLibrary()->GetPipeline(uv_pipeline_desc).Get();
342 auto clip_pipeline_descriptor =
344 if (!clip_pipeline_descriptor.has_value()) {
347 ContentContextOptions{
349 .color_attachment_pixel_format =
350 context_->GetCapabilities()->GetDefaultColorFormat()}
351 .ApplyToPipelineDescriptor(*clip_pipeline_descriptor);
353 auto clip_color_attachments =
354 clip_pipeline_descriptor->GetColorAttachmentDescriptors();
355 for (
auto& color_attachment : clip_color_attachments) {
356 color_attachment.second.write_mask =
359 clip_pipeline_descriptor->SetColorAttachmentDescriptors(
360 std::move(clip_color_attachments));
361 clip_pipelines_[default_options_] =
362 std::make_unique<ClipPipeline>(*context_, clip_pipeline_descriptor);