如何在 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。
我正在尝试使用 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。