저는 lwjgl을 사용하여 텍스트를 동적으로 렌더링하는 시스템을 만들고 있습니다. 렌더링에 사용할 텍스처를 자동으로 생성하도록 시스템을 설정 했으므로 이미지가 제대로 작동합니다. 여기에 문제가 있습니다.
2 개의 VBO 및 VAO를 초기화하는이 코드가 있는데, 둘 다 1024 개의 텍스트 문자 데이터를 처리 할 수 있도록 설정되어 있습니다.glBufferSubData가 0으로 채우기 버퍼를 만듭니다.
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의 데이터를 업데이트하려고하지만 아무것도 화면에 나타납니다. vbo에서 데이터를 검색하기 위해 glGetBufferSubData를 사용하면 0으로 채워지는 버퍼를 얻게됩니다. 그러나, 나는이 변경되면
GL15.glBufferSubData(GL15.GL_ARRAY_BUFFER, 0, dataBuffer);
는
GL15.glBufferData(GL15.GL_ARRAY_BUFFER, dataBuffer, GL15.GL_DYNAMIC_DRAW);
수하고 나는
GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, indices, GL15.GL_DYNAMIC_DRAW);
모든 화면에 표시 할 예정입니다
GL15.glBufferSubData(GL15.GL_ELEMENT_ARRAY_BUFFER, 0, indices);
을 변경하고 glGetBufferSubData 반환합니다 내가 원래 무엇을 넣었는지 . 나는 각 프레임을 이렇게하고 있기 때문에 glBufferData를 사용하고 싶지 않으며 각 프레임에 메모리를 다시 할당하고 싶지 않습니다. 내가 glBufferSubData가 작동하지 않게하는 원인은 무엇입니까?
감사합니다. 버퍼가 제대로 초기화되었는지 확인한 후에 모든 것이 제대로 작동하는 것 같습니다. 링크 된 페이지의 버퍼 재 지정 기술이 텍스처에서 텍스트를 렌더링하는 것과 같이 거의 모든 부분이 2 차원 인 경우에 눈에 띄는 성능 향상을 가져다 줄까요? – Unknownloner