Call OpenGL ES Api By Dart

Related tags

Utilities flutter_gl
Overview

Flutter GL

Flutter GL can call OpenGL ES API with Dart

Support iOS,Android,Web

OpenGL ES API

Now the api is similar to WebGL

How to use

Now this is only support draw to FBO. then share the FBO texture to Native side.

import

import 'package:flutter_gl/flutter_gl.dart';

Usage

int width = 200;
int height = 200;
num dpr = 1.0;

flutterGlPlugin = FlutterGlPlugin(width, height, dpr: dpr);

Map<String, dynamic> _options = {
    "antialias": true,
    "alpha": false
};    
await flutterGlPlugin.initialize(options: _options);

// on web this need called after web canvas dom was added to document
await flutterGlPlugin.prepareContext();

// you can get gl by
gl = flutterGlPlugin.gl;

// then you can call OpenGL ES API by gl like
gl.clearColor(0.0, 0.0, 0.0, 1.0);
gl.clear(gl.COLOR_BUFFER_BIT);

// use this method to notify Flutter update Texture Widget
// sourceTextue is a texture which bind to FBO framebuffer
flutterGlPlugin.updateTexture(sourceTexture);

Run Examples

Clone or download this repo

cd flutter_gl/flutter_gl/example

flutter run

Screenshot

screen0

screen1

Issues

File any issues, bugs, or feature requests.

Contributing

Pull request please!

