为什么glGenLists在glGenTextures使用引用参数时直接返回值?

时间:2011-05-21 12:53:31

标签: opengl

可能是一点OCD,但我觉得在OpenGL中glGenLists直接返回列表ID,而glGenTextures使用引用参数来反馈ID时,我觉得很烦人。

GLuint glGenLists(GLsizei range);

void glGenTextures(GLsizei n, GLuint * textures);

这种不一致背后有什么好理由吗?

2 个答案:

答案 0 :(得分:3)

Christian Rau谈到了正确的主题。

glGenLists保证返回值排序的原因是字符串绘制。使用模型需要glListBase + glCallLists来允许简单的

// ascii model
// init
asciiBase = glGenLists(128);
// usage
glListBase(asciiBase);
glCallList(strlen(string), GL_UNSIGNED_BYTE, string);

对于该使用模型,您确实要求范围是连续的。没有为纹理设想这样的模型,因此删除了获得连续名称的要求,因为它简化了GL的实现。

作为额外的花絮,请注意glGen *调用都是可选的。没有什么能阻止你这样做:

glBindTexture(GL_TEXTURE_2D, 5);
// never called glGenTextures to get that 5!!!

答案 1 :(得分:2)

我认为直接返回的glGenLists更像是过去的遗留物。 glGenTextures使用指针的原因是,您可以获得多个纹理名称。但对于不需要的glGenLists,由于对glGenLists(n)的单次调用生成的n列表ID保证具有连续值,因此您可以有效地使用glCallLists和glListBase。所以你只需知道第一个值。

但是不保证纹理ID具有此属性,因此您需要所有n个值,因此需要数组。我想在引入纹理对象(在显示列表之后)时,他们意识到,这个调用更通用,因为现在你没有实现保证连续纹理ID(这也没有任何优点)。