240 std::shared_ptr<Context> context,
241 std::shared_ptr<TypographerContext> typographer_context,
242 std::shared_ptr<RenderTargetAllocator> render_target_allocator)
243 : context_(
std::move(context)),
247#
if IMPELLER_ENABLE_3D
248 scene_context_(
std::make_shared<scene::SceneContext>(context_)),
250 render_target_cache_(render_target_allocator == nullptr
252 context_->GetResourceAllocator())
253 :
std::move(render_target_allocator)),
255 if (!context_ || !context_->IsValid()) {
263 desc.size =
ISize{1, 1};
264 empty_texture_ =
GetContext()->GetResourceAllocator()->CreateTexture(desc);
266 if (!empty_texture_->SetContents(data.data(), 4)) {
273 .color_attachment_pixel_format =
274 context_->GetCapabilities()->GetDefaultColorFormat()};
278 .color_attachment_pixel_format =
279 context_->GetCapabilities()->GetDefaultColorFormat()};
280 const auto supports_decal =
static_cast<Scalar>(
281 context_->GetCapabilities()->SupportsDecalSamplerAddressMode());
284 checkerboard_pipelines_.CreateDefault(*context_,
options);
288 solid_fill_pipelines_.CreateDefault(*context_,
options);
289 texture_pipelines_.CreateDefault(*context_,
options);
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);
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);
305 auto clip_pipeline_descriptor =
306 ClipPipeline::Builder::MakeDefaultPipelineDescriptor(*context_);
307 if (!clip_pipeline_descriptor.has_value()) {
312 .color_attachment_pixel_format =
313 context_->GetCapabilities()->GetDefaultColorFormat()}
314 .ApplyToPipelineDescriptor(*clip_pipeline_descriptor);
316 auto clip_color_attachments =
317 clip_pipeline_descriptor->GetColorAttachmentDescriptors();
318 for (
auto& color_attachment : clip_color_attachments) {
321 clip_pipeline_descriptor->SetColorAttachmentDescriptors(
322 std::move(clip_color_attachments));
323 clip_pipelines_.SetDefault(
325 std::make_unique<ClipPipeline>(*context_, clip_pipeline_descriptor));
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,
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,
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,
427 border_mask_blur_pipelines_.CreateDefault(*context_, options_trianglestrip);
428 morphology_filter_pipelines_.CreateDefault(*context_, options_trianglestrip,
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,
444 vertices_uber_shader_.CreateDefault(*context_,
options, {supports_decal});
446#if defined(IMPELLER_ENABLE_OPENGLES) && !defined(FML_OS_MACOSX)
448 tiled_texture_external_pipelines_.CreateDefault(*context_,
options);
453 InitializeCommonlyUsedShadersIfNeeded();
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...