27 tile_mode_ = tile_mode;
31 colors_ = std::move(colors);
35 stops_ = std::move(stops);
50 for (
auto color : colors_) {
51 if (!color.IsOpaque()) {
62 return RenderSSBO(renderer, entity, pass);
64 return RenderTexture(renderer, entity, pass);
67 bool RadialGradientContents::RenderSSBO(
const ContentContext& renderer,
73 VS::FrameInfo frame_info;
80 return ColorSourceContents::DrawGeometry<VS>(
81 renderer, entity, pass, pipeline_callback, frame_info,
82 [
this, &renderer](RenderPass& pass) {
83 FS::FragInfo frag_info;
84 frag_info.center = center_;
85 frag_info.radius = radius_;
86 frag_info.tile_mode =
static_cast<Scalar>(tile_mode_);
87 frag_info.decal_border_color = decal_border_color_;
93 frag_info.colors_length = colors.size();
95 host_buffer.Emplace(colors.data(), colors.size() *
sizeof(StopData),
98 pass.SetCommandLabel(
"RadialGradientSSBOFill");
101 FS::BindColorData(pass, color_buffer);
107 bool RadialGradientContents::RenderTexture(
const ContentContext& renderer,
108 const Entity& entity,
109 RenderPass& pass)
const {
114 auto gradient_texture =
116 if (gradient_texture ==
nullptr) {
120 VS::FrameInfo frame_info;
124 [&renderer](ContentContextOptions options) {
125 return renderer.GetRadialGradientFillPipeline(options);
127 return ColorSourceContents::DrawGeometry<VS>(
128 renderer, entity, pass, pipeline_callback, frame_info,
129 [
this, &renderer, &gradient_texture](RenderPass& pass) {
130 FS::FragInfo frag_info;
131 frag_info.center = center_;
132 frag_info.radius = radius_;
133 frag_info.tile_mode =
static_cast<Scalar>(tile_mode_);
134 frag_info.decal_border_color = decal_border_color_;
135 frag_info.texture_sampler_y_coord_scale =
136 gradient_texture->GetYCoordScale();
138 frag_info.half_texel =
139 Vector2(0.5 / gradient_texture->GetSize().width,
140 0.5 / gradient_texture->GetSize().height);
142 SamplerDescriptor sampler_desc;
146 pass.SetCommandLabel(
"RadialGradientFill");
149 pass, renderer.GetTransientsBuffer().EmplaceUniform(frag_info));
150 FS::BindTextureSampler(
151 pass, gradient_texture,
152 renderer.GetContext()->GetSamplerLibrary()->GetSampler(
161 for (
Color& color : colors_) {
162 color = color_filter_proc(color);
164 decal_border_color_ = color_filter_proc(decal_border_color_);