Моя проблема, кажется, очень проста, но я просто не могу понять причину:
- У меня есть вершина и буфер индекса, которые заполняются с помощью glBufferSubData. Есть несколько мешей, которые заполняются один за другим в этом большом VBO и соответствующем ему IBO
- Затем я пытаюсь визуализировать эти маленькие сетки с помощью glDrawElements один за другим
Проблема в том, что только первая сетка рендерится - и несколько раз - в местах, где каждая из этих разных сеток должна быть !!!
Следующая информация может быть полезна:
Я создаю VBO таким образом
gl.glGenBuffers(1, buffers_, 0);
gl.glBindBuffer(GL11.GL_ARRAY_BUFFER, buffers_[0]);
gl.glBufferData(GL11.GL_ARRAY_BUFFER, sizeInBytes, null, GL11.GL_DYNAMIC_DRAW);
Затем каждая сетка заполняется в VBO следующим образом
gl.glBindBuffer(GL11.GL_ARRAY_BUFFER, name);
gl.glBufferSubData(GL11.GL_ARRAY_BUFFER, startOffsetInBytes, numBytesToCopy, nioBuffer);
И сетка визуализируется в этой моде
- связать VBO / IBO и установить соответствующие состояния клиента
- затем устанавливаем "указатели" вершин, нормалей и текстовых координат - они указывают на начало VBO плюс их смещения в "структуре" вершин
- и звоните
gl.glDrawElements(GL10.GL_TRIANGLES, indicesNum, GL10.GL_UNSIGNED_SHORT, startIndexOffsetInBytes);
- затем, наконец, отсоедините VBO / IBO и отключите состояния клиентов
Я отладил код и уверен, что sizeInBytes
, startOffsetInBytes
, numBytesToCopy
и startIndexOffsetInBytes
- правильные значения (в байтах :))), а indicesNum
- количество индексов / вершин в сетка (для рендеринга).
Одно подозрительное место - установка указателей vertex / normal / texcoord - они устанавливаются только один раз - и устанавливаются в начало VBO. Может быть, мне нужно устанавливать их каждый раз перед вызовом glDrawElements?