mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
This prohibits other implementations of the class interface that can not act as native wrappers. See https://github.com/flutter/flutter/issues/123756
185 lines
4.0 KiB
Dart
185 lines
4.0 KiB
Dart
// Copyright 2013 The Flutter Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// ignore_for_file: public_member_api_docs
|
|
|
|
part of dart.ui;
|
|
|
|
class GpuContextException implements Exception {
|
|
GpuContextException(this.message);
|
|
String message;
|
|
|
|
@override
|
|
String toString() {
|
|
return 'GpuContextException: $message';
|
|
}
|
|
}
|
|
|
|
enum BlendOperation { add, subtract, reverseSubtract }
|
|
|
|
enum BlendFactor {
|
|
zero,
|
|
one,
|
|
sourceColor,
|
|
oneMinusSourceColor,
|
|
sourceAlpha,
|
|
oneMinusSourceAlpha,
|
|
destinationColor,
|
|
oneMinusDestinationColor,
|
|
destinationAlpha,
|
|
oneMinusDestinationAlpha,
|
|
sourceAlphaSaturated,
|
|
blendColor,
|
|
oneMinusBlendColor,
|
|
blendAlpha,
|
|
oneMinusBlendAlpha,
|
|
}
|
|
|
|
class BlendOptions {
|
|
const BlendOptions({
|
|
this.colorOperation = BlendOperation.add,
|
|
this.sourceColorFactor = BlendFactor.one,
|
|
this.destinationColorFactor = BlendFactor.oneMinusSourceAlpha,
|
|
this.alphaOperation = BlendOperation.add,
|
|
this.sourceAlphaFactor = BlendFactor.one,
|
|
this.destinationAlphaFactor = BlendFactor.oneMinusSourceAlpha,
|
|
});
|
|
|
|
final BlendOperation colorOperation;
|
|
final BlendFactor sourceColorFactor;
|
|
final BlendFactor destinationColorFactor;
|
|
final BlendOperation alphaOperation;
|
|
final BlendFactor sourceAlphaFactor;
|
|
final BlendFactor destinationAlphaFactor;
|
|
}
|
|
|
|
enum StencilOperation {
|
|
keep,
|
|
zero,
|
|
setToReferenceValue,
|
|
incrementClamp,
|
|
decrementClamp,
|
|
invert,
|
|
incrementWrap,
|
|
decrementWrap,
|
|
}
|
|
|
|
enum CompareFunction {
|
|
never,
|
|
always,
|
|
less,
|
|
equal,
|
|
lessEqual,
|
|
greater,
|
|
notEqual,
|
|
greaterEqual,
|
|
}
|
|
|
|
class StencilOptions {
|
|
const StencilOptions({
|
|
this.operation = StencilOperation.incrementClamp,
|
|
this.compare = CompareFunction.always,
|
|
});
|
|
|
|
final StencilOperation operation;
|
|
final CompareFunction compare;
|
|
}
|
|
|
|
enum ShaderType {
|
|
unknown,
|
|
voidType,
|
|
booleanType,
|
|
signedByteType,
|
|
unsignedByteType,
|
|
signedShortType,
|
|
unsignedShortType,
|
|
signedIntType,
|
|
unsignedIntType,
|
|
signedInt64Type,
|
|
unsignedInt64Type,
|
|
atomicCounterType,
|
|
halfFloatType,
|
|
floatType,
|
|
doubleType,
|
|
structType,
|
|
imageType,
|
|
sampledImageType,
|
|
samplerType,
|
|
}
|
|
|
|
class VertexAttribute {
|
|
const VertexAttribute({
|
|
this.name = '',
|
|
this.location = 0,
|
|
this.set = 0,
|
|
this.binding = 0,
|
|
this.type = ShaderType.floatType,
|
|
this.elements = 2,
|
|
});
|
|
|
|
final String name;
|
|
final int location;
|
|
final int set;
|
|
final int binding;
|
|
final ShaderType type;
|
|
final int elements;
|
|
}
|
|
|
|
class UniformSlot {
|
|
const UniformSlot({
|
|
this.name = '',
|
|
this.set = 0,
|
|
this.extRes0 = 0,
|
|
this.binding = 0,
|
|
});
|
|
|
|
final String name;
|
|
final int set;
|
|
final int extRes0;
|
|
final int binding;
|
|
}
|
|
|
|
class GpuShader {}
|
|
|
|
class RasterPipeline {}
|
|
|
|
/// A handle to a graphics context. Used to create and manage GPU resources.
|
|
///
|
|
/// To obtain the default graphics context, use [getGpuContext].
|
|
base class GpuContext extends NativeFieldWrapperClass1 {
|
|
/// Creates a new graphics context that corresponds to the default Impeller
|
|
/// context.
|
|
GpuContext._createDefault() {
|
|
final String error = _initializeDefault();
|
|
if (error.isNotEmpty) {
|
|
throw GpuContextException(error);
|
|
}
|
|
}
|
|
|
|
//registerShaderLibrary() async
|
|
|
|
Future<RasterPipeline> createRasterPipeline({
|
|
required GpuShader vertex,
|
|
required GpuShader fragment,
|
|
BlendOptions blendOptions = const BlendOptions(),
|
|
StencilOptions stencilOptions = const StencilOptions(),
|
|
List<VertexAttribute> vertexLayout = const <VertexAttribute>[],
|
|
List<UniformSlot> uniformLayout = const <UniformSlot>[],
|
|
}) async {
|
|
return RasterPipeline();
|
|
}
|
|
|
|
/// Associates the default Impeller context with this GpuContext.
|
|
@Native<Handle Function(Handle)>(symbol: 'GpuContext::InitializeDefault')
|
|
external String _initializeDefault();
|
|
}
|
|
|
|
GpuContext? _defaultGpuContext;
|
|
|
|
/// Returns the default graphics context.
|
|
GpuContext getGpuContext() {
|
|
_defaultGpuContext ??= GpuContext._createDefault();
|
|
return _defaultGpuContext!;
|
|
}
|