0

我正在使用 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,这就是我正在使用的,对吧?

4

1 回答 1

0

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

我最终想通了,我猜它归结为兼容性配置文件中的一个故障,它要求您在调用 glGenVertexArrays 之前在着色器上使用 glLinkProgram 和 glUseProgram,即使程序要求应该在核心配置文件之外放宽。 .

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

GL30.glGenVertexArraysAPPLEVertexArrayObject.glGenVertexArraysAPPLE GL30.glBindVertexArrayAPPLEVertexArrayObject.glBindVertexArrayAPPLE GL30.glDeleteVertexArraysAPPLEVertexArrayObject.glDeleteVertexArrayAPPLE

您还可以通过编译着色器并在使用之前调用 glUseProgram 来解决问题GL30.glGenVertexArrays...

于 2013-09-07T01:19:06.137 回答