Какие ваши варианты ?
В одной из 100500 итераций разработки с нуля своего вдижка/игры делал через sparse binding/residency. Сейчас я решил, что у меня будет камера сверху вниз с ограничением приближения и отдаления. Поэтому мне будет достаточно текстур разрешением до 2к с блочной компрессией, которые можно загружать сразу полностью.
Допустим, что нету спарсе :)
innuendo
> Допустим, что нету спарсе :)
Создаешь новую текстуру в 2 раза больше старой. Копируешь в нее содержимое старой. Догружаешь недостающее. Удаляешь старую. =)
nullptr
Гениально :)
innuendo
> nullptr
> Гениально :)
Обращайся :)
Сам то как делал? Не томи.
nullptr
На каждую логическую две физические...
Дальше подожду :)
innuendo
> nullptr
> На каждую логическую две физические...
То же самое по сути.
nullptr
Разница есть очень даже ... Но лучше про потоки
Судя по топикам, похоже этот старый гремлин проверяет нас на находчивость и сообразительность.
ЗЫ. А действительно? Во вселенной звездных войн упоминается расса Йоды? Я его всегда гремлином считал...
mingw
Забавно, только пару часов читал про Йоду;)
Лучше про потоки давай :(
nullptr
> Копируешь в нее содержимое старой. Догружаешь недостающее. Удаляешь страрую.
А загрузка с диска асинхронная? Или синхронно в другом потоке? Или просто синхронно в render thread? Интересует про простои при загрузке.
Andrey
> nullptr
> > Копируешь в нее содержимое старой. Догружаешь недостающее. Удаляешь страрую.
> А загрузка с диска асинхронная? Или синхронно в другом потоке? Или просто синхронно в render thread? Интересует про простои при загрузке.
Ну, я бы в основном рендер потоке создавал (брал из пула) текстуру и заливал ее тем, что уже и так есть в памяти. А недостающие мипы грузил бы в staging буфер в другом потоке. Потом дозаливал бы опять же в основном потоке. Пока грузится с диска юзаешь старую текстуру. Какие тут простои?
Предположим, текстуры организованы в индексируемый в GLSL массив.
Основной потребитель id текстур - материалы - доступный в шейдере SSBO.
Можно устроить жонглирование id текстур в материалах, выгружая-загружая их. Нужно заморочиться синхронизацией, чтобы не было глюков с неатомарным доступом посреди выгрузки-загрузки, ну либо будут видны кратковременные глитчи.
Если спарсинга не "нет", а с ним не хочется возиться, реализуя полноценную страничную организацию, то можно сильно упростить реализацию.
Атомарной единицей является миплевел, а не страница в 64к.
Выгружать-загружать миплевелы намного менее громоздко, чем высчитывать текущую видимость куска текстуры в терминах страниц, и делая своп индивидуальным страницам.
Загрубляем гранулярность, упрощаем реализацию, немного теряем в эффективности.
Улучшаем гранулярность, усложняем реализацию, достигаем максимально возможного совершенства по использованию памяти.