mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
[web] remove runtime effect check (flutter/engine#38832)
This commit is contained in:
parent
320c8f7083
commit
cc5ae28c49
@ -136,16 +136,8 @@ extension CanvasKitExtension on CanvasKit {
|
||||
Object src,
|
||||
SkPartialImageInfo info,
|
||||
);
|
||||
|
||||
/// Retrieve the RuntimeEffect namespace for null checking.
|
||||
external Object? get RuntimeEffect;
|
||||
}
|
||||
|
||||
// TODO(jonahwilliams): remove this once all CanvasKit versions
|
||||
// are built in the SDK.
|
||||
// https://github.com/flutter/flutter/issues/114260
|
||||
final bool isRuntimeEffectAvailable = windowFlutterCanvasKit?.RuntimeEffect != null;
|
||||
|
||||
@JS('window.CanvasKitInit')
|
||||
external Object _CanvasKitInit(CanvasKitInitOptions options);
|
||||
|
||||
|
||||
@ -384,9 +384,6 @@ class CanvasKitRenderer implements Renderer {
|
||||
if (_programs.containsKey(assetKey)) {
|
||||
return _programs[assetKey]!;
|
||||
}
|
||||
if (!isRuntimeEffectAvailable) {
|
||||
throw Exception('FragmentProgram is not supported.');
|
||||
}
|
||||
return _programs[assetKey] = assetManager.load(assetKey).then((ByteData data) {
|
||||
return CkFragmentProgram.fromBytes(assetKey, data.buffer.asUint8List());
|
||||
});
|
||||
|
||||
@ -349,44 +349,41 @@ void _shaderTests() {
|
||||
});
|
||||
|
||||
test('RuntimeEffect', () {
|
||||
// TODO(hterkelsen): Remove this check when local CanvasKit is default.
|
||||
if (isRuntimeEffectAvailable) {
|
||||
const String kSkSlProgram = r'''
|
||||
const String kSkSlProgram = r'''
|
||||
half4 main(vec2 fragCoord) {
|
||||
return vec4(1.0, 0.0, 0.0, 1.0);
|
||||
}
|
||||
''';
|
||||
|
||||
final SkRuntimeEffect? effect = MakeRuntimeEffect(kSkSlProgram);
|
||||
expect(effect, isNotNull);
|
||||
final SkRuntimeEffect? effect = MakeRuntimeEffect(kSkSlProgram);
|
||||
expect(effect, isNotNull);
|
||||
|
||||
const String kInvalidSkSlProgram = '';
|
||||
const String kInvalidSkSlProgram = '';
|
||||
|
||||
// Invalid SkSL returns null.
|
||||
final SkRuntimeEffect? invalidEffect = MakeRuntimeEffect(kInvalidSkSlProgram);
|
||||
expect(invalidEffect, isNull);
|
||||
// Invalid SkSL returns null.
|
||||
final SkRuntimeEffect? invalidEffect = MakeRuntimeEffect(kInvalidSkSlProgram);
|
||||
expect(invalidEffect, isNull);
|
||||
|
||||
final SkShader? shader = effect!.makeShader(<double>[]);
|
||||
expect(shader, isNotNull);
|
||||
final SkShader? shader = effect!.makeShader(<double>[]);
|
||||
expect(shader, isNotNull);
|
||||
|
||||
// mismatched uniforms returns null.
|
||||
final SkShader? invalidShader = effect.makeShader(<double>[1]);
|
||||
// mismatched uniforms returns null.
|
||||
final SkShader? invalidShader = effect.makeShader(<double>[1]);
|
||||
|
||||
expect(invalidShader, isNull);
|
||||
expect(invalidShader, isNull);
|
||||
|
||||
const String kSkSlProgramWithUniforms = r'''
|
||||
const String kSkSlProgramWithUniforms = r'''
|
||||
uniform vec4 u_color;
|
||||
|
||||
half4 main(vec2 fragCoord) {
|
||||
return u_color;
|
||||
return u_color;
|
||||
}
|
||||
''';
|
||||
''';
|
||||
|
||||
final SkShader? shaderWithUniform = MakeRuntimeEffect(kSkSlProgramWithUniforms)
|
||||
!.makeShader(<double>[1.0, 0.0, 0.0, 1.0]);
|
||||
final SkShader? shaderWithUniform = MakeRuntimeEffect(kSkSlProgramWithUniforms)
|
||||
!.makeShader(<double>[1.0, 0.0, 0.0, 1.0]);
|
||||
|
||||
expect(shaderWithUniform, isNotNull);
|
||||
}
|
||||
expect(shaderWithUniform, isNotNull);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@ -186,29 +186,26 @@ void testMain() {
|
||||
});
|
||||
|
||||
test('FragmentProgram can be created from JSON IPLR bundle', () async {
|
||||
// TODO(hterkelsen): Remove this check when local CanvasKit is default.
|
||||
if (isRuntimeEffectAvailable) {
|
||||
final Uint8List data = utf8.encode(kJsonIPLR) as Uint8List;
|
||||
final CkFragmentProgram program = await CkFragmentProgram.fromBytes('test', data);
|
||||
final Uint8List data = utf8.encode(kJsonIPLR) as Uint8List;
|
||||
final CkFragmentProgram program = await CkFragmentProgram.fromBytes('test', data);
|
||||
|
||||
expect(program.effect, isNotNull);
|
||||
expect(program.floatCount, 32);
|
||||
expect(program.textureCount, 0);
|
||||
expect(program.uniforms, hasLength(17));
|
||||
expect(program.name, 'test');
|
||||
expect(program.effect, isNotNull);
|
||||
expect(program.floatCount, 32);
|
||||
expect(program.textureCount, 0);
|
||||
expect(program.uniforms, hasLength(17));
|
||||
expect(program.name, 'test');
|
||||
|
||||
final ui.FragmentShader shader = program.fragmentShader();
|
||||
final ui.FragmentShader shader = program.fragmentShader();
|
||||
|
||||
shader.setFloat(0, 4);
|
||||
shader.dispose();
|
||||
shader.setFloat(0, 4);
|
||||
shader.dispose();
|
||||
|
||||
expect(shader.debugDisposed, true);
|
||||
expect(shader.debugDisposed, true);
|
||||
|
||||
final ui.FragmentShader shader2 = program.fragmentShader();
|
||||
final ui.FragmentShader shader2 = program.fragmentShader();
|
||||
|
||||
shader.setFloat(0, 5);
|
||||
shader2.dispose();
|
||||
expect(shader2.debugDisposed, true);
|
||||
}
|
||||
shader.setFloat(0, 5);
|
||||
shader2.dispose();
|
||||
expect(shader2.debugDisposed, true);
|
||||
});
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user