问题
第一次渲染循环(draw call)花费的时间特别长,超过了1s,后续的渲染循环时间正常,10ms左右。
解决方案
- create的时候资源预热, 在create完成之后先draw一次 ✅
现象解释
OpenGL 资源首次上传/懒加载现象
OpenGL 资源(VBO/VAO/纹理/UBO)通常在 glBufferData、glTexImage2D 等 API 调用时分配和上传到 GPU。
但有些驱动/平台(尤其嵌入式)会延迟分配/上传,直到第一次真正用到(如第一次 glDrawElements 时),才把数据从内存搬到 GPU。
- 第一次 draw:所有 mesh/纹理/UBO 资源都要同步上传,GPU/驱动要做大量初始化和数据搬运,耗时很长(1s 甚至更久)。
- 后续 draw:资源已在 GPU,draw 只需调度和渲染,速度恢复正常(10ms)。