17 blend_mode_ = blend_mode;
21 std::shared_ptr<Contents> child_contents) {
22 child_contents_ = std::move(child_contents);
26std::optional<Rect> FramebufferBlendContents::GetCoverage(
27 const Entity& entity)
const {
28 return child_contents_->GetCoverage(entity);
31bool FramebufferBlendContents::Render(
const ContentContext&
renderer,
33 RenderPass& pass)
const {
34 if (!
renderer.GetDeviceCapabilities().SupportsFramebufferFetch()) {
41 auto& host_buffer =
renderer.GetTransientsBuffer();
43 auto src_snapshot = child_contents_->RenderToSnapshot(
50 "FramebufferBlendContents Snapshot");
52 if (!src_snapshot.has_value()) {
56 auto size = src_snapshot->texture->GetSize();
57 VertexBufferBuilder<VS::PerVertexData> vtx_builder;
58 vtx_builder.AddVertices({
69 pass.SetCommandLabel(
"Framebuffer Advanced Blend Filter");
70 pass.SetVertexBuffer(vtx_builder.CreateVertexBuffer(host_buffer));
72 switch (blend_mode_) {
86 pass.SetPipeline(
renderer.GetFramebufferBlendColorDodgePipeline(
options));
89 pass.SetPipeline(
renderer.GetFramebufferBlendColorBurnPipeline(
options));
92 pass.SetPipeline(
renderer.GetFramebufferBlendHardLightPipeline(
options));
95 pass.SetPipeline(
renderer.GetFramebufferBlendSoftLightPipeline(
options));
98 pass.SetPipeline(
renderer.GetFramebufferBlendDifferencePipeline(
options));
101 pass.SetPipeline(
renderer.GetFramebufferBlendExclusionPipeline(
options));
104 pass.SetPipeline(
renderer.GetFramebufferBlendMultiplyPipeline(
options));
110 pass.SetPipeline(
renderer.GetFramebufferBlendSaturationPipeline(
options));
116 pass.SetPipeline(
renderer.GetFramebufferBlendLuminosityPipeline(
options));
122 VS::FrameInfo frame_info;
123 FS::FragInfo frag_info;
125 auto src_sampler_descriptor = src_snapshot->sampler_descriptor;
126 if (
renderer.GetDeviceCapabilities().SupportsDecalSamplerAddressMode()) {
130 const std::unique_ptr<const Sampler>& src_sampler =
131 renderer.GetContext()->GetSamplerLibrary()->GetSampler(
132 src_sampler_descriptor);
133 FS::BindTextureSamplerSrc(pass, src_snapshot->texture, src_sampler);
136 src_snapshot->transform);
137 frame_info.src_y_coord_scale = src_snapshot->texture->GetYCoordScale();
138 VS::BindFrameInfo(pass, host_buffer.EmplaceUniform(frame_info));
140 frag_info.src_input_alpha = src_snapshot->opacity;
141 FS::BindFragInfo(pass, host_buffer.EmplaceUniform(frag_info));
143 return pass.Draw().ok();
Matrix GetShaderTransform(const RenderPass &pass) const
Get the vertex shader transform used for drawing this Entity.
void SetChildContents(std::shared_ptr< Contents > child_contents)
~FramebufferBlendContents() override
void SetBlendMode(BlendMode blend_mode)
FramebufferBlendContents()
VertexShader_ VertexShader
FragmentShader_ FragmentShader
it will be possible to load the file into Perfetto s trace viewer disable asset Prevents usage of any non test fonts unless they were explicitly Loaded via prefetched default font Indicates whether the embedding started a prefetch of the default font manager before creating the engine run In non interactive keep the shell running after the Dart script has completed enable serial On low power devices with low core running concurrent GC tasks on threads can cause them to contend with the UI thread which could potentially lead to jank This option turns off all concurrent GC activities domain network JSON encoded network policy per domain This overrides the DisallowInsecureConnections switch Embedder can specify whether to allow or disallow insecure connections at a domain level old gen heap size
@ kDecal
decal sampling mode is only supported on devices that pass the Capabilities.SupportsDecalSamplerAddre...
ContentContextOptions OptionsFromPass(const RenderPass &pass)
static constexpr TRect MakeSize(const TSize< U > &size)