Мне удалось заставить VBO работать с одной сеткой. Сначала я настроил opengl:
//....
GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY);
Для каждого меша я генерирую буфер (два вызова этой функции на меш):
vertBuffer = GL15.glGenBuffers( BufferUtils.createIntBuffer(1));
//same idea for faceBuffer
Я помещаю данные сетки в FloatBuffers и IntBuffers. Затем я должен отправить их в opengl:
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vertBuffer)
GL15.glBufferData(GL15.GL_ARRAY_BUFFER, myVertPositions,GL15.GL_STATIC_DRAW);
//same idea for faces.
Примечание. Все вышеперечисленные шаги выполняются только один раз.
Наконец есть рендеринг:
//...
int stride = 0; //0 = compact arrays.
int offset = 0; //Each mesh would need a different offset?
GL11.glVertexPointer(3, GL11.GL_FLOAT, stride, offset);
GL12.glDrawRangeElements(GL11.GL_TRIANGLES, 0, numVerts,
numFaces*3, GL11.GL_UNSIGNED_INT, offset);
//Using the "buffer versions" of these functions throws
//"Cannot use Buffers when Array Buffer Object is enabled"
//Whether or not glEnableClientState is called.
Любая новая сетка, которую я добавляю, перезаписывает старую сетку. Помещение ВСЕХ моих мешей в один и тот же буфер звучит неэффективно. Как еще я могу заставить несколько мешей сосуществовать?