我正在练习使用Java和LWJGL在OpenGL中使用VBO(使用本教程,基本上复制它的代码:http://www.arcsynthesis.org/gltut/index.html),现在发生了一些非常奇怪的事情。
我有一个窗口设置,这是我的render()函数,在主循环中调用:
public void render() {
FloatBuffer buffer = BufferUtils.createFloatBuffer(3 * 3);
buffer.put(-1);
buffer.put(-1);
buffer.put(0);
buffer.put(0);
buffer.put(1);
buffer.put(0);
buffer.put(1);
buffer.put(-1);
buffer.put(0);
buffer.flip();
int vbo = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, buffer, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, false, 3 * 4, 0);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableVertexAttribArray(0);
}
正如您所看到的,这是一个非常简单的代码,它应该绘制一个三角形。但是我在运行Intel HD 4000显卡的Mac OS X Mountain Lion笔记本电脑上获得的是:
我在Windows 7上运行AMD HD 6850显卡的是:
为什么?我真的认为没有理由这样做,两个视频卡都支持OpenGL 2.0,这就是我正在使用的,对吗?
答案 0 :(得分:0)
当我第一次开始使用VAO对象时,我花了很多时间来解决这个问题。至少可以说是非常令人沮丧的。
我最终弄明白了,我想这归结为兼容性配置文件中的一个小故障,要求您在调用glGenVertexArrays之前在着色器上使用glLinkProgram和glUseProgram,即使程序要求应该在Core之外放宽轮廓...
最简单的解决方案是简单地替换:
<{>GL30.glGenVertexArrays
与APPLEVertexArrayObject.glGenVertexArraysAPPLE
GL30.glBindVertexArray
APPLEVertexArrayObject.glBindVertexArrayAPPLE
GL30.glDeleteVertexArrays
APPLEVertexArrayObject.glDeleteVertexArrayAPPLE
与GL30.glGenVertexArrays
。{
您还可以在使用{{1}}之前编译着色器并调用glUseProgram来解决此问题...