2015-04-17 48 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

相關問題