是否有可能强制glGenTextures不重复使用已删除的ID?

时间:2017-09-28 19:39:12

标签: opengl opengl-es

我有一个问题,当我破坏openGL上下文并稍后重新创建它并调用glGenTextures时,它已经给了我已经过去的id(s)。这是一个问题,因为这些ID可能仍然分配给一些纹理包装器,这些纹理包装器在某些后台线程中还没有时间调用glDeleteTextures。因此,当这些后台线程调用glDeleteTextures时,它们将删除新纹理:(

即使在删除/重新创建OpenGl上下文后,强制glGenTextures也始终自动递增?

3 个答案:

答案 0 :(得分:1)

没有。您无法更改OpenGL API实现。

通过不删除上下文直到完成所有使用它的操作,无论线程使用该上下文,都可以轻松解决问题。

顺便说一下,删除和重新创建上下文是很昂贵的。我没有理由这样做。

答案 1 :(得分:1)

无法使OpenGL上下文记住哪个对象命名了最后使用的上下文。但是,这并不意味着无法记住哪些名称与哪些上下文有关。这很容易。

每个要删除的纹理对象都应该有两条信息:纹理名称(整数)和表示创建对象的上下文的值。当你去删除那个纹理时,你首先检查上下文是否与创建它的上下文相同。如果没有,那么你就把它放在地板上。

最简单的方法是让每次创建上下文时都会增加一个原子整数。每次创建纹理时,您还应该获得与其一起的上下文整数。删除纹理时,如果纹理中的整数上下文与当前上下文不匹配,则不要删除它。

答案 2 :(得分:-1)

根据Khronos specification

  

调用glGenTextures返回的纹理名称不会被后续调用返回,除非它们首先使用glDeleteTextures删除。

因此您无法获得仍在使用的ID。

相关问题