2012-07-05 3 views
2

Я пытаюсь создать рендеринг OpenGL, который вышивает различные фигуры в одну большую сетку и сохраняет их в двух VBOs, одном GL_ARRAY_BUFFER и одном GL_ELEMENT_ARRAY_BUFFER. Я нацелен на то, чтобы он работал как с OpenGL ES 2, так и с OpenGL 3.2. В настоящее время я пытаюсь найти лучший способ справиться с удалением фигур из этой сетки, и мой текущий подход состоит в том, чтобы периодически перестраивать всю вещь, возможно, в фоновом потоке.Можно ли читать с VBO?

Проблема в том, что для восстановления новой и чистой сетки мне нужен доступ к вершинам/индексам, которые были записаны в буферы с помощью glMapBuffer. Согласно документации для GL_OES_mapbuffer, WRITE_ONLY_OES является единственным приемлемым параметром для «доступа».

Итак, я не думаю, что данные указывали на то, что есть надёжные для чтения, чтобы создать новые буферы. Я знаю, что в GL Core есть другие функции, которые позволяют копировать данные буфера, но они также, кажется, отсутствуют.

Может ли кто-нибудь убедиться, что это невозможно в ES 2.0 или дать некоторый подход к достижению чтения буфера? Мое настоящее решение состоит в том, чтобы сохранить теневую копию всех данных, что, очевидно, не идеально.

ответ

0

Я думаю, что сохранение теневой копии данных графического процессора в основной памяти намного лучше, чем чтение этих данных из памяти графического процессора. Рекомендуется отказаться от предыдущих данных, прежде чем использовать glMapBuffer в любом случае. Прочитайте this для получения дополнительной информации (он не даст вам прямой ответ на ваш вопрос, но может быть полезно).

+0

Благодарим за совет. Я чувствую то же самое о чтении из отображаемого буфера, когда вы специально запрашиваете (хотя и без возможности) доступ только для записи. Я не думаю, что ссылка очень актуальна, так как я ищу способ прочитать или скопировать VBO, и это сообщение связано со скоростью написания по-разному. –

Смежные вопросы