我正在编写一些 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 没有在第二个函数中调用 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 正在做我的窗口处理。我还设置了 LIBGL_ALWAYS_INDIRECT=1 来解决 VM 的 3D 渲染问题。(不确定这些是否重要,但...... :))