如题,如何在Flutter中使用OpenGL,我希望通过外接纹理的方式,在Flutter OHOS中使用OpenGL,在 iOS 平台,提供了 FlutterTexture 协议机制,只要将实现 FlutterTexture 协议对象注册进 Flutter,获取一个 Texture ID 传递给 Dart 层的 Texture 组件,就可以将 C++ 中OpenGL的渲染结果显示在 Flutter 中。
- (void)render:(FlutterResult)result {
if(d_glRender != nil) {
glBindFramebuffer(GL_FRAMEBUFFER, d_frameBuffer);
glClearColor(0, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);
d_glRender->render();
[d_textures textureFrameAvailable:d_flutterTetxture];
result(@(1));
} else {
result(@(0));
}
}
上述的 OBJC代码中,d_glRender 是一个进行 OpenGL 渲染的 C++对象,首先绑定创建的 Framebuffer,然后调用 d_glRender 的 render 函数就可以完成渲染到纹理的工作,然后调用d_textures 的 textureFrameAvailable 方法通知Flutter 更新显示纹理。这个机制在 iOS 上运行的很好,我想知道在Flutter OHOS中有没有类似的机制,我查看了Flutter 中test_camera、video_player_ohos、test_picture 三个例子的代码,都不涉及到对 OpenGL 纹理的使用,想请教一下有没有Flutter OHOS 使用OpenGL的渲染纹理作为外接纹理的例子。
本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。
OHOS没有直接的外接纹理机制,但可以通过自定义插件和Native实现来模拟iOS的纹理渲染流程,这里写了个简单的demo,应该可以给你提供一点点实现思路,可以通过以下方式实现类似iOS的外接纹理机制:
或者可以参考Flutter OHOS外接纹理适配,参考链接:
https://gitee.com/openharmony-sig/flutter_samples/blob/master...