G'day,
Я пытаюсь обновить часть 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);
Изменение позиции с использованием буфера.Позиция (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.