OpenGL类型不匹配

时间:2012-05-19 18:21:38

标签: opengl

为什么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 *。

1 个答案:

答案 0 :(得分:2)

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

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

从一个角度来看 - 只有一个函数可以获取值,而不是每个特定参数的数百个函数更简单。 形成其他观点 - 当然,施放类型有点难看。

但不知道为什么他们没有将GLint用于缓冲区ID。

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