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

时间:2013-05-22 08:13:21

标签: opengl opengl-es

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

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:4)

  

我需要使用-1吗?

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

  

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

没有

  

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

对于 textures ,是的。

对于 most OpenGL objects,对象0相当于一个NULL指针:它不是一个对象。但是,对于一些 OpenGL对象,object 0 does have meaning

例如,

Framebuffer对象0是默认的帧缓冲区。从技术上讲,纹理对象0仍然是纹理。然而,纹理对象0的行为是如此古怪,以至于最好完全忽略它,并且从不显式使用纹理对象0。