Setup default clip pipeline.
243 : context_(std::move(context)),
244 lazy_glyph_atlas_(
245 std::make_shared<LazyGlyphAtlas>(std::move(typographer_context))),
246 tessellator_(std::make_shared<Tessellator>()),
247#if IMPELLER_ENABLE_3D
248 scene_context_(std::make_shared<scene::SceneContext>(context_)),
249#endif
250 render_target_cache_(render_target_allocator == nullptr
251 ? std::make_shared<RenderTargetCache>(
252 context_->GetResourceAllocator())
253 :
std::move(render_target_allocator)),
254 host_buffer_(HostBuffer::
Create(context_->GetResourceAllocator())) {
255 if (!context_ || !context_->IsValid()) {
256 return;
257 }
258
259 {
260 TextureDescriptor
desc;
264 empty_texture_ =
GetContext()->GetResourceAllocator()->CreateTexture(desc);
266 if (!empty_texture_->SetContents(
data.data(), 4)) {
268 }
269 }
270
271 auto options = ContentContextOptions{
273 .color_attachment_pixel_format =
274 context_->GetCapabilities()->GetDefaultColorFormat()};
275 auto options_trianglestrip = ContentContextOptions{
278 .color_attachment_pixel_format =
279 context_->GetCapabilities()->GetDefaultColorFormat()};
280 const auto supports_decal =
static_cast<Scalar>(
281 context_->GetCapabilities()->SupportsDecalSamplerAddressMode());
282
283#ifdef IMPELLER_DEBUG
284 checkerboard_pipelines_.CreateDefault(*context_,
options);
285#endif
286
287 {
288 solid_fill_pipelines_.CreateDefault(*context_,
options);
289 texture_pipelines_.CreateDefault(*context_,
options);
290
291 if (context_->GetCapabilities()->SupportsSSBO()) {
292 linear_gradient_ssbo_fill_pipelines_.CreateDefault(*context_,
options);
293 radial_gradient_ssbo_fill_pipelines_.CreateDefault(*context_,
options);
294 conical_gradient_ssbo_fill_pipelines_.CreateDefault(*context_,
options);
295 sweep_gradient_ssbo_fill_pipelines_.CreateDefault(*context_,
options);
296 } else {
297 linear_gradient_fill_pipelines_.CreateDefault(*context_,
options);
298 radial_gradient_fill_pipelines_.CreateDefault(*context_,
options);
299 conical_gradient_fill_pipelines_.CreateDefault(*context_,
options);
300 sweep_gradient_fill_pipelines_.CreateDefault(*context_,
options);
301 }
302
303
304
305 auto clip_pipeline_descriptor =
306 ClipPipeline::Builder::MakeDefaultPipelineDescriptor(*context_);
307 if (!clip_pipeline_descriptor.has_value()) {
308 return;
309 }
310 ContentContextOptions{
312 .color_attachment_pixel_format =
313 context_->GetCapabilities()->GetDefaultColorFormat()}
314 .ApplyToPipelineDescriptor(*clip_pipeline_descriptor);
315
316 auto clip_color_attachments =
317 clip_pipeline_descriptor->GetColorAttachmentDescriptors();
318 for (auto& color_attachment : clip_color_attachments) {
320 }
321 clip_pipeline_descriptor->SetColorAttachmentDescriptors(
322 std::move(clip_color_attachments));
323 clip_pipelines_.SetDefault(
325 std::make_unique<ClipPipeline>(*context_, clip_pipeline_descriptor));
326 }
327
328 if (context_->GetCapabilities()->SupportsFramebufferFetch()) {
329 framebuffer_blend_color_pipelines_.CreateDefault(
330 *context_, options_trianglestrip,
332 framebuffer_blend_colorburn_pipelines_.CreateDefault(
333 *context_, options_trianglestrip,
335 framebuffer_blend_colordodge_pipelines_.CreateDefault(
336 *context_, options_trianglestrip,
338 framebuffer_blend_darken_pipelines_.CreateDefault(
339 *context_, options_trianglestrip,
341 framebuffer_blend_difference_pipelines_.CreateDefault(
342 *context_, options_trianglestrip,
344 framebuffer_blend_exclusion_pipelines_.CreateDefault(
345 *context_, options_trianglestrip,
347 framebuffer_blend_hardlight_pipelines_.CreateDefault(
348 *context_, options_trianglestrip,
350 framebuffer_blend_hue_pipelines_.CreateDefault(
351 *context_, options_trianglestrip,
353 framebuffer_blend_lighten_pipelines_.CreateDefault(
354 *context_, options_trianglestrip,
356 framebuffer_blend_luminosity_pipelines_.CreateDefault(
357 *context_, options_trianglestrip,
359 framebuffer_blend_multiply_pipelines_.CreateDefault(
360 *context_, options_trianglestrip,
362 framebuffer_blend_overlay_pipelines_.CreateDefault(
363 *context_, options_trianglestrip,
365 framebuffer_blend_saturation_pipelines_.CreateDefault(
366 *context_, options_trianglestrip,
368 framebuffer_blend_screen_pipelines_.CreateDefault(
369 *context_, options_trianglestrip,
371 framebuffer_blend_softlight_pipelines_.CreateDefault(
372 *context_, options_trianglestrip,
374 } else {
375 blend_color_pipelines_.CreateDefault(
376 *context_, options_trianglestrip,
378 blend_colorburn_pipelines_.CreateDefault(
379 *context_, options_trianglestrip,
381 blend_colordodge_pipelines_.CreateDefault(
382 *context_, options_trianglestrip,
384 blend_darken_pipelines_.CreateDefault(
385 *context_, options_trianglestrip,
387 blend_difference_pipelines_.CreateDefault(
388 *context_, options_trianglestrip,
390 blend_exclusion_pipelines_.CreateDefault(
391 *context_, options_trianglestrip,
393 blend_hardlight_pipelines_.CreateDefault(
394 *context_, options_trianglestrip,
396 blend_hue_pipelines_.CreateDefault(
397 *context_, options_trianglestrip,
399 blend_lighten_pipelines_.CreateDefault(
400 *context_, options_trianglestrip,
402 blend_luminosity_pipelines_.CreateDefault(
403 *context_, options_trianglestrip,
405 blend_multiply_pipelines_.CreateDefault(
406 *context_, options_trianglestrip,
408 blend_overlay_pipelines_.CreateDefault(
409 *context_, options_trianglestrip,
411 blend_saturation_pipelines_.CreateDefault(
412 *context_, options_trianglestrip,
414 blend_screen_pipelines_.CreateDefault(
415 *context_, options_trianglestrip,
417 blend_softlight_pipelines_.CreateDefault(
418 *context_, options_trianglestrip,
420 }
421
422 rrect_blur_pipelines_.CreateDefault(*context_, options_trianglestrip);
423 texture_strict_src_pipelines_.CreateDefault(*context_,
options);
424 tiled_texture_pipelines_.CreateDefault(*context_,
options, {supports_decal});
425 gaussian_blur_pipelines_.CreateDefault(*context_, options_trianglestrip,
426 {supports_decal});
427 border_mask_blur_pipelines_.CreateDefault(*context_, options_trianglestrip);
428 morphology_filter_pipelines_.CreateDefault(*context_, options_trianglestrip,
429 {supports_decal});
430 color_matrix_color_filter_pipelines_.CreateDefault(*context_,
431 options_trianglestrip);
432 linear_to_srgb_filter_pipelines_.CreateDefault(*context_,
433 options_trianglestrip);
434 srgb_to_linear_filter_pipelines_.CreateDefault(*context_,
435 options_trianglestrip);
436 glyph_atlas_pipelines_.CreateDefault(
439 GetContext()->GetCapabilities()->GetDefaultGlyphAtlasFormat() ==
441 yuv_to_rgb_filter_pipelines_.CreateDefault(*context_, options_trianglestrip);
442 porter_duff_blend_pipelines_.CreateDefault(*context_, options_trianglestrip,
443 {supports_decal});
444 vertices_uber_shader_.CreateDefault(*context_,
options, {supports_decal});
445
446#if defined(IMPELLER_ENABLE_OPENGLES) && !defined(FML_OS_MACOSX)
448 tiled_texture_external_pipelines_.CreateDefault(*context_,
options);
449 }
450#endif
451
452 is_valid_ = true;
453 InitializeCommonlyUsedShadersIfNeeded();
454}
static sk_sp< Effect > Create()
std::shared_ptr< Context > GetContext() const
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot data
constexpr std::array< uint8_t, 4 > ToR8G8B8A8() const
Convert to R8G8B8A8 representation.
static constexpr Color BlackTransparent()