OpenGL会生成一个纹理 - \framebuffer-\shader- etc ID,其值为0?

Vik*_*ehr 2 opengl opengl-es

将生成的ID的glGenTextures(...),glGenFramebuffers(...)永远是0?更具体地说,我可以使用零作为未初始化纹理的id,还是需要使用-1?

Joe*_*Joe 6

没有glGen*函数会返回0,尽管有时它会引用默认对象.在纹理的情况下,您可以在glDeleteTextures的文档中找到相应的信息.在这种情况下,0是默认纹理,永远不会返回glGenTextures.


Nic*_*las 5

我需要使用-1吗?

您不能使用 -1,因为对象名称是无符号整数。

由 glGenTextures(...)、glGenFramebuffers(...) 生成的 id 是否会为 0?

不。

更具体地说,我可以使用零作为未初始化纹理的 id

对于纹理,是的。

对于大多数 OpenGL 对象,对象 0 相当于一个 NULL 指针:它不是一个对象。但是,对于某些OpenGL 对象,对象 0 确实具有含义

例如,帧缓冲区对象 0 是默认的帧缓冲区。从技术上讲,纹理对象 0 仍然是一个纹理。然而,纹理对象 0 的行为是如此古怪,以至于最好完全忽略这一点并且永远不要明确使用纹理对象 0。