2015-04-17 51 views
0

我想用lwjgl和OpenGL在屏幕中间画一个三角形。我当前的代码如下所示:如何在lwjgl中绑定一个缓冲区

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

您误解了glCreateBuffers()函数。相反,结合缓冲本身OpenGL,则生成一个ID:

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缓冲区。

有关信息,请参阅有关Vertex Buffer的LWJGL Wikipage

+0

感谢人,现在这个工作,但它仍然没有绘制任何东西,虽然g_vertex_buffer_data是正确的,并调用glDrawArrays()。任何其他建议? – Dynamitos

+1

那么,我发现有一个glfwWindowHint调用将OpenGL-Version设置为3.3,这是它没有绘制任何东西的原因。但仍然,感谢您的帮助 – Dynamitos

相关问题