OpenGL ES: glBufferSubData заполняет сетки в VBO / IBO, затем glDrawElements отображает только первую сетку вместо всех - PullRequest
1 голос
/ 02 января 2011

Моя проблема, кажется, очень проста, но я просто не могу понять причину:

  • У меня есть вершина и буфер индекса, которые заполняются с помощью 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?

1 Ответ

1 голос
/ 02 января 2011

: D Нашел эту причину.Все, что я описал, действительно верно.Проблема в том, как сетки добавляются в VBO / IBO - индексы для каждой новой сетки были перезапущены с 0 !!Таким образом, рендерился только первый меш в VBO.

...