iOS glGenerateMipmap 是同步的,还是可能是异步的?

bra*_*jam 5 opengl-es mipmaps ipad ios

我正在开发一个在 OpenGL ES 中使用大纹理的 iPad 应用程序。当场景第一次加载时,我在天花板上看到一个大的黑色伪影,持续几帧,如下图所示。就好像更高级别的 mipmap 尚未填充。在后续帧中,天花板正确显示。

当我开始使用 mipmapping 时,这个问题才开始出现。一种可能的解释是 glGenerateMipmap() 调用异步执行其工作,生成一些 mipmap 创建工作程序(在单独的进程中,或者可能在 GPU 中)并返回。

这是可能的,还是我叫错了树?

不存在更高的 mipmap 级别

Tom*_*mmy 2

应该是同步的;OpenGL 本身没有任何真正的线程概念(除了 CPU 和 GPU 之间的隐式异步对话)。

诊断的一个好方法是切换到GL_LINEAR_MIPMAP_LINEAR. 如果确实是低分辨率 mip 贴图稍后才到达的问题,那么您会看到天花板上的麻烦区域相互混合,而不是当前的黑色或正确效果。

根据输出的第二个猜测是某种深度缓冲区清除问题。