我正在製作一個使用lwjgl動態呈現文本的系統。我有一個系統設置爲自動生成一個紋理用於渲染,並且圖像確實有效。問題在哪裏。
我有這個代碼來初始化2個VBO和一個VAO,兩者都被設置爲能夠處理1024個文本字符值的數據。glBufferSubData導致緩衝區填充零
vbo = GL15.glGenBuffers(); //Main VBO to hold data
vao = GL30.glGenVertexArrays();
GL30.glBindVertexArray(vao);
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vbo);
GL15.glBufferData(vbo, dataBuffer, GL15.GL_DYNAMIC_DRAW);
GL20.glVertexAttribPointer(0, 3, GL11.GL_FLOAT, false, 36, 0); //Position
GL20.glVertexAttribPointer(1, 4, GL11.GL_FLOAT, false, 36, 12); //Color
GL20.glVertexAttribPointer(3, 2, GL11.GL_FLOAT, false, 36, 28); //Texture Coordinates
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
GL30.glBindVertexArray(0);
indvbo = GL15.glGenBuffers(); //VBO to hold indices
GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, indvbo);
GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, indices, GL15.GL_DYNAMIC_DRAW);
GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);
我嘗試使用此代碼
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vbo);
dataBuffer.clear();
for(Vertex vert : vertices) { //Vertex is a custom class to hold vertex data.
dataBuffer.put(new float[] { //Put position, color, and texture coordinates in buffer
vert.x,
vert.y,
vert.z,
vert.r,
vert.g,
vert.b,
vert.a,
vert.u,
vert.v
});
}
dataBuffer.flip();
GL15.glBufferSubData(GL15.GL_ARRAY_BUFFER, 0, dataBuffer);
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, indvbo);
indices.clear();
indices.put(indArray.getIndices());
indices.flip();
GL15.glBufferSubData(GL15.GL_ELEMENT_ARRAY_BUFFER, 0, indices);
GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);
更新VBO的數據,但它沒有出現在屏幕上。如果我使用glGetBufferSubData從vbo檢索數據,我會得到一個填充零的緩衝區。但是,如果我改變
GL15.glBufferSubData(GL15.GL_ARRAY_BUFFER, 0, dataBuffer);
是
GL15.glBufferData(GL15.GL_ARRAY_BUFFER, dataBuffer, GL15.GL_DYNAMIC_DRAW);
,我改變
GL15.glBufferSubData(GL15.GL_ELEMENT_ARRAY_BUFFER, 0, indices);
是
GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, indices, GL15.GL_DYNAMIC_DRAW);
一切都將出現在屏幕上,並glGetBufferSubData將返回我最初放入的東西。我不想使用glBufferData,因爲我正在這樣做每幀,我不想重新分配每幀的內存。我在做什麼,導致glBufferSubData無法正常工作?
謝謝,確保我正確初始化緩衝區後,一切似乎都正常。在您鏈接的頁面上,緩衝區重新指定技術是否會實際提高性能,例如從紋理渲染文本,其中所有內容大都是2d? – Unknownloner