blob: 6b07dc65efc7b9d4d87efe8f4267bfc58ed13341 [file] [log] [blame]
// 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!;
}