Comments
  • gl.bufferData call with too few arguments. Expected: 4 Actual: 3

    gl.bufferData call with too few arguments. Expected: 4 Actual: 3

    I have updated the flutter_gl package from 0.0.3 to 0.0.5 and I notice an issue

    I have a code that sets the colors with buffer data but the lib complains about adding one more parameter in gl.bufferData.

    Code to reproduce

    This is the code that worked before the update.

    setColors(gl) {
        Float32List data = Float32List.fromList([
          Random().nextDouble(), Random().nextDouble(), Random().nextDouble(), 1, //
          Random().nextDouble(), Random().nextDouble(), Random().nextDouble(), 1, //
          Random().nextDouble(), Random().nextDouble(), Random().nextDouble(), 1, //
          Random().nextDouble(), Random().nextDouble(), Random().nextDouble(), 1, //
          Random().nextDouble(), Random().nextDouble(), Random().nextDouble(), 1, //
          Random().nextDouble(), Random().nextDouble(), Random().nextDouble(), 1, //
        ]);
    
        gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
    }
    

    and I get this error

     OpenGLContextWeb 
    {gl: [object WebGL2RenderingContext]}
    Error: NoSuchMethodError: 'bufferData'
    Dynamic call with too few arguments. Expected: 4 Actual: 3
    

    In your example, ExampleDemoTest.dart I saw that you provide 4 arguments

    
    var vertices = new Float32List.fromList([
        0.0, 0.5,  0.0,  // Vertice #1
       -0.5, -0.5, 0.0, // Vertice #2
        0.5, -0.5, 0.0  // Vertice #3
     ]);
    
    final verticesPtr = calloc<Float>(vertices.length);
    verticesPtr.asTypedList(vertices.length).setAll(0, vertices);
    
    gl.bufferData(gl.ARRAY_BUFFER, vertices.length * Float32List.bytesPerElement, verticesPtr, gl.STATIC_DRAW);
    

    What do you think we need to provide the size parameter? or it will be better to have it like it was before with only 3 params

    now you have this method

    bufferData(int target, int size, data, int usage) {
        gl.glBufferData(target, size, data.cast<Void>(), usage);
    }
    

    after the change

    bufferData(int target, data, int usage) {
        late Pointer<Void> nativeData;
        late int size;
        if (data is List<double> || data is Float32List) {
          nativeData = floatListToArrayPointer(data as List<double>).cast();
          size = data.length * sizeOf<Float>();
        } else if (data is Int32List) {
          nativeData = int32ListToArrayPointer(data).cast();
          size = data.length * sizeOf<Int32>();
        } else if (data is Uint16List) {
          nativeData = uInt16ListToArrayPointer(data).cast();
          size = data.length * sizeOf<Uint16>();
        } else if (data is Uint32List) {
          nativeData = uInt32ListToArrayPointer(data).cast();
          size = data.length * sizeOf<Uint32>();  
        } else {
          throw ('bufferData: unsupported native type ${data.runtimeType}');
        }
        gl.glBufferData(target, size, nativeData, usage);
        calloc.free(nativeData);
    }
    

    I think is better for the user to provide the Float32List and handle all the native code inside the OpenGLContextES.dart file as you did before.

    Also notice by importing the dart:ffi package breaks the web version of the app.

    and I get all these errors.

    flutter run
    Multiple devices found:
    Chrome (web) • chrome • web-javascript • Google Chrome 93.0.4577.82
    Edge (web)   • edge   • web-javascript • Microsoft Edge 93.0.961.52
    [1]: Chrome (chrome)
    [2]: Edge (edge)
    Please choose one (To quit, press "q/Q"): 1
    Launching lib\main.dart on Chrome in debug mode...
    lib/engine.dart:6:8: Error: Not found: 'dart:ffi'
    import 'dart:ffi';
           ^
    /G:/Programs/flutter/.pub-cache/hosted/pub.dartlang.org/ffi-1.1.2/lib/src/allocation.dart:5:8: Error: Not found: 'dart:ffi'
    import 'dart:ffi';
           ^
    /G:/Programs/flutter/.pub-cache/hosted/pub.dartlang.org/ffi-1.1.2/lib/src/arena.dart:8:8: Error: Not found: 'dart:ffi'
    import 'dart:ffi';
           ^
    /G:/Programs/flutter/.pub-cache/hosted/pub.dartlang.org/ffi-1.1.2/lib/src/utf8.dart:6:8: Error: Not found: 'dart:ffi'
    import 'dart:ffi';
           ^
    /G:/Programs/flutter/.pub-cache/hosted/pub.dartlang.org/ffi-1.1.2/lib/src/utf16.dart:5:8: Error: Not found: 'dart:ffi'
    import 'dart:ffi';
           ^
    /G:/Programs/flutter/.pub-cache/hosted/pub.dartlang.org/ffi-1.1.2/lib/src/allocation.dart:9:7: Error: Type 'DynamicLibrary' not found.
    final DynamicLibrary stdlib = Platform.isWindows
    

    also when try to run the app into an android device I get this errors

    flutter run
    Launching lib\main.dart on Lenovo TB J606F in debug mode...
    
    FAILURE: Build failed with an exception.
    
    Execution failed for task ':app:checkDebugAarMetadata'.
    > Could not resolve all files for configuration ':app:debugRuntimeClasspath'.
       > Could not find :threeegl:.
         Searched in the following locations:
         Required by:
             project :app > project :flutter_gl
    
    * Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
    
    * Get more help at https://help.gradle.org
    
    BUILD FAILED in 4s
    

    Thanks

    opened by George35mk 11
  • Problems running example projects

    Problems running example projects

    Hello! Your project looks very promising, our team is considering using it in our following app. I had some problems running the examples, and I'd appreciate your help.

    The ExampleTriangle01 demo doesn't show any triangles, rather I only see the canvas. The image I see is the same for every platform. image

    Logs per platform:

    • Android emulator
    Launching lib\main.dart on Android SDK built for x86 in debug mode...
    Running Gradle task 'assembleDebug'...
    √  Built build\app\outputs\flutter-apk\app-debug.apk.
    Installing build\app\outputs\flutter-apk\app.apk...
    W/FlutterActivityAndFragmentDelegate( 3536): A splash screen was provided to Flutter, but this is deprecated. See flutter.dev/go/android-splash-migration for migration steps.
    Debug service listening on ws://127.0.0.1:61591/5a9boQmKzkA=/ws
    Syncing files to device Android SDK built for x86...
    I/flutter ( 3536):  init state..... 
    I/flutter ( 3536):  screenSize: Size(392.7, 781.1) dpr: 2.75 
    
    ======== Exception caught by widgets library =======================================================
    The following LateError was thrown building Builder(dirty, dependencies: [MediaQuery]):
    LateInitializationError: Field 'width' has not been initialized.
    
    The relevant error-causing widget was: 
      Builder Builder:file:///D:/Prog/Github_examples/flutter_gl/flutter_gl/example/lib/ExampleTriangle01.dart:110:15
    When the exception was thrown, this was the stack: 
    #0      _MyAppState.width (package:flutter_gl_example/ExampleTriangle01.dart)
    #1      _MyAppState._build (package:flutter_gl_example/ExampleTriangle01.dart:130:20)
    #2      _MyAppState.build.<anonymous closure> (package:flutter_gl_example/ExampleTriangle01.dart:113:49)
    #3      Builder.build (package:flutter/src/widgets/basic.dart:7398:48)
    #4      StatelessElement.build (package:flutter/src/widgets/framework.dart:4827:28)
    #5      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4754:15)
    #6      Element.rebuild (package:flutter/src/widgets/framework.dart:4477:5)
    #7      ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4735:5)
    #8      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4729:5)
    ...     Normal element mounting (19 frames)
    #27     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3790:14)
    #28     MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6422:36)
    #29     MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6433:32)
    ...     Normal element mounting (255 frames)
    #284    Element.inflateWidget (package:flutter/src/widgets/framework.dart:3790:14)
    #285    MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6422:36)
    #286    MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6433:32)
    ...     Normal element mounting (387 frames)
    #673    Element.inflateWidget (package:flutter/src/widgets/framework.dart:3790:14)
    #674    Element.updateChild (package:flutter/src/widgets/framework.dart:3540:18)
    #675    RenderObjectToWidgetElement._rebuild (package:flutter/src/widgets/binding.dart:1198:16)
    #676    RenderObjectToWidgetElement.mount (package:flutter/src/widgets/binding.dart:1167:5)
    #677    RenderObjectToWidgetAdapter.attachToRenderTree.<anonymous closure> (package:flutter/src/widgets/binding.dart:1112:18)
    #678    BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2600:19)
    #679    RenderObjectToWidgetAdapter.attachToRenderTree (package:flutter/src/widgets/binding.dart:1111:13)
    #680    WidgetsBinding.attachRootWidget (package:flutter/src/widgets/binding.dart:944:7)
    #681    WidgetsBinding.scheduleAttachRootWidget.<anonymous closure> (package:flutter/src/widgets/binding.dart:924:7)
    (elided 11 frames from class _RawReceivePortImpl, class _Timer, dart:async, and dart:async-patch)
    ====================================================================================================
    D/HostConnection( 3536): HostConnection::get() New Host Connection established 0xef188dd0, tid 3590
    D/HostConnection( 3536): HostComposition ext ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_native_sync_v2 ANDROID_EMU_native_sync_v3 ANDROID_EMU_native_sync_v4 ANDROID_EMU_dma_v1 ANDROID_EMU_direct_mem ANDROID_EMU_host_composition_v1 ANDROID_EMU_host_composition_v2 ANDROID_EMU_vulkan ANDROID_EMU_deferred_vulkan_commands ANDROID_EMU_vulkan_null_optional_strings ANDROID_EMU_vulkan_create_resources_with_requirements ANDROID_EMU_YUV_Cache ANDROID_EMU_vulkan_ignored_handles ANDROID_EMU_has_shared_slots_host_memory_allocator ANDROID_EMU_vulkan_free_memory_sync ANDROID_EMU_vulkan_shader_float16_int8 ANDROID_EMU_vulkan_async_queue_submit ANDROID_EMU_sync_buffer_data ANDROID_EMU_read_color_buffer_dma GL_OES_EGL_image_external_essl3 GL_OES_vertex_array_object GL_KHR_texture_compression_astc_ldr ANDROID_EMU_host_side_tracing ANDROID_EMU_gles_max_version_3_0 
    D/EGL_emulation( 3536): eglCreateContext: 0xef1891c0: maj 3 min 0 rcv 3
    D/EGL_emulation( 3536): eglCreateContext: 0xef188f20: maj 3 min 0 rcv 3
    D/EGL_emulation( 3536): eglCreateContext: 0xef189000: maj 3 min 0 rcv 3
    W/Gralloc4( 3536): allocator 3.x is not supported
    D/com.futouapp.flutter_gl.flutter_gl.EglEnv( 3536):  egl make current 
    D/EGL_emulation( 3536): eglMakeCurrent: 0xef188f20: ver 3 0 (tinfo 0xbc055410) (first time)
    I/flutter ( 3536):  flutterGlPlugin: textureid: 0 
    D/HostConnection( 3536): HostConnection::get() New Host Connection established 0xef1a2210, tid 3574
    D/HostConnection( 3536): HostComposition ext ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_native_sync_v2 ANDROID_EMU_native_sync_v3 ANDROID_EMU_native_sync_v4 ANDROID_EMU_dma_v1 ANDROID_EMU_direct_mem ANDROID_EMU_host_composition_v1 ANDROID_EMU_host_composition_v2 ANDROID_EMU_vulkan ANDROID_EMU_deferred_vulkan_commands ANDROID_EMU_vulkan_null_optional_strings ANDROID_EMU_vulkan_create_resources_with_requirements ANDROID_EMU_YUV_Cache ANDROID_EMU_vulkan_ignored_handles ANDROID_EMU_has_shared_slots_host_memory_allocator ANDROID_EMU_vulkan_free_memory_sync ANDROID_EMU_vulkan_shader_float16_int8 ANDROID_EMU_vulkan_async_queue_submit ANDROID_EMU_sync_buffer_data ANDROID_EMU_read_color_buffer_dma GL_OES_EGL_image_external_essl3 GL_OES_vertex_array_object GL_KHR_texture_compression_astc_ldr ANDROID_EMU_host_side_tracing ANDROID_EMU_gles_max_version_3_0 
    D/EGL_emulation( 3536): eglMakeCurrent: 0xef189000: ver 3 0 (tinfo 0xbc055af0) (first time)
    I/flutter ( 3536): Error compiling shader: 
    I/flutter ( 3536): Error compiling shader:
    I/flutter ( 3536): ERROR: 0:5: 'attribute' : Illegal use of reserved word
    I/flutter ( 3536): ERROR: 0:5: 'attribute' : syntax error
    I/flutter ( 3536): Error compiling shader: 
    I/flutter ( 3536): Error compiling shader:
    I/flutter ( 3536): ERROR: 0:5: 'gl_FragColor' : undeclared identifier
    I/flutter ( 3536): ERROR: 0:5: 'assign' : l-value required (can't modify a const)
    I/flutter ( 3536): ERROR: 0:5: '=' : dimension mismatch
    I/flutter ( 3536): ERROR: 0:5: 'assign' : cannot convert from 'const 4-component vector of float' to 'const highp float'
    E/flutter ( 3536): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: type 'Null' is not a subtype of type 'int' of 'shader'
    E/flutter ( 3536): #0      OpenGLContextES.attachShader (package:flutter_gl/openGL/opengl/OpenGLContextES.dart:488:15)
    E/flutter ( 3536): #1      _MyAppState.initShaders (package:flutter_gl_example/ExampleTriangle01.dart:298:8)
    E/flutter ( 3536): #2      _MyAppState.prepare (package:flutter_gl_example/ExampleTriangle01.dart:239:10)
    E/flutter ( 3536): #3      _MyAppState.setup (package:flutter_gl_example/ExampleTriangle01.dart:81:5)
    E/flutter ( 3536): <asynchronous suspension>
    E/flutter ( 3536): 
    I/flutter ( 3536):  click render ... 
    I/flutter ( 3536):  render n: 0 
    I/System.out( 3536): Results of compiling source:
    I/System.out( 3536): Results of compiling source:
    I/flutter ( 3536):  click render ... 
    I/flutter ( 3536):  render n: 0 
    
    • Web Chrome
    Launching lib\main.dart on Chrome in debug mode...
    Waiting for connection from debug service on Chrome...
    This app is linked to the debug service: ws://127.0.0.1:51155/9GmCwH8CdUc=/ws
    Debug service listening on ws://127.0.0.1:51155/9GmCwH8CdUc=/ws
    
     Running with sound null safety 
    Debug service listening on ws://127.0.0.1:51155/9GmCwH8CdUc=/ws
     init state..... 
     screenSize: Size(1036.0, 718.4) dpr: 1.25 
     flutterGlPlugin: textureid: 1650533741854000 
    Height of Platform View type: [1650533741854000] may not be set. Defaulting to `height: 100%`.
    Set `style.height` to any appropriate value to stop this message.
    Width of Platform View type: [1650533741854000] may not be set. Defaulting to `width: 100%`.
    Set `style.width` to any appropriate value to stop this message.
     OpenGLContextWeb 
    {gl: [object WebGL2RenderingContext]}
    Error: Unsupported operation: Platform._operatingSystem
        at Object.throw_ [as throw] (http://localhost:51102/dart_sdk.js:5067:11)
        at Function._operatingSystem (http://localhost:51102/dart_sdk.js:57544:17)
        at Function.get operatingSystem [as operatingSystem] (http://localhost:51102/dart_sdk.js:57590:27)
        at get _operatingSystem (http://localhost:51102/dart_sdk.js:57503:27)
        at Function.desc.get [as _operatingSystem] (http://localhost:51102/dart_sdk.js:5560:17)
        at get isMacOS (http://localhost:51102/dart_sdk.js:57518:26)
        at Function.desc.get [as isMacOS] (http://localhost:51102/dart_sdk.js:5560:17)
        at ExampleTriangle01._MyAppState.new.prepare (http://localhost:51102/packages/flutter_gl_example/ExampleTriangle01.dart.lib.js:383:23)
        at ExampleTriangle01._MyAppState.new.setup (http://localhost:51102/packages/flutter_gl_example/ExampleTriangle01.dart.lib.js:311:14)
        at setup.next (<anonymous>)
        at runBody (http://localhost:51102/dart_sdk.js:40590:34)
        at Object._async [as async] (http://localhost:51102/dart_sdk.js:40621:7)
        at ExampleTriangle01._MyAppState.new.setup (http://localhost:51102/packages/flutter_gl_example/ExampleTriangle01.dart.lib.js:305:20)
        at http://localhost:51102/packages/flutter_gl_example/ExampleTriangle01.dart.lib.js:300:16
        at http://localhost:51102/dart_sdk.js:34918:33
        at internalCallback (http://localhost:51102/dart_sdk.js:26619:11)
    
    ======== Exception caught by widgets library =======================================================
    The following LateError was thrown building Builder(dirty, dependencies: [MediaQuery]):
    LateInitializationError: Field 'width' has not been initialized.
    
    The relevant error-causing widget was: 
      Builder Builder:file:///D:/Prog/Github_examples/flutter_gl/flutter_gl/example/lib/ExampleTriangle01.dart:110:15
    When the exception was thrown, this was the stack: 
    C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 251:49  throw_
    packages/flutter_gl_example/ExampleTriangle01.dart 22:15                                                                   get width
    packages/flutter_gl_example/ExampleTriangle01.dart 130:20                                                                  [_build]
    packages/flutter_gl_example/ExampleTriangle01.dart 113:49                                                                  <fn>
    packages/flutter/src/widgets/basic.dart 7398:48                                                                            build
    packages/flutter/src/widgets/framework.dart 4827:28                                                                        build
    <FLUTTER INTERNAL STACK TRACE SKIPPED>
    C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/private/isolate_helper.dart 48:19       internalCallback
    ====================================================================================================
     click render ... 
     render n: 0 
     click render ... 
     render n: 0 
    
    
    • Windows desktop
    Launching lib\main.dart on Windows in debug mode...
    Building Windows application...
    Debug service listening on ws://127.0.0.1:50588/1OBRUsWQ464=/ws
    Syncing files to device Windows...
    flutter:  init state..... 
    flutter:  screenSize: Size(1265.6, 682.4) dpr: 1.25 
    
    ======== Exception caught by widgets library =======================================================
    The following LateError was thrown building Builder(dirty, dependencies: [MediaQuery]):
    LateInitializationError: Field 'width' has not been initialized.
    
    The relevant error-causing widget was: 
      Builder Builder:file:///D:/Prog/Github_examples/flutter_gl/flutter_gl/example/lib/ExampleTriangle01.dart:110:15
    When the exception was thrown, this was the stack: 
    #0      _MyAppState.width (package:flutter_gl_example/ExampleTriangle01.dart)
    #1      _MyAppState._build (package:flutter_gl_example/ExampleTriangle01.dart:130:20)
    #2      _MyAppState.build.<anonymous closure> (package:flutter_gl_example/ExampleTriangle01.dart:113:49)
    #3      Builder.build (package:flutter/src/widgets/basic.dart:7398:48)
    #4      StatelessElement.build (package:flutter/src/widgets/framework.dart:4827:28)
    #5      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4754:15)
    #6      Element.rebuild (package:flutter/src/widgets/framework.dart:4477:5)
    #7      ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4735:5)
    #8      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4729:5)
    ...     Normal element mounting (19 frames)
    #27     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3790:14)
    #28     MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6422:36)
    #29     MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6433:32)
    ...     Normal element mounting (255 frames)
    #284    Element.inflateWidget (package:flutter/src/widgets/framework.dart:3790:14)
    #285    MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6422:36)
    #286    MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6433:32)
    ...     Normal element mounting (387 frames)
    #673    Element.inflateWidget (package:flutter/src/widgets/framework.dart:3790:14)
    #674    Element.updateChild (package:flutter/src/widgets/framework.dart:3540:18)
    #675    RenderObjectToWidgetElement._rebuild (package:flutter/src/widgets/binding.dart:1198:16)
    #676    RenderObjectToWidgetElement.mount (package:flutter/src/widgets/binding.dart:1167:5)
    #677    RenderObjectToWidgetAdapter.attachToRenderTree.<anonymous closure> (package:flutter/src/widgets/binding.dart:1112:18)
    #678    BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2600:19)
    #679    RenderObjectToWidgetAdapter.attachToRenderTree (package:flutter/src/widgets/binding.dart:1111:13)
    #680    WidgetsBinding.attachRootWidget (package:flutter/src/widgets/binding.dart:944:7)
    #681    WidgetsBinding.scheduleAttachRootWidget.<anonymous closure> (package:flutter/src/widgets/binding.dart:924:7)
    (elided 11 frames from class _RawReceivePortImpl, class _Timer, dart:async, and dart:async-patch)
    ====================================================================================================
    flutter:  flutterGlPlugin: textureid: 2755101658608 
    flutter:  initShaders LINK_STATUS _res: 1 
    flutter:  render n: 3 
    flutter:  click render ... 
    flutter:  render n: 3 
    
    
    opened by iKozlinskyi 7
  • How to get GL_VENDOR and GL_RERENDER from GL10 in Android project MainAcitivity

    How to get GL_VENDOR and GL_RERENDER from GL10 in Android project MainAcitivity

    Thanks for your library. Does it bother me when I have a side question?. I am having a problem, I want to get GL_VENDOR and GL_RERENDER from GL10 in MainActivity, how do I do that?

    Thank you so much <3

    Screen Shot 2021-12-22 at 22 36 52 3
    opened by helloo0-0oword 7
  • can't render properly in release apk

    can't render properly in release apk

    both in running the example flutter project in this repo and my own app based on three_dart, release apk can't get proper display. have you ever try build release apk like "flutter build apk --split-per-abi".

    Here are the stack infos:

    --------- beginning of crash
    --------- beginning of system
    --------- beginning of main
    12-07 02:03:28.774 21654 21684 E flutter : [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception:  flutter_gl OpenGLContextES.dart toPointer _GrowableList<double> TODO 
    12-07 02:03:28.774 21654 21684 E flutter : #0      toPointer (package:flutter_gl/openGL/opengl/OpenGLContextES.dart:928)
    12-07 02:03:28.774 21654 21684 E flutter : #1      OpenGLContextES.uniform3fvNormal (package:flutter_gl/openGL/opengl/OpenGLContextES.dart:778)
    12-07 02:03:28.774 21654 21684 E flutter : #2      OpenGLContextES.uniform3fv (package:flutter_gl/openGL/opengl/OpenGLContextES.dart:772)
    12-07 02:03:28.774 21654 21684 E flutter : #3      WebGLUniformsHelper.setValueV3f (package:three_dart/three3d/renderers/webgl/WebGLUniformsHelper.dart:493)
    12-07 02:03:28.774 21654 21684 E flutter : #4      WebGLUniforms.upload (package:three_dart/three3d/renderers/webgl/WebGLUniforms.dart:120)
    12-07 02:03:28.774 21654 21684 E flutter : #5      WebGLRenderer.setProgram (package:three_dart/three3d/renderers/WebGLRenderer.dart:1564)
    12-07 02:03:28.774 21654 21684 E flutter : #6      WebGLRenderer.renderBufferDirect (package:three_dart/three3d/renderers/WebGLRenderer.dart:568)
    12-07 02:03:28.774 21654 21684 E flutter : #7      WebGLRenderer.renderObject (package:three_dart/three3d/renderers/WebGLRenderer.dart:1120)
    12-07 02:03:28.774 21654 21684 E flutter : #8      WebGLRenderer.renderObjects (package:three_dart/three3d/renderers/WebGLRenderer.dart:1068)
    12-07 02:03:28.774 21654 21684 E flutter : #9      WebGLRenderer.render (package:three_dart/three3d/renderers/WebGLRenderer.dart:819)
    12-07 02:03:28.774 21654 21684 E flutter : #10     _ThreeJsScreenState.render (package:try_on_cloth/three_screen.dart:161)
    12-07 02:03:28.774 21654 21684 E flutter : #11     _ThreeJsScreenState.animate (package:try_on_cloth/three_screen.dart:152)
    12-07 02:03:28.774 21654 21684 E flutter : #12     _ThreeJsScreenState.initPlatformState.<anonymous closure> (package:try_on_cloth/three_screen.dart:92)
    12-07 02:03:28.774 21654 21684 E flutter : <asynchronous suspension>
    12-07 02:03:28.774 21654 21684 E flutter : 
    12-07 02:06:41.657 22048 22078 E flutter : [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception:  flutter_gl OpenGLContextES.dart toPointer _GrowableList<double> TODO 
    

    I found the issule, the type is "_GrowableList", not "List". However when I fixed it, it comes up with another problem. I get white screen. Below is the flutter log for flutter_gl.

    12-07 03:32:51.896 508 568 I flutter : device pixel ratio is 3.5 12-07 03:32:51.896 508 568 I flutter : width is 411.42857142857144, height is 898.2857142857143 12-07 03:32:52.025 508 568 I flutter : OpenGLContextES 12-07 03:32:52.025 508 568 I flutter : {gl: Instance of 'LibOpenGLES'} 12-07 03:32:52.026 508 568 I flutter : OpenGLES getExtension key: EXT_color_buffer_float _v: Pointer: address=0xb9a5e400 12-07 03:32:52.027 508 568 I flutter : WebGLState..................init........... 12-07 03:32:52.027 508 568 I flutter : WebGLState. getParameter _data: 0 12-07 03:32:52.100 508 568 I flutter : THREE.WebGLProgram: gl.getProgramInfoLog() programLog: null vertexLog: null fragmentLog: null 12-07 03:35:03.371 811 840 I flutter : device pixel ratio is 3.5 12-07 03:35:03.371 811 840 I flutter : width is 411.42857142857144, height is 898.2857142857143 12-07 03:35:03.499 811 840 I flutter : OpenGLContextES 12-07 03:35:03.499 811 840 I flutter : {gl: Instance of 'LibOpenGLES'} 12-07 03:35:03.499 811 840 I flutter : OpenGLES getExtension key: EXT_color_buffer_float _v: Pointer: address=0xb9fa3800 12-07 03:35:03.501 811 840 I flutter : WebGLState..................init........... 12-07 03:35:03.501 811 840 I flutter : WebGLState. getParameter _data: 0 12-07 03:35:03.558 811 840 I flutter : THREE.WebGLProgram: gl.getProgramInfoLog() programLog: null vertexLog: null fragmentLog: null 12-07 03:37:08.844 1035 1131 I flutter : device pixel ratio is 3.5 12-07 03:37:08.844 1035 1131 I flutter : width is 411.42857142857144, height is 898.2857142857143 12-07 03:37:08.972 1035 1131 I flutter : OpenGLContextES 12-07 03:37:08.972 1035 1131 I flutter : {gl: Instance of 'LibOpenGLES'} 12-07 03:37:08.973 1035 1131 I flutter : OpenGLES getExtension key: EXT_color_buffer_float _v: Pointer: address=0xba0ce800 12-07 03:37:08.974 1035 1131 I flutter : WebGLState..................init........... 12-07 03:37:08.974 1035 1131 I flutter : WebGLState. getParameter _data: 0 12-07 03:37:09.033 1035 1131 I flutter : THREE.WebGLProgram: gl.getProgramInfoLog() programLog: null vertexLog: null fragmentLog: null

    it seems the initialization of gles meet some problems and retry for many times.

    opened by leoxupku 6
  • Class 'LibOpenGLES' has no instance method 'glUniform4fv' with matching arguments.

    Class 'LibOpenGLES' has no instance method 'glUniform4fv' with matching arguments.

    I get this Exception when I try to set the colors

    // setup the colors.

    String vs = """
        attribute vec4 a_position;
    
        uniform mat4 u_matrix;
    
        void main() {
          // Multiply the position by the matrix.
          gl_Position = u_matrix * a_position;
        }
      """;
    
    
      String fs = """
        precision mediump float;
    
        uniform vec4 u_color;
    
        void main() {
          gl_FragColor = u_color;
        }
      """;
    
    dynamic color = [
        Random().nextDouble(),
        Random().nextDouble(),
        Random().nextDouble(),
        1,
      ];
    
    colorLocation = gl.getUniformLocation(program, "u_color");
    
    gl.uniform4fv(colorLocation, color); <--- error
    
    Exception has occurred.
    NoSuchMethodError (NoSuchMethodError: Class 'LibOpenGLES' has no instance method 'glUniform4fv' with matching arguments.
    Receiver: Instance of 'LibOpenGLES'
    Tried calling: glUniform4fv(1, Instance(length:4) of '_GrowableList')
    Found: glUniform4fv(int, int, Pointer<Float>) => void)
    

    I get this error when I use the app on an android device.

    The web app works without issues but my app will run on an android device.

    What I should do to fix this issue?

    opened by George35mk 5
  • Add missing `glTransformFeedbackVaryings`

    Add missing `glTransformFeedbackVaryings`

    Based on the documentation it seems this could be available for use in OpenGLES 3.0: https://www.khronos.org/registry/OpenGL-Refpages/es3.0/html/glTransformFeedbackVaryings.xhtml

    This would be very useful to create particle fields, let me know if you could add this. Thank you.

    opened by intonarumori 4
  • Could not find threeegl.aar

    Could not find threeegl.aar

    First off, thanks for making this repo, I'm really excited to start graphics programming in flutter.

    I'm having an issue with building with flutter_gl 0.0.18

    FAILURE: Build failed with an exception. What went wrong: Could not determine the dependencies of task ':app:lintVitalRelease'.

    Could not resolve all artifacts for configuration ':app:debugRuntimeClasspath'. Could not find :threeegl:. Searched in the following locations: - file:/C:/Users/xyz/myproject/android/app/libs/aars/threeegl.aar Required by: project :app > project :flutter_gl

    I tried manually copying the aar into the project folder where it searched, but that did not work.

    Any ideas on what is going wrong? And where can I find the code for the threeegl.aar class?

    opened by BananaHemic 3
  • Example failing with v0.0.16

    Example failing with v0.0.16

    Hello, I'm barely getting started...

    Trying to use the example triangle code I'm getting errors with FlutterGlPlatform.

    Error: The method 'initialize_interface' isn't defined for the class 'FlutterGlPlatform'. As if it's not seeing anything in flutter_gl_platform_interface-0.0.3/lib/method_channel_flutter_gl.dart.

    I'm an absolute beginner with Flutter so I haven't figured out how to try to force the import.

    e.g. Adding import package:flutter_gl_platform_interface/method_channel_flutter_gl.dart'; did me no good

    opened by rorySomething 3
  • Runing the example with error.

    Runing the example with error.

    I tried to run this project on my device, but i got some error:

    2022-03-28 18:28:58.750 21107-21107/com.futouapp.fluttergl.example W/FlutterActivityAndFragmentDelegate: A splash screen was provided to Flutter, but this is deprecated. See flutter.dev/go/android-splash-migration for migration steps.
    2022-03-28 18:28:58.860 21107-21160/com.futouapp.fluttergl.example D/OpenGLRenderer: HWUI GL Pipeline
    2022-03-28 18:28:58.885 21107-21107/com.futouapp.fluttergl.example W/Looper: Dispatch took 2430ms on main, h=Handler (android.app.ActivityThread$H) {96d5911} cb=null msg=100
    2022-03-28 18:28:58.887 21107-21107/com.futouapp.fluttergl.example W/Looper: Dispatch delayed 1818ms on main, h=Handler (android.app.ActivityThread$H) {96d5911} cb=null msg=149
    2022-03-28 18:28:59.008 21107-21160/com.futouapp.fluttergl.example I/OpenGLRenderer: Initialized EGL, version 1.4
    2022-03-28 18:28:59.009 21107-21160/com.futouapp.fluttergl.example D/OpenGLRenderer: Swap behavior 0
    2022-03-28 18:28:59.029 21107-21160/com.futouapp.fluttergl.example D/mali_winsys: EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
    2022-03-28 18:28:59.048 21107-21140/com.futouapp.fluttergl.example D/mali_winsys: EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
    2022-03-28 18:28:59.607 21107-21162/com.futouapp.fluttergl.example I/flutter: Observatory listening on http://127.0.0.1:33373/2wQz_KwT-3I=/
    2022-03-28 18:29:05.285 21107-21139/com.futouapp.fluttergl.example I/flutter:  init state..... 
    2022-03-28 18:29:08.645 21107-21139/com.futouapp.fluttergl.example I/flutter:  screenSize: Size(958.1, 561.4) dpr: 1.068750023841858 
    2022-03-28 18:29:13.610 21107-21184/com.futouapp.fluttergl.example D/mali_winsys: EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, EGLBoolean) returns 0x3000
    2022-03-28 18:29:13.615 21107-21184/com.futouapp.fluttergl.example D/com.futouapp.flutter_gl.flutter_gl.EglEnv:  egl make current 
    2022-03-28 18:29:13.936 21107-21139/com.futouapp.fluttergl.example I/flutter:  flutterGlPlugin: textureid: 0 
    2022-03-28 18:29:15.678 21107-21139/com.futouapp.fluttergl.example I/flutter: Error compiling shader: 
        Error compiling shader:
        0:1: L0003: Keyword 'attribute' is reserved
    2022-03-28 18:29:15.681 21107-21139/com.futouapp.fluttergl.example I/flutter: Error compiling shader: 
        Error compiling shader:
        0:5: L0002: Undeclared variable 'gl_FragColor'
    2022-03-28 18:29:15.710 21107-21139/com.futouapp.fluttergl.example E/flutter: [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: type 'Null' is not a subtype of type 'int' of 'shader'
        #0      OpenGLContextES.attachShader (package:flutter_gl/openGL/opengl/OpenGLContextES.dart:496:15)
        #1      _MyAppState.initShaders (package:flutter_gl_example/ExampleTriangle01.dart:301:8)
        #2      _MyAppState.prepare (package:flutter_gl_example/ExampleTriangle01.dart:242:10)
        #3      _MyAppState.setup (package:flutter_gl_example/ExampleTriangle01.dart:81:5)
        <asynchronous suspension>
    
    opened by rivalnhwc 3
  • You need to add a depth Buffer in setupDefaultFBO method

    You need to add a depth Buffer in setupDefaultFBO method

    I found an issue when I try to use the gl.DEPTH_BUFFER_BIT .

    I found the issue on the Android device.

    Example code

    draw() {
    
    // Tell WebGL how to convert from clip space to pixels
        gl.viewport(0, 0, (width * flgl.dpr).toInt(), (height * flgl.dpr).toInt());
    
        // Clear the canvas. sets the canvas background color.
        gl.clearColor(0, 0, 0, 1);
    
        // Clear the canvas.
        gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
    
        // Turn on culling. By default backfacing triangles will be culled.
        gl.enable(gl.CULL_FACE);
    
        // Enable the depth buffer
        gl.enable(gl.DEPTH_TEST);
    
        // print('CULL_FACE Enabled: ${gl.getParameter(gl.CULL_FACE)}');
        // print('DEPTH_TEST Enabled: ${gl.getParameter(gl.DEPTH_TEST)}');
    
        // Tell it to use our program (pair of shaders)
        gl.useProgram(program);
    
        // Turn on the attribute
        gl.enableVertexAttribArray(positionLocation);
    
        // Bind the position buffer.
        gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
    
        // Tell the attribute how to get data out of positionBuffer (ARRAY_BUFFER)
        var size = 3; // 3 components per iteration
        var type = gl.FLOAT; // the data is 32bit floats
        var normalize = false; // don't normalize the data
        var stride = 0;
        var offset = 0; // start at the beginning of the buffer
        gl.vertexAttribPointer(positionLocation, size, type, normalize, stride, offset);
    }
    

    And I get this:

    Screenshot 2021-09-24 191041

    But I want this:

    Screenshot 2021-09-24 191122

    I found a workaround that fixes this issue but I am not sure if this produces any other issues

    setupDefaultFBO() {
    
      int glWidth = (width * dpr).toInt();
      int glHeight = (height * dpr).toInt();
    
      dynamic defaultFramebuffer = _gl.createFramebuffer();
      dynamic defaultFramebufferTexture = _gl.createTexture();
      _gl.activeTexture(_gl.TEXTURE0);
    
      _gl.bindTexture(_gl.TEXTURE_2D, defaultFramebufferTexture);
      _gl.texImage2D(
      _gl.TEXTURE_2D, 0, _gl.RGBA, glWidth, glHeight, 0, _gl.RGBA, _gl.UNSIGNED_BYTE, null);
      _gl.texParameteri(_gl.TEXTURE_2D, _gl.TEXTURE_MIN_FILTER, _gl.LINEAR);
      _gl.texParameteri(_gl.TEXTURE_2D, _gl.TEXTURE_MAG_FILTER, _gl.LINEAR);
    
      _gl.bindFramebuffer(_gl.FRAMEBUFFER, defaultFramebuffer);
      _gl.framebufferTexture2D(
      _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, defaultFramebufferTexture, 0);
    
      Pointer<Int32> depthBuffer = calloc();
      _gl.gl.glGenRenderbuffers(1, depthBuffer.cast());
      _gl.gl.glBindRenderbuffer(_gl.RENDERBUFFER, depthBuffer.value);
      _gl.gl.glRenderbufferStorage(_gl.RENDERBUFFER, _gl.DEPTH_COMPONENT16, glWidth, glHeight);
      _gl.gl.glFramebufferRenderbuffer(
      _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.RENDERBUFFER, depthBuffer.value);
    
      return defaultFramebufferTexture;
    }
    
    opened by George35mk 3
  • Question on IOS Context

    Question on IOS Context

    Hello!

    Thanks again for making this useful plugin.

    I'm having a hard time understanding how the context is made current on iOS devices. From reading the source code it looks like dart ffi pulls a reference to "makeCurrent" function.

    However, on my ios device, the symbol "makeCurrent" is not found, even though the symbol "glGetIntegerv" is correctly found.

    Could you please explain how ios sets the context?

    opened by BananaHemic 2
  • Could u open the source of threeegl.aar?

    Could u open the source of threeegl.aar?

    We found the threeegl.aar will overwrite the app icon of flutter app. We have to modify the threeegl.aar. Could u share the code of threeegl.aar please?

    opened by lostangelwangyang 0
  • Can't release memory After disposed the Texture

    Can't release memory After disposed the Texture

    Hi, I have some problems when I tried to release memory. If I don't create a new textureId, the memory wouldn't be out of memory, but once I tried to dispose of one and create a new one, the memory will increase rapidly. After multiple operations, my app will crash... My code like this: ` @override void dispose() { picList![0].dispose(); picList![1].dispose();

    _gl.deleteTexture(frameTextureList[0]);
    frameTextureList[0] = 0;
    
    _gl.deleteTexture(frameTextureList[1]);
    frameTextureList[1] = 0;
    
    _gl.deleteFramebuffer(defaultFramebuffers);
    defaultFramebuffers = 0;
    
    _gl.deleteRenderbuffer(defaultRenderbuffer);
    defaultRenderbuffer = 0;
    
    _gl.deleteTexture(frameTexture);
    frameTexture = 0;
    
    _gl.deleteTexture(frameTexture2);
    frameTexture2 = 0;
    
    _gl.deleteTexture(defaultFramebufferTexturess);
    defaultFramebufferTexturess = 0;
    
    _gl.deleteTexture(sourceTexture);
    sourceTexture = 0;
    
    if (vao != 0 && vao != null) {
      _gl.deleteVertexArray(vao);
      vao = 0;
    }
    if (vertexBuffer != 0 && vertexBuffer != null) {
      _gl.deleteBuffer(vertexBuffer);
      vertexBuffer = 0;
    }
    if (vertexBuffer1 != 0 && vertexBuffer1 != null) {
      _gl.deleteBuffer(vertexBuffer1);
      vertexBuffer1 = 0;
    }
    
    _gl.deleteProgram(glProgram);
    glProgram = 0;
    _gl.useProgram(0);
    _gl.finish();
    
    flutterGlPlugin.dispose();
    
    super.dispose();
    

    }`

    I change the NativeArray.app.dart file to: `final freenalizer = NativeFinalizer(DynamicLibrary.executable().lookup('free'));

    @override void dispose() { if (!disposed) { calloc.free(data); freenalizer.detach(this); disposed = true; } super.dispose(); }

    NativeUint8Array(int size) : super(size) { _list = calloc(size); freenalizer.attach(this, _list.cast(), detach: this); oneByteSize = sizeOf(); } NativeUint8Array.from(List listData) : super.from(listData) { _list = calloc(listData.length); freenalizer.attach(this, _list.cast(), detach: this); oneByteSize = sizeOf(); this.toDartList().setAll(0, listData); } ` can someone help me fix this bug? Thank you!!!!!!!

    opened by kingzhang-A11 0
  • I thought opengl is deprecated on iOS and MacOS?

    I thought opengl is deprecated on iOS and MacOS?

    Hi,

    I don't know if you know that I started a similar libary called Flutter_webgl and I used MetalAngle as replacement for opengl. I just saw, that it seems not be necessary in your library. can you explain how this works?

    Thanks Thomas

    opened by escamoteur 1
  • iOS Error

    iOS Error

    The example app crashes on iOS after opening any of the examples.

    The error message is the following:

    flutter_gl/CustomRender.swift:149: Fatal error: Unexpectedly found nil while unwrapping an Optional value
    

    Am I missing something? Please let me know!

    opened by 55nknown 5
  • [UNIDENTIFIED] pub.dev

    [UNIDENTIFIED] pub.dev

    ERROR: The name 'platformViewRegistry' is being referenced through the prefix 'ui', but it isn't defined in any of the libraries imported using that prefix. lib/openGL/OpenGL-Web.dart:39:8

    ╷ 39 │ ui.platformViewRegistry.registerViewFactory(divId, (int viewId) { │ ^^^^^^^^^^^^^^^^^^^^ ╵

    flutter pub get Running "flutter pub get" in example...
    Because example depends on flutter_gl from path which doesn't exist (could not find package flutter_gl at "....\flutter_gl\flutter_gl"), version solving failed. pub get failed (66; Because example depends on flutter_gl from path which doesn't exist (could not find package flutter_gl at "....\flutter_gl\flutter_gl"), version solving failed.) exit code 66

    opened by mkasaii16 0
Owner
zhaolei
Full-stack developer, Web, Ruby on Rails, Flutter ...
zhaolei
This package wraps Airtime, Sms, and Voice call from Africa's Talking APIs.

This package wraps some functionalities from Africa's Talking API The functionalities implemented are; Sms send message fetch messages generate checko

Eddie Genius 7 May 31, 2022
A simple flexible API wrapper for coinbase commerce API. Totally unofficial.

coinbase_commerce A dart library that connects to interact with the Coinbase Commerce API. Enables projects to connect seamlessly to coinbase and rece

Onuoha Obinna 3 Oct 17, 2021
A Dart build script that downloads the Protobuf compiler and Dart plugin to streamline .proto to .dart compilation.

A Dart build script that downloads the Protobuf compiler and Dart plugin to streamline .proto to .dart compilation.

Julien Scholz 10 Oct 26, 2022
Provides API to generate Dart source code

DartWriter DartWriter provides API to generate Dart source code. It can make your job easier while developing flutter/dart tools. You can also generat

Ahmet ÇELİK 11 Oct 24, 2022
This package binds to Cronet's native API to expose them in Dart.

Experimental Cronet Dart bindings This package binds to Cronet's native API to expose them in Dart. This is an HTTP Client Package with almost the sam

Google 103 Dec 9, 2022
A CLI tool to help generate dart classes from json returned from API

Json 2 Dart Command line utility Important note There is already a package called json2dart so this package will be called json2dartc ! This project w

Adib Mohsin 38 Oct 5, 2022
Volt is a wrapper over the Revolt API for easily writing bots using the Dart language.

Volt is a wrapper over the Revolt API for easily writing bots using the Dart language. It is currently in active development so not all of the functionality has yet been implemented.

null 8 Dec 13, 2022
An encapsulation made around openrouteservice API for Dart and Flutter projects.

An encapsulation made around openrouteservice API for Dart and Flutter projects. Made for easy generation of Routes and Directions on Maps, Isochrones, Time-Distance Matrix, Pelias Geocoding, POIs, Elevation and routing Optimizations using their amazing API.

Dhiman Seal 20 Oct 10, 2022
This is a dart library covering nearly 100% of the latest Planning Center public API.

Planning Center API for Dart Planning Center is an online platform for church management. It provides multiple apps for things like check-ins, service

null 1 Oct 6, 2022
Cache json map to local file with Dart:io. Read file with sync api.

local_cache_sync 一个非常简单易用的Flutter本地储存库,适用于在本地储存一列轻量数据(例如用户保存在本地的设备信息,或者缓存一系列用户信息)。 local_cache_sync的所有方法都是同步,而不是异步的。这意味着你不需要使用await就可以获取数据。在flutter中,这

null 16 Jun 24, 2022
Minimal Dart wrapper to interact with Some Random Api. Easy to use, simplified and lightweight.

SRA - Some Random Api Minimal Dart wrapper to interact with Some Random Api. Easy to use, simplified and lightweight. Getting started Add the package

Yakiyo 3 Jan 4, 2023
Dart wrapper via dart:ffi for https://github.com/libusb/libusb

libusb Dart wrapper via dart:ffi for https://github.com/libusb/libusb Environment Windows(10) macOS Linux(Ubuntu 18.04 LTS) Usage Checkout example Fea

Woodemi Co., Ltd 28 Dec 20, 2022
Extensible Dart interpreter for Dart with full interop

dart_eval is an extensible interpreter for the Dart language, written in Dart. It's powered under the hood by the Dart analyzer, so it achieves 100% c

Ethan 169 Dec 28, 2022
Quiver is a set of utility libraries for Dart that makes using many Dart libraries easier and more convenient, or adds additional functionality.

Quiver is a set of utility libraries for Dart that makes using many Dart libraries easier and more convenient, or adds additional functionality.

Google 905 Jan 2, 2023
Converts SVG icons to OTF font and generates Flutter-compatible class. Provides an API and a CLI tool.

Fontify The Fontify package provides an easy way to convert SVG icons to OpenType font and generate Flutter-compatible class that contains identifiers

Igor Kharakhordin 88 Oct 28, 2022
This library contains methods that make it easy to consume Mpesa Api.

This library contains methods that make it easy to consume Mpesa Api. It's multi-platform, and supports CLI, server, mobile, desktop, and the browser.

Eddie Genius 3 Dec 15, 2021
A Flutter library to make Rest API clients more easily. Inspired by Java Feing.

A Flutter library to make Rest API clients more easily. Inspired by Java Feing. Features Facilitated JSON encode and decode using common interfaces. F

null 2 Mar 15, 2022
JSON API parser for Flutter

Flutter Japx - JSON:API Decoder/Encoder Lightweight [JSON:API][1] parser that flattens complex [JSON:API][1] structure and turns it into simple JSON a

Infinum 23 Dec 20, 2022
🔍 👀 CLI utility to check last-visit of your CodeForces friends & much more, 🚀 powered by CodeForces API

JoJo ?? ?? CLI utility to check last-visit of your CodeForces friends & much more, ?? powered by CodeForces API Features Online Friends All Friends Pr

Tirth 5 Jul 20, 2020