OpenGL Texture Speed ​​- Просмотр зависимых текстур

У меня есть тип объекта, который отображает (правильно) текстуру на 2D-сетку в зависимости от поворота (имитирует 3D). Однако это довольно медленная загрузка / привязка нового изображения текстуры для каждого вида. Отключение зависящей от вида загрузки текстуры приводит к очень быстрой производительности.

Буферизация всех видов / текстур объекта может быть не лучшим вариантом, она может содержать порядка 720 видов (отдельных изображений), каждое из которых может иметь размер 600×1000 пикселей. Также нет никаких гарантий на системные спецификации конечного пользователя, и это периферийное приложение.

Есть ли хорошие промежуточные предложения OpenGL между загрузкой текстур по требованию и буферизацией всех текстур вида одновременно?

0

Решение

Вот где было бы полезно иметь кэш текстур, и вы загружаете все уровни MIP с самым низким разрешением из 720 различных изображений. Это будут ваши изображения с разрешением 1×1, 2×2 или около того.

Когда вы обнаруживаете изменения в представлении, вы обновляете кэш текстур, расставляя приоритеты текстур, которые использовались последними, так, чтобы те, что в данный момент были видны, имели высокий приоритет, а те, которые не использовались долгое время, будут иметь самый низкий приоритет.

По мере увеличения приоритета текстур вы будете вносить более высокие уровни детализации текстур в MIP и можете перепривязывать текстуры, когда они завершат загрузку, кэш текстур будет загружать их асинхронно в отдельном потоке, а затем уведомлять ваш основной поток, когда они могут быть подготовлены. так как это должно происходить в том же потоке, что и контекст GL.

Есть несколько других способов сделать это с помощью новых расширений, таких как Частично резидентные текстуры от AMD но расширение имеет некоторые ограничения, что делает его немного громоздким в использовании.

2

Другие решения

Если вращение плавное и медленное, вы можете передавать данные с диска в зависимости от представления и данных предварительной выборки для окружающих представлений.

Если вы можете позволить себе сжатие с потерями, вы можете поместить большое количество данных в оперативную память с агрессивным сжатием, а затем переместить некоторые из них в VRAM (если возможно, со сжатием DXT / BC).

Вы должны проверить эти статьи:

JMP Van Waveren. Потоковая передача текстур в реальном времени & декомпрессия. Intel
Сеть программного обеспечения, 2006.

JMP Van Waveren. Передача геопространственных текстур из медленного хранилища
устройства. Intel Software Network, 2008.

J.P. van Waveren. Задачи id tech 5: от виртуализации текстур до
массивное распараллеливание. SIGGRAPH Talk, 2009.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector