私はいくつかのopenGLラッパーを書いており、次のコードを実行しようとしています:
void some_func1() {
float vertices[] = {50.0, 50.0, 0.0, 20.0, 50.0, 0.0, 20.0, 60.0, 0.0};
glColor3f(1.0, 0.0, 0.0);
glInterleavedArrays(GL_V3F, 0, vertices);
}
void some_func2() {
int indices[] = {0,1,2};
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, indices);
}
void parent_func() {
some_func1();
some_func2();
}
しかし、openGL は 2 番目の関数で glDrawElements への呼び出しを取得していないようです。私のルーチンはウィンドウを開き、それを黒くクリアし、何も描画しません。奇妙なのは、このコードを実行することです
void some_func1() {
float vertices[] = {50.0, 50.0, 0.0, 20.0, 50.0, 0.0, 20.0, 60.0, 0.0};
int indices[] = {0,1,2};
glColor3f(1.0, 0.0, 0.0);
glInterleavedArrays(GL_V3F, 0, vertices);
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, indices);
}
void parent_func() {
some_func1();
}
期待どおりに動作します: 赤い三角形が描かれます。ドキュメントを調べて検索しましたが、glDrawElements が機能しない理由や、別の関数で呼び出された場合にデータが欠落する理由が見つかりません。何か案は?
参考までに: ホスト上の 32 ビット プロセッサである VirtualBox を介して Ubuntu 12.04 VM でこれを実行しており、freeglut がウィンドウ処理を行っています。また、VM の 3D レンダリングに関する問題を回避するために、LIBGL_ALWAYS_INDIRECT=1 を設定しました。(それが重要かどうかはわかりませんが... :))