0

为什么 OpenGL 中有不匹配的类型?

例如,如果我有一个顶点缓冲区对象,

GLuint handle = 0;
glGenBuffers(1, &handle_); // this function takes (GLsizei, GLuint*)

现在如果我想知道当前绑定的缓冲区

glGetIntegerv( GL_ARRAY_BUFFER_BINDING, reinterpret_cast<GLint *>(&handle ) ); // ouch, type mismatch

为什么没有 glGetUnsignedIntegerv 或

让 glGenBuffers 采用 GLint * 代替。

4

1 回答 1

2

这是因为 glGetIntegerv 函数旨在从 OpenGL 中获取任何整数类型的信息。它还包括 GLint 类型值(负值)。它还包括多个组件值,例如 GL_VIEWPORT:

GLint viewport[4];
glGetIntegerv(GL_VIEWPORT, viewport);

从一个角度来看 - 只有一个函数来取回值更简单,而不是每个特定参数都有数百个函数。换个角度看——当然,强制转换类型有点难看。

但不知道他们为什么不使用 GLint 作为缓冲区 ID。

无论如何 - 你不应该调用任何 glGet... 函数。它们很慢,通常需要等待 GPU 完成先前的命令——这意味着 CPU 将在这段时间内等待空闲。

于 2012-05-19T18:29:34.930 回答