如何在 lwjgl 中绑定缓冲区

How to bind a buffer in lwjgl

我正在尝试使用 lwjgl 和 OpenGL 在屏幕中间绘制一个三角形。我当前的代码如下所示:

int vertexBuffer = glCreateBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, g_vertex_buffer_data, GL_STATIC_DRAW);
                              //and initalised FloatBuffer

主循环:

while (glfwWindowShouldClose(windowID) == GL_FALSE) {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
        glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, vertexBuffer);
        glEnableVertexAttribArray(0);
        glDrawArrays(GL_TRIANGLES, 0, 3);
        glDisableVertexAttribArray(0);
        glfwSwapBuffers(windowID);
        glfwPollEvents();
    }

你能帮帮我吗?

您误解了 glCreateBuffers() 函数。不是将缓冲区本身绑定到 OpenGL,而是生成一个 ID:

IntBuffer buffer = BufferUtils.createIntBuffer(1);
glCreateBuffers(buffer);
int id = buffer.get(0);

您也可以不带参数调用 glCreateBuffers() 并使用 return 值作为 ID:

int id = glCreateBuffers();

要将数据写入此缓冲区,您首先必须绑定它,这只是告诉 OpenGL 您要写入绑定的报价。

glBindBuffer(GL_ARRAY_BUFFER, id);

如你所见,传入生成的ID,绑定对应的buffer。

接下来您可以写入 OpenGL 缓冲区,如下所示:

glBufferData(GL_ARRAY_BUFFER, g_vertex_buffer_data, GL_STATIC_DRAW);

这会将 g_vertex_buffer_data 的内容发送到 GPU 上的 OpenGL 上下文。 g_vertex_buffer_data 包含您的顶点数据(模型数据)并且您不想创建此 java.nio.Buffer 的缓冲区,但让 OpenGL 为 GPU 缓冲区生成一个 ID,然后发送您的 java.nio.Buffer 到 GPU 缓冲区。

有关信息,请查看有关顶点缓冲区的 LWJGL Wikipage