开发板renderer第一次draw花费的时间很长

Posted by shensunbo on February 2, 2026

问题

第一次渲染循环(draw call)花费的时间特别长,超过了1s,后续的渲染循环时间正常,10ms左右。

解决方案

  • create的时候资源预热, 在create完成之后先draw一次 ✅

现象解释

OpenGL 资源首次上传/懒加载现象

OpenGL 资源(VBO/VAO/纹理/UBO)通常在 glBufferDataglTexImage2D 等 API 调用时分配和上传到 GPU。

但有些驱动/平台(尤其嵌入式)会延迟分配/上传,直到第一次真正用到(如第一次 glDrawElements 时),才把数据从内存搬到 GPU。

  • 第一次 draw:所有 mesh/纹理/UBO 资源都要同步上传,GPU/驱动要做大量初始化和数据搬运,耗时很长(1s 甚至更久)。
  • 后续 draw:资源已在 GPU,draw 只需调度和渲染,速度恢复正常(10ms)。