glDrawArrays()在Mac OS X上表现得很奇怪

时间:2013-08-21 22:44:00

标签: java opengl lwjgl

我正在练习使用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笔记本电脑上获得的是: enter image description here

我在Windows 7上运行AMD HD 6850显卡的是: enter image description here

为什么?我真的认为没有理由这样做,两个视频卡都支持OpenGL 2.0,这就是我正在使用的,对吗?

1 个答案:

答案 0 :(得分:0)

当我第一次开始使用VAO对象时,我花了很多时间来解决这个问题。至少可以说是非常令人沮丧的。

我最终弄明白了,我想这归结为兼容性配置文件中的一个小故障,要求您在调用glGenVertexArrays之前在着色器上使用glLinkProgram和glUseProgram,即使程序要求应该在Core之外放宽轮廓...

最简单的解决方案是简单地替换:

<{> GL30.glGenVertexArraysAPPLEVertexArrayObject.glGenVertexArraysAPPLE GL30.glBindVertexArray APPLEVertexArrayObject.glBindVertexArrayAPPLE GL30.glDeleteVertexArrays APPLEVertexArrayObject.glDeleteVertexArrayAPPLEGL30.glGenVertexArrays

。{

您还可以在使用{{1}}之前编译着色器并调用glUseProgram来解决此问题...