Обновление данных VBO с помощью glBufferSubData()

В настоящее время я работаю над 2d Top -down RPG, написанной на Java 1.6 с LWJGL. Я реализовал использование VBO в своей игре, и теперь я поддерживаю два из них :один для данных вершин и один для координат текстуры.

Все работает нормально, за исключением того, что у меня все еще нет действительно логического способа обновить объекты. Например, если я хочу, чтобы определенная плитка изменила свою текстуру (, измените координаты текстуры внутри VBO, чтобы показать другую область листа текстуры ), я не вижу способа изменить только текстуру. координаты, которые соответствуют этой одиночной плитке. Все, о чем я сейчас могу думать, это, возможно, заполнение буферов всеми данными, необходимыми для каждого цикла, и загрузка их с помощью glBufferData в каждом кадре. Это работает, но не кажется лучшим способом сделать это (, или это так? ).

Теперь есть команда glBufferSubData, которая не будет выделять новую память, а только изменит часть, которую я скажу изменить. Дело в том, что я не знаю, как отслеживать область, которая должна быть изменена (и смещение ). LWJGL предлагает цель glBufferSubData (, смещение, данные ); команда, для работы которой требуется только начало буфера. Является ли смещение чем-то вроде индекса?

Итак, если я сначала загружу эти буферы в VBO, а затем захочу изменить второе значение второго float[]:

FloatBuffer vertexData = BufferUtils.createFloatBuffer(amountOfVertices * vertexSize);
vertexData.put(new float[]{100, 100, 300, 100, 300, 300, 100, 300});
vertexData.put(new float[]{400, 100, 600, 100, 600, 300, 400, 300});
vertexData.flip();

Я бы сгенерировал новые данные, поместил их в небольшой FloatBuffer и загрузил с помощью glBufferSubData (GL _VERTEX _ARRAY, 10, newFloatBuffer );? 10, потому что я хочу изменить значения с десятого старого значения.

Это правильно? Есть ли лучший способ сделать это? И снова :, ничего, если я буду -загружать все данные каждый кадр?

5
задан Brian Tompsett - 汤莱恩 7 November 2015 в 15:00
поделиться