通常,诸如纹理、帧缓冲区、着色器或顶点数组之类的对象是通过首先生成名称、然后绑定它、然后设置参数来设置的:
GLuint texture_id;
glGenTextures(1, &texture_id);
glBindTexture(GL_TEXTURE_2D, texture_id);
glTexParameteri(GL_TEXTURE_2D, ...);
glTexImage2D(GL_TEXTURE_2D, ...);
值得注意的是,
glGenTextures
实际上并没有创建纹理对象,只是为其创建一个名称(ID号),并将其标记为已使用。我可以自己选择一个已知未使用的号码吗,如下面的代码所示?
// no other textures have been created so all numbers are available
glBindTexture(GL_TEXTURE_2D, 42);
glTexParameteri(GL_TEXTURE_2D, ...);
glTexImage2D(GL_TEXTURE_2D, ...);
在兼容性上下文中,您可以只组成一个(非零)数字并假装它是一个对象。在核心上下文中,您必须生成它们。