Хороший день,
Я пытаюсь обновить часть VBO с вызовом к glBufferSubData (). Когда я обновляю от запуска (0) из моего существующего теневого буфера, нет никакой проблемы, поскольку буфер начинает читать от 0. Следующее будет читать 0 в y от буфера и помещать его в 0 к y в VBO:
gl.glBufferSubData(GL11.GL_ARRAY_BUFFER, 0, y, mPositionBuffer);
Однако, если я хочу обновить часть VBO (не от 0), я сталкиваюсь с проблемой; следующее не работает, так как оно запишет значения из запуска буфера (0 к y) в положение x к x+y VBO:
gl.glBufferSubData(GL11.GL_ARRAY_BUFFER, x, y, mPositionBuffer);
Изменение положения с помощью buffer.position (x) не имеет никакого эффекта:
gl.glBufferSubData(GL11.GL_ARRAY_BUFFER, x, y, mPositionBuffer.position(x));
Решение состоит в том, чтобы нарезать () буфер, который работает отлично:
mPositionBuffer.position(x);
gl.glBufferSubData(GL11.GL_ARRAY_BUFFER, x, y, mPositionBuffer.slice());
Но это вызывает мусор, так как новый буфер сгенерирован при помощи части, даже при том, что это использует то же хранилище данных.
Вопрос: существует ли способ добраться, желаемый результат (замените часть смещения VBO использование смещения в буфер), не генерируя мусора? Как Вы, вероятно, предположили, это для игры андроида, и сборка "мусора" в игре нет - нет.
Спасибо! Aert.