@@ -183,13 +183,12 @@ std::optional<Snapshot> DirectionalGaussianBlurFilterContents::RenderFilter(
183183
184184 VS::FrameInfo frame_info;
185185 frame_info.mvp = Matrix::MakeOrthographic (ISize (1 , 1 ));
186-
187- FS::FragInfo frag_info;
188- frag_info.texture_sampler_y_coord_scale =
186+ frame_info.texture_sampler_y_coord_scale =
189187 input_snapshot->texture ->GetYCoordScale ();
190- frag_info .alpha_mask_sampler_y_coord_scale =
188+ frame_info .alpha_mask_sampler_y_coord_scale =
191189 source_snapshot->texture ->GetYCoordScale ();
192190
191+ FS::FragInfo frag_info;
193192 auto r = Radius{transformed_blur_radius_length};
194193 frag_info.blur_sigma = Sigma{r}.sigma ;
195194 frag_info.blur_radius = r.radius ;
@@ -198,7 +197,6 @@ std::optional<Snapshot> DirectionalGaussianBlurFilterContents::RenderFilter(
198197 frag_info.blur_direction =
199198 pass_transform.Invert ().TransformDirection (Vector2 (1 , 0 )).Normalize ();
200199
201- frag_info.tile_mode = static_cast <Scalar>(tile_mode_);
202200 frag_info.src_factor = src_color_factor_;
203201 frag_info.inner_blur_factor = inner_blur_factor_;
204202 frag_info.outer_blur_factor = outer_blur_factor_;
@@ -207,19 +205,48 @@ std::optional<Snapshot> DirectionalGaussianBlurFilterContents::RenderFilter(
207205 Command cmd;
208206 cmd.label = SPrintF (" Gaussian Blur Filter (Radius=%.2f)" ,
209207 transformed_blur_radius_length);
208+ cmd.BindVertices (vtx_buffer);
209+
210210 auto options = OptionsFromPass (pass);
211211 options.blend_mode = BlendMode::kSource ;
212- cmd.pipeline = renderer.GetGaussianBlurPipeline (options);
213- cmd.BindVertices (vtx_buffer);
212+ auto input_descriptor = input_snapshot->sampler_descriptor ;
213+ auto source_descriptor = source_snapshot->sampler_descriptor ;
214+ switch (tile_mode_) {
215+ case Entity::TileMode::kDecal :
216+ cmd.pipeline = renderer.GetGaussianBlurDecalPipeline (options);
217+ break ;
218+ case Entity::TileMode::kClamp :
219+ cmd.pipeline = renderer.GetGaussianBlurPipeline (options);
220+ input_descriptor.width_address_mode = SamplerAddressMode::kClampToEdge ;
221+ input_descriptor.height_address_mode = SamplerAddressMode::kClampToEdge ;
222+ source_descriptor.width_address_mode = SamplerAddressMode::kClampToEdge ;
223+ source_descriptor.height_address_mode =
224+ SamplerAddressMode::kClampToEdge ;
225+ break ;
226+ case Entity::TileMode::kMirror :
227+ cmd.pipeline = renderer.GetGaussianBlurPipeline (options);
228+ input_descriptor.width_address_mode = SamplerAddressMode::kMirror ;
229+ input_descriptor.height_address_mode = SamplerAddressMode::kMirror ;
230+ source_descriptor.width_address_mode = SamplerAddressMode::kMirror ;
231+ source_descriptor.height_address_mode = SamplerAddressMode::kMirror ;
232+ break ;
233+ case Entity::TileMode::kRepeat :
234+ cmd.pipeline = renderer.GetGaussianBlurPipeline (options);
235+ input_descriptor.width_address_mode = SamplerAddressMode::kRepeat ;
236+ input_descriptor.height_address_mode = SamplerAddressMode::kRepeat ;
237+ source_descriptor.width_address_mode = SamplerAddressMode::kRepeat ;
238+ source_descriptor.height_address_mode = SamplerAddressMode::kRepeat ;
239+ break ;
240+ }
214241
215242 FS::BindTextureSampler (
216243 cmd, input_snapshot->texture ,
217244 renderer.GetContext ()->GetSamplerLibrary ()->GetSampler (
218- input_snapshot-> sampler_descriptor ));
245+ input_descriptor ));
219246 FS::BindAlphaMaskSampler (
220247 cmd, source_snapshot->texture ,
221248 renderer.GetContext ()->GetSamplerLibrary ()->GetSampler (
222- source_snapshot-> sampler_descriptor ));
249+ source_descriptor ));
223250 VS::BindFrameInfo (cmd, host_buffer.EmplaceUniform (frame_info));
224251 FS::BindFragInfo (cmd, host_buffer.EmplaceUniform (frag_info));
225252
@@ -281,7 +308,7 @@ std::optional<Rect> DirectionalGaussianBlurFilterContents::GetFilterCoverage(
281308
282309 auto transform = inputs[0 ]->GetTransform (entity) * effect_transform;
283310 auto transformed_blur_vector =
284- transform.TransformDirection (blur_direction_ * Radius{blur_sigma_}.radius )
311+ transform.TransformDirection (blur_direction_* Radius{blur_sigma_}.radius )
285312 .Abs ();
286313 auto extent = coverage->size + transformed_blur_vector * 2 ;
287314 return Rect (coverage->origin - transformed_blur_vector,
0 commit comments