Last updated:
0 purchases
flutter opengl view
flutter_opengl_view #
The flutter openGL plugin enables openGL rendering on Android and iOS.
With this plugin, you can use native (Android, iOS) openGL calls as well as
C++ openGL code.
Usage #
Add plugin in pubspec.yaml: #
# pubspec.yaml
dependencies:
flutter:
sdk: flutter
flutter_opengl_view: ^0.0.1
copied to clipboard
Add plugin in Flutter code: #
import 'package:flutter_opengl_view/flutter_opengl_view.dart';
Widget build(BuildContext context) {
/* use a ffi call to your c++ code, to get a proper pointer.
* myCppPointer = 0 will use ios/android openGL rendering, but not c++.
*/
int myCppPointer = 0;
FlutterOpenglView openGlView = const FlutterOpenglView(
cPlusPlusPointer: myCppPointer,
useTextureView: true
);
return MaterialApp(
home: Scaffold(
body: SizedBox(
width: 300.0,
height: 300.0,
child: openGlView // Add the openGL plugin in arbitrary parts of the widget tree.
),
),
);
}
copied to clipboard
If your render with native iOS/Android code (objc/Java), cPlusPlusPointer can be set to zero.
useTextureView = true (default) uses a TextureView on Android, while useTextureView = false uses an GLSurfaceView.
GLSurfaceViews can not be rotated, for example but lead to higher performance. In addition, they do not allow to properly overlap with other views or widgets.
Own C++ class #
To use your own c++ opengl code, you must extend the class FlutterOpenGL:
# header for MyFlutterOpenGL class:
class MyFlutterOpenGL : public FlutterOpenGL {
public:
MyFlutterOpenGL();
virtual ~FlutterGL();
void init(int width, int height);
void stopDrawFrame();
void onDrawFrame();
bool isReady();
};
copied to clipboard
onDrawFrame() is continually called by the openGL thread.
init() is called by the openGL thread as well and can be used to initialize resources and configure openGL.
C++ / Dart Example Interface #
Interfacing c++ from dart can look as follows:
C++ Part: #
On the c++ side, you have to obtain a pointer to an FlutterOpenGL instance:
#include <cstdint>
#if __cplusplus
#if defined(_WIN32)
#define DART_EXPORT extern "C" __declspec(dllexport)
#else
#define DART_EXPORT \
extern "C" __attribute__((visibility("default"))) __attribute((used))
#endif
// Returns a pointer of an FlutterOpenGL object, casted to int64_t.
DART_EXPORT int64_t getFlutterOpenGL() {
MyFlutterOpenGL* flutterOpenGl = new MyFlutterOpenGL();
int64_t flutterOpenGlReference = reinterpret_cast<int64_t>(flutterOpenGl);
return flutterOpenGlReference;
}
#endif // __cplusplus
copied to clipboard
Dart Part: #
Dart retrieves the c++ pointer (previously casted to Int64) and hands it over to the constructor.
final DynamicLibrary myFfiLibrary = Platform.isAndroid
? DynamicLibrary.open("myFfiLibrary.so") // same name as in CMake file
: DynamicLibrary.process();
/// Returns a pointer to an FlutterOpenGL object and can be handed over to the dart constructor of
/// FlutterOpenglView().
final int Function() getFlutterOpenGL = myFfiLibrary
.lookup<NativeFunction<Int64 Function()>>("getFlutterOpenGL")
.asFunction();
copied to clipboard
More Information: #
Use C++ code in Android #
In your own plugin or application, add the c++ source code destination to your build.gradle.
Check Flutter c-interop page for more details.
use C++ for IOS in XCode #
XCode: Select "Compile Source As" variable in compiler settings and set its value to "Objective-C++"
change Obj-C file to .mm
add c++ sources within XCode: Runner -> Target -> Build Phases
CheckFlutter c-interop page for more details.
Usage from another plugin: #
create flutter plugin that will contain your C++ openGL code
flutter create -a java -i objc --template=plugin
add flutter_opengl_view to your created plugin
(in pubspec.yaml, dependencies section)
add Key to
Contact #
for more information, feel free to contact me: dev @ jscheer.de
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.