@@ -118,8 +118,13 @@ static std::optional<Entity> AdvancedBlend(
118
118
typename FS::BlendInfo blend_info;
119
119
typename VS::FrameInfo frame_info;
120
120
121
+ auto dst_sampler_descriptor = dst_snapshot->sampler_descriptor ;
122
+ if (renderer.GetDeviceCapabilities ().SupportsDecalTileMode ()) {
123
+ dst_sampler_descriptor.width_address_mode = SamplerAddressMode::kDecal ;
124
+ dst_sampler_descriptor.height_address_mode = SamplerAddressMode::kDecal ;
125
+ }
121
126
auto dst_sampler = renderer.GetContext ()->GetSamplerLibrary ()->GetSampler (
122
- dst_snapshot-> sampler_descriptor );
127
+ dst_sampler_descriptor );
123
128
FS::BindTextureSamplerDst (cmd, dst_snapshot->texture , dst_sampler);
124
129
frame_info.dst_y_coord_scale = dst_snapshot->texture ->GetYCoordScale ();
125
130
blend_info.dst_input_alpha = absorb_opacity ? dst_snapshot->opacity : 1.0 ;
@@ -132,8 +137,13 @@ static std::optional<Entity> AdvancedBlend(
132
137
// binding.
133
138
FS::BindTextureSamplerSrc (cmd, dst_snapshot->texture , dst_sampler);
134
139
} else {
140
+ auto src_sampler_descriptor = src_snapshot->sampler_descriptor ;
141
+ if (renderer.GetDeviceCapabilities ().SupportsDecalTileMode ()) {
142
+ src_sampler_descriptor.width_address_mode = SamplerAddressMode::kDecal ;
143
+ src_sampler_descriptor.height_address_mode = SamplerAddressMode::kDecal ;
144
+ }
135
145
auto src_sampler = renderer.GetContext ()->GetSamplerLibrary ()->GetSampler (
136
- src_snapshot-> sampler_descriptor );
146
+ src_sampler_descriptor );
137
147
blend_info.color_factor = 0 ;
138
148
FS::BindTextureSamplerSrc (cmd, src_snapshot->texture , src_sampler);
139
149
frame_info.src_y_coord_scale = src_snapshot->texture ->GetYCoordScale ();
@@ -220,9 +230,10 @@ static std::optional<Entity> PipelineBlend(
220
230
frame_info.mvp = Matrix::MakeOrthographic (pass.GetRenderTargetSize ()) *
221
231
Matrix::MakeTranslation (-coverage.origin ) *
222
232
input->transform ;
223
- FS::FragInfo frag_info;
224
- frag_info.texture_sampler_y_coord_scale =
233
+ frame_info.texture_sampler_y_coord_scale =
225
234
input->texture ->GetYCoordScale ();
235
+
236
+ FS::FragInfo frag_info;
226
237
frag_info.input_alpha = absorb_opacity ? input->opacity : 1.0 ;
227
238
FS::BindFragInfo (cmd, host_buffer.EmplaceUniform (frag_info));
228
239
VS::BindFrameInfo (cmd, host_buffer.EmplaceUniform (frame_info));
@@ -257,10 +268,8 @@ static std::optional<Entity> PipelineBlend(
257
268
258
269
if (foreground_color.has_value ()) {
259
270
auto contents = std::make_shared<SolidColorContents>();
260
- contents->SetGeometry (Geometry::MakeFillPath (
261
- PathBuilder{}
262
- .AddRect (Rect::MakeSize (pass.GetRenderTargetSize ()))
263
- .TakePath ()));
271
+ contents->SetGeometry (
272
+ Geometry::MakeRect (Rect::MakeSize (pass.GetRenderTargetSize ())));
264
273
contents->SetColor (foreground_color.value ());
265
274
266
275
Entity foreground_entity;
0 commit comments