为什么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 *。
答案 0 :(得分:2)
这是因为glGetIntegerv函数旨在从OpenGL中获取任何整数类型的信息。它还包括GLint类型值(负值)。它还包括多个组件值,如GL_VIEWPORT:
GLint viewport[4];
glGetIntegerv(GL_VIEWPORT, viewport);
从一个角度来看 - 只有一个函数可以获取值,而不是每个特定参数的数百个函数更简单。 形成其他观点 - 当然,施放类型有点难看。
但不知道为什么他们没有将GLint用于缓冲区ID。
无论如何 - 你不应该叫任何glGet ...函数。它们很慢并且通常需要等待GPU完成之前的命令 - 这意味着CPU将在那段时间等待空闲。