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_;
103 frag_info.colors_length = colors.size();
105 host_buffer.Emplace(colors.data(), colors.size() *
sizeof(StopData),
108 pass.SetCommandLabel(
"SweepGradientSSBOFill");
112 FS::BindColorData(pass, color_buffer);
118 bool SweepGradientContents::RenderTexture(
const ContentContext& renderer,
119 const Entity& entity,
120 RenderPass& pass)
const {
125 auto gradient_texture =
127 if (gradient_texture ==
nullptr) {
131 VS::FrameInfo frame_info;
135 [&renderer](ContentContextOptions options) {
136 return renderer.GetSweepGradientFillPipeline(options);
138 return ColorSourceContents::DrawGeometry<VS>(
139 renderer, entity, pass, pipeline_callback, frame_info,
140 [
this, &renderer, &gradient_texture, &entity](RenderPass& pass) {
141 FS::FragInfo frag_info;
142 frag_info.center = center_;
143 frag_info.bias = bias_;
144 frag_info.scale = scale_;
145 frag_info.texture_sampler_y_coord_scale =
146 gradient_texture->GetYCoordScale();
147 frag_info.tile_mode =
static_cast<Scalar>(tile_mode_);
148 frag_info.decal_border_color = decal_border_color_;
151 frag_info.half_texel =
152 Vector2(0.5 / gradient_texture->GetSize().width,
153 0.5 / gradient_texture->GetSize().height);
155 SamplerDescriptor sampler_desc;
159 pass.SetCommandLabel(
"SweepGradientFill");
162 pass, renderer.GetTransientsBuffer().EmplaceUniform(frag_info));
163 FS::BindTextureSampler(
164 pass, gradient_texture,
165 renderer.GetContext()->GetSamplerLibrary()->GetSampler(
177 decal_border_color_ = color_filter_proc(decal_border_color_);