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);

ある観点からは、特定のパラメーターごとに何百もの関数を使用するよりも、値を取得する関数を 1 つだけ使用する方が簡単です。他の観点から言えば、もちろん、型をキャストするのは少し醜いです。

しかし、バッファ ID に GLint を使用しなかった理由がわかりません。

とにかく - glGet... 関数を呼び出すべきではありません。それらは遅く、多くの場合、GPU が前のコマンドを完了するのを待つ必要があります。つまり、CPU はその間アイドル状態で待機します。

于 2012-05-19T18:29:34.930 に答える