You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Linux平台如何使用Texture组件展示原生OpenGL渲染内容

Flutter Linux平台OpenGL纹理绑定Texture组件实现步骤

操作流程

你已经完成原生C++ OpenGL三角形绘制逻辑的前提下,按以下步骤完成和Flutter Texture组件的绑定:

  • 第一步:获取Flutter桌面纹理注册器
    从你初始化的FlutterDesktopEngineRef实例中调用FlutterDesktopEngineGetTextureRegistrar方法,拿到全局纹理注册器实例FlutterDesktopTextureRegistrar*。
  • 第二步:注册外部纹理
    构造FlutterDesktopTextureInfo结构体,按以下参数配置:
    • 把type字段设置为kFlutterDesktopOpenGLTexture,指定是OpenGL纹理类型
    • 实现gl_texture.callback回调函数,函数返回值为你当前已完成绘制的OpenGL纹理ID,同时将纹理的宽、高赋值给回调的出参
      调用FlutterDesktopRegisterExternalTexture方法完成纹理注册,该方法返回的64位无符号整数就是你需要传给Flutter Texture组件的texture ID。
  • 第三步:配置OpenGL上下文共享
    Flutter桌面端默认会创建一个GLFW上下文用于自身渲染,你需要在引擎初始化主线程中调用glfwGetCurrentContext()拿到Flutter的GL上下文,创建你自己的绘制线程的GL上下文时,将该上下文设置为共享上下文,保证你在绘制线程生成的OpenGL纹理资源可以被Flutter渲染线程访问。
  • 第四步:离屏渲染到纹理并通知更新
    你自己的C++绘制逻辑中,创建对应尺寸的2D纹理,绑定FBO将三角形绘制到该纹理上,每完成一帧绘制后,调用FlutterDesktopMarkTextureFrameAvailable方法,传入第二步注册得到的texture ID,通知Flutter拉取最新的纹理帧。
  • 第五步:Dart侧渲染
    直接在Dart代码中使用Texture组件,将第二步拿到的texture ID赋值给组件的textureId参数即可,用法和移动端完全一致。

注意事项

  • 所有OpenGL相关操作必须在对应的上下文所属线程执行,禁止跨线程调用GL接口,否则会出现资源访问异常
  • 纹理格式推荐使用RGBA8,无需额外配置即可被Flutter正常识别
  • 页面销毁或者不再使用该纹理时,记得调用FlutterDesktopUnregisterTexture方法注销纹理,避免内存泄漏

内容的提问来源于stack exchange,提问作者Josh Chiu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 22:54:01