如何在lwjgl中绑定缓冲区

时间:2015-04-17 13:36:07

标签: java opengl 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();
    }

你能帮帮我吗?

1 个答案:

答案 0 :(得分:1)

您误解了glCreateBuffers()功能。您可以生成ID:

,而不是将缓冲区本身绑定到OpenGL
IntBuffer buffer = BufferUtils.createIntBuffer(1);
glCreateBuffers(buffer);
int id = buffer.get(0);

您也可以不带参数调用glCreateBuffers(),并将返回值用作ID:

int id = glCreateBuffers();

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

glBindBuffer(GL_ARRAY_BUFFER, id);

如您所见,您传入生成的ID,以绑定相应的缓冲区。

接下来,您可以写入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