spry
@spry

Загрузка данных в текстуру-атлас в фоновом потоке (OpenGL ES 2.0)

Есть 2 контекста. Один используется для рендера в основном потоке, второй для подгрузки текстур в фоновом режиме. Если не использовать атласы, то сложностей не возникнет, потому что к текстуре не обращаются в момент записи в нее 100%. А если мне нужно обновить участок атласа, но при этом рисовать с этого же атласа, но другие участки — я выполню акт наступания на грабли, или все пройдет гладко?
  • Вопрос задан
  • 3654 просмотра
Решения вопроса 1
jimon
@jimon
Смотря какая платформа (iOS\Android и модель GPU), в принципе в устройствах с iOS видеопамять и оперативная память совмещены в один чип, потому при map\unmap получаем поинтер по которому можно спокойно писать. Можно попробовать просто сделать в лоб: два контекста, атлас между ними расшарен, первый рисует, второй обновляет его данные. Можно чуть сложнее: используя GL_APPLE_sync создать точки синхронизации когда же атлас у нас рисуется, и заливать данные только когда он не используется. Или вообще топорное решение: сделать две копии атласа, рисовать первой, заливать во вторую, потом поменять их местами.

ps. Можно текстуру которую читаешь с флешки читать через memory mapping file, это обычно дает прирост в IO и не нужно выделять временный буфер, только текстуры на флешке должны лежать в RAW формате. Подробнее я расписывал на другом ресурсе.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы