7 #include "flutter/fml/logging.h"
29 scale_ = 1 / (t1 - t0);
33 colors_ = std::move(colors);
37 stops_ = std::move(stops);
41 tile_mode_ = tile_mode;
56 for (
auto color : colors_) {
57 if (!
color.IsOpaque()) {
68 return RenderSSBO(renderer, entity, pass);
70 return RenderTexture(renderer, entity, pass);
73 bool SweepGradientContents::RenderSSBO(
const ContentContext& renderer,
79 VS::FrameInfo frame_info;
81 VS::BindFrameInfo(pass,
88 return ColorSourceContents::DrawGeometry<VS>(
89 renderer, entity, pass, pipeline_callback, frame_info,
90 [
this, &renderer, &entity](RenderPass& pass) {
91 FS::FragInfo frag_info;
92 frag_info.center = center_;
93 frag_info.bias = bias_;
94 frag_info.scale = scale_;
95 frag_info.tile_mode =
static_cast<Scalar>(tile_mode_);
96 frag_info.decal_border_color = decal_border_color_;
104 frag_info.colors_length = colors.size();
106 host_buffer.Emplace(colors.data(), colors.size() *
sizeof(StopData),
109 pass.SetCommandLabel(
"SweepGradientSSBOFill");
113 FS::BindColorData(pass, color_buffer);
119 bool SweepGradientContents::RenderTexture(
const ContentContext& renderer,
120 const Entity& entity,
121 RenderPass& pass)
const {
126 auto gradient_texture =
128 if (gradient_texture ==
nullptr) {
132 VS::FrameInfo frame_info;
136 [&renderer](ContentContextOptions options) {
137 return renderer.GetSweepGradientFillPipeline(options);
139 return ColorSourceContents::DrawGeometry<VS>(
140 renderer, entity, pass, pipeline_callback, frame_info,
141 [
this, &renderer, &gradient_texture, &entity](RenderPass& pass) {
142 FS::FragInfo frag_info;
143 frag_info.center = center_;
144 frag_info.bias = bias_;
145 frag_info.scale = scale_;
146 frag_info.texture_sampler_y_coord_scale =
147 gradient_texture->GetYCoordScale();
148 frag_info.tile_mode =
static_cast<Scalar>(tile_mode_);
149 frag_info.decal_border_color = decal_border_color_;
153 frag_info.half_texel =
154 Vector2(0.5 / gradient_texture->GetSize().width,
155 0.5 / gradient_texture->GetSize().height);
157 SamplerDescriptor sampler_desc;
161 pass.SetCommandLabel(
"SweepGradientFill");
164 pass, renderer.GetTransientsBuffer().EmplaceUniform(frag_info));
165 FS::BindTextureSampler(
166 pass, gradient_texture,
167 renderer.GetContext()->GetSamplerLibrary()->GetSampler(
179 decal_border_color_ = color_filter_proc(decal_border_color_);