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

OpenGL/Skia渲染GL_TEXTURE_EXTERNAL_OES到GL_TEXTURE_2D时帧冻结故障排查

Android Camera2+OpenGL/Skia 帧渲染异常问题排查

问题背景

原本基于OpenGL的Android Camera2应用运行正常:相机帧输出到SurfaceTexture(对应OpenGL的GL_TEXTURE_EXTERNAL_OES纹理),通过直通着色器可直接渲染到1920x1080预览EGLSurface与4000x2000录像EGLSurface。

改造后异常表现

为实现在相机帧上绘制图形(如红框),引入Skia并设计新渲染流程:

Camera → GL_TEXTURE_EXTERNAL_OES → Skia渲染至绑定FBO1的GL_TEXTURE_2D离屏纹理(绘制图形) → GL_TEXTURE_2D → 直通着色器 → 预览/录像EGLSurface

实际运行时仅显示首帧,后续画面冻结并出现奇怪的画面错乱artifacts。

核心代码逻辑

  • onFrame(..):相机帧输入后,先调用Skia完成渲染,再将生成的GL_TEXTURE_2D纹理渲染到输出Surface
  • SkiaRenderer::renderFrame(..):将GL_TEXTURE_EXTERNAL_OES纹理转为Skia纹理,绘制图形后输出到绑定FBO1的GL_TEXTURE_2D离屏纹理
  • OpenGLRenderer::renderTextureToSurface(..):将处理后的GL_TEXTURE_2D纹理渲染到目标EGLSurface
  • PassThroughShader::draw(..):使用sampler2D类型的直通着色器完成最终渲染

疑似问题方向

目前无法定位具体原因,怀疑是以下情况之一:

  • Skia操作后未正确重置OpenGL纹理/帧缓冲(FBO)的绑定状态
  • 内存资源未正确释放或复用导致的泄漏问题
  • 着色器中采样器类型与纹理类型不匹配引发错误
  • 相机帧的变换矩阵未在Skia渲染流程中正确应用

复现步骤

  • 克隆指定PR分支
  • 执行命令:yarn && cd example && yarn
  • 在Android Studio中打开example/android项目

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 06:55:26