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);
110 FS::FragInfo frag_info;
111 frag_info.sigma_uv = sigma.Abs() / input_snapshot->texture->GetSize();
112 frag_info.src_factor = src_color_factor;
113 frag_info.inner_blur_factor = inner_blur_factor;
114 frag_info.outer_blur_factor = outer_blur_factor;
116 pass.SetCommandLabel(
"Border Mask Blur Filter");
117 pass.SetPipeline(renderer.GetBorderMaskBlurPipeline(options));
120 FS::BindFragInfo(pass, data_host_buffer.EmplaceUniform(frag_info));
121 VS::BindFrameInfo(pass, data_host_buffer.EmplaceUniform(frame_info));
123 raw_ptr<const Sampler> sampler =
124 renderer.GetContext()->GetSamplerLibrary()->GetSampler({});
125 FS::BindTextureSampler(pass, input_snapshot->texture, sampler);
127 return pass.Draw().ok();
131 [coverage](
const Entity& entity) -> std::optional<Rect> {
138 sub_entity.SetContents(std::move(contents));
139 sub_entity.SetBlendMode(entity.GetBlendMode());
146 const Matrix& effect_transform)
const {
147 if (inputs.empty()) {
151 auto coverage = inputs[0]->GetCoverage(entity);
152 if (!coverage.has_value()) {
155 auto transform = inputs[0]->GetTransform(entity) * effect_transform;
156 auto transformed_blur_vector =
159 return coverage->
Expand(transformed_blur_vector);
163 const Matrix& effect_transform,
164 const Rect& output_limit)
const {
165 auto transformed_blur_vector =
170 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...