glGenTextures returns glDeleteTextures 后不久的未定义纹理

glGenTextures returns an undefined texture soon after glDeleteTextures

我遇到了一个奇怪的问题,我以未定义但不知何故有效的纹理结尾。应用此纹理的网格是黑色的。 glIsTexture(textureId) 这个纹理的方法 returns 1 (!) 但纹理显然是错误的。它有未定义的大小。

我的 iOS 应用程序在很短的时间间隔内创建了多个纹理,但始终在主线程上。所描述的情况不寻常,难以重现,并且仅在以下特定情况下发生:

在我看来,这就像 OpenGL 驱动程序试图创建一个新的纹理,而旧的纹理没有被完全擦除。这可能吗?

问题很简单 - 在调用 glTexImage2D 和设置纹理之前未绑定纹理。

我正在 OpenGL 库上使用一组包装器方法。它们的目的是减少驱动程序冗余状态更改的次数。其中一个包装器阻止将具有相同 ID 的纹理绑定到纹理单元,如果它之前被标记为绑定的话。

在某些情况下,当回收相同的 ID 时,包装器方法仍然是 "remembering" 旧的纹理 ID,并且再次防止绑定。

重新假设 - 在这种情况下,glDeleteTextures 后跟 glGenTextures.

完全没有问题