我寫一些openGL的包裝,我試圖運行下面的代碼:調用glDrawElements glInterleavedArrays不工作
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不起作用的原因,或者如果在另一個函數中調用,會以某種方式錯過數據。有任何想法嗎?
僅供參考:我通過VirtualBox,主機上的32位處理器在Ubuntu 12.04 VM上運行此操作,並且freeglut正在處理我的窗口。我還設置了LIBGL_ALWAYS_INDIRECT = 1來解決VM的3D渲染問題。 (不確定是否有任何問題,但是... :))
啊哈,這是我的理解,'glnterleavedArrays'實際上確實存儲在緩衝區中的數組。這非常合理。謝謝! – trlemburg
@trlemburg但最終如何呢。你不告訴它任何大小,它應該怎麼知道要複製什麼? –