25 blur_style_ = blur_style;
29 src_color_factor_ =
false;
30 inner_blur_factor_ =
true;
31 outer_blur_factor_ =
true;
34 src_color_factor_ =
true;
35 inner_blur_factor_ =
false;
36 outer_blur_factor_ =
true;
39 src_color_factor_ =
false;
40 inner_blur_factor_ =
false;
41 outer_blur_factor_ =
true;
44 src_color_factor_ =
false;
45 inner_blur_factor_ =
true;
46 outer_blur_factor_ =
false;
51std::optional<Entity> BorderMaskBlurFilterContents::RenderFilter(
55 const Matrix& effect_transform,
57 const std::optional<Rect>& coverage_hint)
const {
58 using VS = BorderMaskBlurPipeline::VertexShader;
59 using FS = BorderMaskBlurPipeline::FragmentShader;
70 inputs[0]->GetSnapshot(
"BorderMaskBlur", renderer, entity);
71 if (!input_snapshot.has_value()) {
75 auto maybe_input_uvs = input_snapshot->GetCoverageUVs(coverage);
76 if (!maybe_input_uvs.has_value()) {
79 auto input_uvs = maybe_input_uvs.value();
86 RenderProc render_proc = [coverage, input_snapshot, input_uvs = input_uvs,
87 src_color_factor = src_color_factor_,
88 inner_blur_factor = inner_blur_factor_,
89 outer_blur_factor = outer_blur_factor_, sigma](
90 const ContentContext& renderer,
91 const Entity& entity, RenderPass& pass) ->
bool {
92 auto& data_host_buffer = renderer.GetTransientsDataBuffer();
96 std::array<VS::PerVertexData, 4> vertices = {
97 VS::PerVertexData{origin, input_uvs[0]},
98 VS::PerVertexData{{origin.x +
size.width, origin.y}, input_uvs[1]},
99 VS::PerVertexData{{origin.x, origin.y +
size.height}, input_uvs[2]},
100 VS::PerVertexData{{origin.x +
size.width, origin.y +
size.height},
107 VS::FrameInfo frame_info;
108 frame_info.mvp = entity.GetShaderTransform(pass);
109 frame_info.texture_sampler_y_coord_scale =
110 input_snapshot->texture->GetYCoordScale();
112 FS::FragInfo frag_info;
113 frag_info.sigma_uv = sigma.Abs() / input_snapshot->texture->GetSize();
114 frag_info.src_factor = src_color_factor;
115 frag_info.inner_blur_factor = inner_blur_factor;
116 frag_info.outer_blur_factor = outer_blur_factor;
118 pass.SetCommandLabel(
"Border Mask Blur Filter");
119 pass.SetPipeline(renderer.GetBorderMaskBlurPipeline(options));
122 FS::BindFragInfo(pass, data_host_buffer.EmplaceUniform(frag_info));
123 VS::BindFrameInfo(pass, data_host_buffer.EmplaceUniform(frame_info));
125 raw_ptr<const Sampler> sampler =
126 renderer.GetContext()->GetSamplerLibrary()->GetSampler({});
127 FS::BindTextureSampler(pass, input_snapshot->texture, sampler);
129 return pass.Draw().ok();
133 [coverage](
const Entity& entity) -> std::optional<Rect> {
140 sub_entity.SetContents(std::move(contents));
141 sub_entity.SetBlendMode(entity.GetBlendMode());
148 const Matrix& effect_transform)
const {
149 if (inputs.empty()) {
153 auto coverage = inputs[0]->GetCoverage(entity);
154 if (!coverage.has_value()) {
157 auto transform = inputs[0]->GetTransform(entity) * effect_transform;
158 auto transformed_blur_vector =
161 return coverage->
Expand(transformed_blur_vector);
165 const Matrix& effect_transform,
166 const Rect& output_limit)
const {
167 auto transformed_blur_vector =
172 return output_limit.
Expand(transformed_blur_vector);
static std::shared_ptr< Contents > Make(RenderProc render_proc, CoverageProc coverage_proc)
std::optional< Rect > GetFilterCoverage(const FilterInput::Vector &inputs, const Entity &entity, const Matrix &effect_transform) const override
Internal utility method for |GetLocalCoverage| that computes the output coverage of this filter acros...
void SetBlurStyle(BlurStyle blur_style)
BorderMaskBlurFilterContents()
std::optional< Rect > GetFilterSourceCoverage(const Matrix &effect_transform, const Rect &output_limit) const override
Internal utility method for |GetSourceCoverage| that computes the inverse effect of this transform on...
void SetSigma(Sigma sigma_x, Sigma sigma_y)
~BorderMaskBlurFilterContents() override
std::function< std::optional< Rect >(const Entity &entity)> CoverageProc
std::function< bool(const ContentContext &renderer, const Entity &entity, RenderPass &pass)> RenderProc
@ kNormal
Blurred inside and outside.
@ kOuter
Nothing inside, blurred outside.
@ kInner
Blurred inside, nothing outside.
@ kSolid
Solid inside, blurred outside.
it will be possible to load the file into Perfetto s trace viewer use test Running tests that layout and measure text will not yield consistent results across various platforms Enabling this option will make font resolution default to the Ahem test font on all 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
LinePipeline::FragmentShader FS
VertexBuffer CreateVertexBuffer(std::array< VertexType, size > input, HostBuffer &data_host_buffer)
Create an index-less vertex buffer from a fixed size array.
LinePipeline::VertexShader VS
ContentContextOptions OptionsFromPassAndEntity(const RenderPass &pass, const Entity &entity)
A 4x4 matrix using column-major storage.
constexpr Vector4 TransformDirection(const Vector4 &v) const
For convolution filters, the "radius" is the size of the convolution kernel to use on the local space...
In filters that use Gaussian distributions, "sigma" is a size of one standard deviation in terms of t...
constexpr TRect TransformBounds(const Matrix &transform) const
Creates a new bounding box that contains this transformed rectangle.
constexpr TSize< Type > GetSize() const
Returns the size of the rectangle which may be negative in either width or height and may have been c...
constexpr TRect< T > Expand(T left, T top, T right, T bottom) const
Returns a rectangle with expanded edges. Negative expansion results in shrinking.
constexpr TPoint< Type > GetOrigin() const
Returns the upper left corner of the rectangle as specified by the left/top or x/y values when it was...