| // 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!; | |
| } |