glbuffersubdata со смещением в буфер, не вызывая мусора - PullRequest
1 голос
/ 01 августа 2010

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.

Ответы [ 2 ]

1 голос
/ 30 мая 2011

Ну, я думаю, что можно использовать статический буфер в качестве ссылки и иметь срез для операции ввода-вывода.Тогда не будет звонить сборщику мусора, давно уже живёт корыто класса.

1 голос
/ 10 октября 2010

похоже, у меня та же проблема.

Единственное решение, которое мне пришло в голову, - это использовать android ndk для создания альтернативной реализации glBufferSubData, которая добавляет смещение к указателю (то есть, полученное из mPositionBuffer) перед передачей его фактическому openglфункция.

Это звучит слишком плохо, я надеюсь, что есть лучшее решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...