Большой вершинный буфер данных
Я пытаюсь нарисовать много квадратов, загружая данные вершин (координаты позиции и текстуры) в VBO. Моя проблема, когда я пытаюсь загрузить все эти вершины, по какой-то причине он пропускает некоторые квадраты, оставляя пустое пространство. если я уменьшу количество квадратов, то этой проблемы не возникнет.
Вот как я пытаюсь настроить VBO:
float[] vertexData = new float[<large number>];
//fill vertexData with 5 floats per square
FloatBuffer vertexBuffer = ByteBuffer.allocateDirect(vertexData.length * 4).order(ByteOrder.nativeOrder()).asFloatBuffer();
vertexBufferBackground.put(vertexData).position(0);
int[] buffers = new int[1];
GLES20.glGenBuffers(1, buffers, 0);
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, buffers[0]);
GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, vertexBuffer.capacity() * 4, vertexBuffer, GLES20.GL_STATIC_DRAW);
bufferIDBackground = buffers[0];
И вот как это отображается:
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, bufferID);
GLES20.glEnableVertexAttribArray(mPositionHandle);
GLES20.glVertexAttribPointer(mPositionHandle, 3, GLES20.GL_FLOAT, false, 20, 0);
GLES20.glEnableVertexAttribArray(mTexCoordLoc);
GLES20.glVertexAttribPointer(mTexCoordLoc, 2, GLES20.GL_FLOAT, false, 20, 12);
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);
Большая часть кода была опущена для простоты, я показываю только то, что считаю актуальным. Дайте мне знать, если этого недостаточно.
Изменить: вот изображение моей проблемы:
Обновление: я разделил буферы на более мелкие куски и визуализировал их по отдельности. Вот результаты (отредактированные с помощью MS Paint):
2x2 порции:
4x4 порции:
Предполагается, что нижние левые угловые плитки 4х4 пусты. Предполагается, что соседний кусок полностью заполнен. Похоже, что существует некоторое ограничение на количество вершин, которые может хранить / визуализировать один буфер, 3 для 2x2 и 9 для 4x4. (игнорировать зеленый материал, там в другом буфере).
Куски 1x1 (каждая плитка находится в своем собственном буфере) отрисовывает все полностью нормально, но производительность получает огромный удар.