Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 10da1a1

Browse files
authored
Remove setSampler from FragmentShader (#37839)
1 parent 5ab29c9 commit 10da1a1

File tree

8 files changed

+11
-89
lines changed

8 files changed

+11
-89
lines changed

lib/ui/dart_ui.cc

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,6 @@ typedef CanvasPath Path;
175175
V(FragmentProgram, initFromAsset, 2) \
176176
V(ReusableFragmentShader, Dispose, 1) \
177177
V(ReusableFragmentShader, SetImageSampler, 3) \
178-
V(ReusableFragmentShader, SetSampler, 3) \
179178
V(ReusableFragmentShader, ValidateSamplers, 1) \
180179
V(Gradient, initLinear, 6) \
181180
V(Gradient, initRadial, 8) \

lib/ui/painting.dart

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4245,7 +4245,7 @@ class FragmentProgram extends NativeFieldWrapperClass1 {
42454245
/// [FragmentProgram.fragmentShader] method. The float uniforms list is
42464246
/// initialized to the size expected by the shader and is zero-filled. Uniforms
42474247
/// of float type can then be set by calling [setFloat]. Sampler uniforms are
4248-
/// set by calling [setSampler].
4248+
/// set by calling [setImageSampler].
42494249
///
42504250
/// A [FragmentShader] can be re-used, and this is an efficient way to avoid
42514251
/// allocating and re-initializing the uniform buffer and samplers. However,
@@ -4288,7 +4288,7 @@ class FragmentShader extends Shader {
42884288
/// is:
42894289
///
42904290
/// ```dart
4291-
/// void updateShader(ui.FragmentShader shader, Color color, ImageShader sampler) {
4291+
/// void updateShader(ui.FragmentShader shader, Color color, Image image) {
42924292
/// shader.setFloat(0, 23); // uScale
42934293
/// shader.setFloat(1, 114); // uMagnitude x
42944294
/// shader.setFloat(2, 83); // uMagnitude y
@@ -4300,12 +4300,12 @@ class FragmentShader extends Shader {
43004300
/// shader.setFloat(6, color.opacity); // uColor a
43014301
///
43024302
/// // initialize sampler uniform.
4303-
/// shader.setSampler(0, sampler);
4303+
/// shader.setImageSampler(0, image);
43044304
/// }
43054305
/// ```
43064306
///
43074307
/// Note how the indexes used does not count the `sampler2D` uniform. This
4308-
/// uniform will be set separately with [setSampler], with the index starting
4308+
/// uniform will be set separately with [setImageSampler], with the index starting
43094309
/// over at 0.
43104310
///
43114311
/// Any float uniforms that are left uninitialized will default to `0`.
@@ -4326,18 +4326,6 @@ class FragmentShader extends Shader {
43264326
_setImageSampler(index, image._image);
43274327
}
43284328

4329-
/// Sets the sampler uniform at [index] to [sampler].
4330-
///
4331-
/// The index provided to setSampler is the index of the sampler uniform defined
4332-
/// in the fragment program, excluding all non-sampler uniforms.
4333-
///
4334-
/// All the sampler uniforms that a shader expects must be provided or the
4335-
/// results will be undefined.
4336-
void setSampler(int index, ImageShader sampler) {
4337-
assert(!debugDisposed, 'Tried to access uniforms on a disposed Shader: $this');
4338-
_setSampler(index, sampler);
4339-
}
4340-
43414329
/// Releases the native resources held by the [FragmentShader].
43424330
///
43434331
/// After this method is called, calling methods on the shader, or attaching
@@ -4356,9 +4344,6 @@ class FragmentShader extends Shader {
43564344
@FfiNative<Void Function(Pointer<Void>, Handle, Handle)>('ReusableFragmentShader::SetImageSampler')
43574345
external void _setImageSampler(int index, _Image sampler);
43584346

4359-
@FfiNative<Void Function(Pointer<Void>, Handle, Handle)>('ReusableFragmentShader::SetSampler')
4360-
external void _setSampler(int index, ImageShader sampler);
4361-
43624347
@FfiNative<Bool Function(Pointer<Void>)>('ReusableFragmentShader::ValidateSamplers')
43634348
external bool _validateSamplers();
43644349

lib/ui/painting/fragment_shader.cc

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -84,29 +84,6 @@ void ReusableFragmentShader::SetImageSampler(Dart_Handle index_handle,
8484
uniform_floats[float_count_ + 2 * index + 1] = image->height();
8585
}
8686

87-
void ReusableFragmentShader::SetSampler(Dart_Handle index_handle,
88-
Dart_Handle sampler_handle) {
89-
uint64_t index = tonic::DartConverter<uint64_t>::FromDart(index_handle);
90-
ImageShader* sampler =
91-
tonic::DartConverter<ImageShader*>::FromDart(sampler_handle);
92-
if (index >= samplers_.size()) {
93-
Dart_ThrowException(tonic::ToDart("Sampler index out of bounds"));
94-
}
95-
96-
// ImageShaders can hold a preferred value for sampling options and
97-
// developers are encouraged to use that value or the value will be supplied
98-
// by "the environment where it is used". The environment here does not
99-
// contain a value to be used if the developer did not specify a preference
100-
// when they constructed the ImageShader, so we will use kNearest which is
101-
// the default filterQuality in a Paint object.
102-
DlImageSampling sampling = DlImageSampling::kNearestNeighbor;
103-
auto* uniform_floats =
104-
reinterpret_cast<float*>(uniform_data_->writable_data());
105-
samplers_[index] = sampler->shader(sampling);
106-
uniform_floats[float_count_ + 2 * index] = sampler->width();
107-
uniform_floats[float_count_ + 2 * index + 1] = sampler->height();
108-
}
109-
11087
std::shared_ptr<DlColorSource> ReusableFragmentShader::shader(
11188
DlImageSampling sampling) {
11289
FML_CHECK(program_);

lib/ui/painting/fragment_shader.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@ class ReusableFragmentShader : public Shader {
3636

3737
void SetImageSampler(Dart_Handle index, Dart_Handle image);
3838

39-
void SetSampler(Dart_Handle index, Dart_Handle sampler);
40-
4139
bool ValidateSamplers();
4240

4341
void Dispose();

lib/web_ui/lib/painting.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -820,8 +820,6 @@ abstract class FragmentShader implements Shader {
820820

821821
void setImageSampler(int index, Image image);
822822

823-
void setSampler(int index, ImageShader sampler);
824-
825823
@override
826824
void dispose();
827825

lib/web_ui/lib/src/engine/canvaskit/painting.dart

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -486,13 +486,6 @@ class CkFragmentShader implements ui.FragmentShader {
486486
setFloat(lastFloatIndex + 2 * index + 1, sampler.imageHeight.toDouble());
487487
}
488488

489-
@override
490-
void setSampler(int index, ui.ImageShader sampler) {
491-
samplers[index] = (sampler as CkShader).skiaObject;
492-
setFloat(lastFloatIndex + 2 * index, (sampler as CkImageShader).imageWidth.toDouble());
493-
setFloat(lastFloatIndex + 2 * index + 1, sampler.imageHeight.toDouble());
494-
}
495-
496489
@override
497490
void dispose() {
498491
assert(() {

lib/web_ui/lib/src/engine/html/painting.dart

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -307,11 +307,6 @@ class HtmlFragmentShader implements ui.FragmentShader {
307307
throw UnsupportedError('FragmentShader is not supported for the HTML renderer.');
308308
}
309309

310-
@override
311-
void setSampler(int index, ui.ImageShader sampler) {
312-
throw UnsupportedError('FragmentShader is not supported for the HTML renderer.');
313-
}
314-
315310
@override
316311
void dispose() {
317312
throw UnsupportedError('FragmentShader is not supported for the HTML renderer.');

testing/dart/fragment_shader_test.dart

Lines changed: 7 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -46,18 +46,15 @@ void main() async {
4646
'blue_green_sampler.frag.iplr',
4747
);
4848
final Image blueGreenImage = await _createBlueGreenImage();
49-
final ImageShader imageShader = ImageShader(
50-
blueGreenImage, TileMode.clamp, TileMode.clamp, _identityMatrix);
5149
final FragmentShader fragmentShader = program.fragmentShader();
5250

5351
try {
54-
fragmentShader.setSampler(1, imageShader);
52+
fragmentShader.setImageSampler(1, blueGreenImage);
5553
fail('Unreachable');
5654
} catch (e) {
5755
expect(e, contains('Sampler index out of bounds'));
5856
} finally {
5957
fragmentShader.dispose();
60-
imageShader.dispose();
6158
blueGreenImage.dispose();
6259
}
6360
});
@@ -86,11 +83,9 @@ void main() async {
8683
'blue_green_sampler.frag.iplr',
8784
);
8885
final Image blueGreenImage = await _createBlueGreenImage();
89-
final ImageShader imageShader = ImageShader(
90-
blueGreenImage, TileMode.clamp, TileMode.clamp, _identityMatrix);
9186

9287
final FragmentShader shader = program.fragmentShader()
93-
..setSampler(0, imageShader);
88+
..setImageSampler(0, blueGreenImage);
9489
shader.dispose();
9590
try {
9691
final Paint paint = Paint()..shader = shader; // ignore: unused_local_variable
@@ -100,7 +95,6 @@ void main() async {
10095
} catch (e) {
10196
expect(e.toString(), contains('Attempted to set a disposed shader'));
10297
}
103-
imageShader.dispose();
10498
blueGreenImage.dispose();
10599
});
106100

@@ -128,19 +122,17 @@ void main() async {
128122
}
129123
});
130124

131-
test('Disposed FragmentShader setSampler', () async {
125+
test('Disposed FragmentShader setImageSampler', () async {
132126
final FragmentProgram program = await FragmentProgram.fromAsset(
133127
'blue_green_sampler.frag.iplr',
134128
);
135129
final Image blueGreenImage = await _createBlueGreenImage();
136-
final ImageShader imageShader = ImageShader(
137-
blueGreenImage, TileMode.clamp, TileMode.clamp, _identityMatrix);
138130

139131
final FragmentShader shader = program.fragmentShader()
140-
..setSampler(0, imageShader);
132+
..setImageSampler(0, blueGreenImage);
141133
shader.dispose();
142134
try {
143-
shader.setSampler(0, imageShader);
135+
shader.setImageSampler(0, blueGreenImage);
144136
if (assertsEnabled) {
145137
fail('Unreachable');
146138
}
@@ -155,7 +147,6 @@ void main() async {
155147
contains('the native peer has been collected'),
156148
);
157149
}
158-
imageShader.dispose();
159150
blueGreenImage.dispose();
160151
});
161152

@@ -209,13 +200,10 @@ void main() async {
209200
'blue_green_sampler.frag.iplr',
210201
);
211202
final Image blueGreenImage = await _createBlueGreenImage();
212-
final ImageShader imageShader = ImageShader(
213-
blueGreenImage, TileMode.clamp, TileMode.clamp, _identityMatrix);
214203
final FragmentShader shader = program.fragmentShader()
215-
..setSampler(0, imageShader);
204+
..setImageSampler(0, blueGreenImage);
216205
await _expectShaderRendersGreen(shader);
217206
shader.dispose();
218-
imageShader.dispose();
219207
blueGreenImage.dispose();
220208
});
221209

@@ -224,13 +212,10 @@ void main() async {
224212
'blue_green_sampler.frag.iplr',
225213
);
226214
final Image blueGreenImage = _createBlueGreenImageSync();
227-
final ImageShader imageShader = ImageShader(
228-
blueGreenImage, TileMode.clamp, TileMode.clamp, _identityMatrix);
229215
final FragmentShader shader = program.fragmentShader()
230-
..setSampler(0, imageShader);
216+
..setImageSampler(0, blueGreenImage);
231217
await _expectShaderRendersGreen(shader);
232218
shader.dispose();
233-
imageShader.dispose();
234219
blueGreenImage.dispose();
235220
});
236221

@@ -499,11 +484,3 @@ Image _createBlueGreenImageSync() {
499484
picture.dispose();
500485
}
501486
}
502-
503-
504-
final Float64List _identityMatrix = Float64List.fromList(<double>[
505-
1, 0, 0, 0,
506-
0, 1, 0, 0,
507-
0, 0, 1, 0,
508-
0, 0, 0, 1,
509-
]);

0 commit comments

Comments
 (0)